1 /* packet-openflow_v6.c
2 * Routines for OpenFlow dissection
3 * Copyright 2013, Anders Broman <anders.broman@ericsson.com>
4 * Copyright 2013, Zoltan Lajos Kis <zoltan.lajos.kis@ericsson.com>
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * SPDX-License-Identifier: GPL-2.0-or-later
12 * Ref https://www.opennetworking.org/sdn-resources/onf-specifications/openflow
17 #include <epan/packet.h>
18 #include <epan/etypes.h>
19 #include <epan/expert.h>
20 #include <epan/ipproto.h>
21 #include <epan/addr_resolv.h>
22 #include <wsutil/ws_roundup.h>
24 void proto_register_openflow_v6(void);
25 void proto_reg_handoff_openflow_v6(void);
26 static int dissect_openflow_message_v6(tvbuff_t
*, packet_info
*, proto_tree
*, int);
28 static dissector_handle_t eth_withoutfcs_handle
;
30 static int proto_openflow_v6
;
31 static int hf_openflow_v6_version
;
32 static int hf_openflow_v6_type
;
33 static int hf_openflow_v6_length
;
34 static int hf_openflow_v6_xid
;
35 static int hf_openflow_v6_oxm_class
;
36 static int hf_openflow_v6_oxm_field
;
37 static int hf_openflow_v6_oxm_field_basic
;
38 static int hf_openflow_v6_oxm_hm
;
39 static int hf_openflow_v6_oxm_length
;
40 static int hf_openflow_v6_oxm_experimenter_experimenter
;
41 static int hf_openflow_v6_oxm_value
;
42 static int hf_openflow_v6_oxm_value_etheraddr
;
43 static int hf_openflow_v6_oxm_value_vlan_present
;
44 static int hf_openflow_v6_oxm_value_vlan_vid
;
45 static int hf_openflow_v6_oxm_value_ethertype
;
46 static int hf_openflow_v6_oxm_value_ipv4addr
;
47 static int hf_openflow_v6_oxm_value_ipv6addr
;
48 static int hf_openflow_v6_oxm_value_ipproto
;
49 static int hf_openflow_v6_oxm_value_uint16
;
50 static int hf_openflow_v6_oxm_value_uint24
;
51 static int hf_openflow_v6_oxm_value_uint32
;
52 static int hf_openflow_v6_oxm_mask
;
53 static int hf_openflow_v6_oxm_mask_etheraddr
;
54 static int hf_openflow_v6_oxm_mask_ipv4addr
;
55 static int hf_openflow_v6_oxm_mask_ipv6addr
;
56 static int hf_openflow_v6_oxm_mask_vlan
;
57 static int hf_openflow_v6_match_type
;
58 static int hf_openflow_v6_match_length
;
59 static int hf_openflow_v6_match_pad
;
60 static int hf_openflow_v6_action_type
;
61 static int hf_openflow_v6_action_length
;
62 static int hf_openflow_v6_action_experimenter_experimenter
;
63 static int hf_openflow_v6_oxm_experimenter_value
;
64 static int hf_openflow_v6_oxm_register
;
65 static int hf_openflow_v6_action_output_port
;
66 static int hf_openflow_v6_action_output_max_len
;
67 static int hf_openflow_v6_action_output_pad
;
68 static int hf_openflow_v6_action_copy_ttl_out_pad
;
69 static int hf_openflow_v6_action_copy_ttl_in_pad
;
70 static int hf_openflow_v6_action_set_mpls_ttl_ttl
;
71 static int hf_openflow_v6_action_set_mpls_ttl_pad
;
72 static int hf_openflow_v6_action_dec_mpls_ttl_pad
;
73 static int hf_openflow_v6_action_push_vlan_ethertype
;
74 static int hf_openflow_v6_action_push_vlan_pad
;
75 static int hf_openflow_v6_action_pop_vlan_pad
;
76 static int hf_openflow_v6_action_push_mpls_ethertype
;
77 static int hf_openflow_v6_action_push_mpls_pad
;
78 static int hf_openflow_v6_action_pop_mpls_ethertype
;
79 static int hf_openflow_v6_action_pop_mpls_pad
;
80 static int hf_openflow_v6_action_set_queue_queue_id
;
81 static int hf_openflow_v6_action_group_group_id
;
82 static int hf_openflow_v6_action_set_nw_ttl_ttl
;
83 static int hf_openflow_v6_action_set_nw_ttl_pad
;
84 static int hf_openflow_v6_action_dec_nw_ttl_pad
;
85 static int hf_openflow_v6_action_set_field_pad
;
86 static int hf_openflow_v6_action_push_pbb_ethertype
;
87 static int hf_openflow_v6_action_push_pbb_pad
;
88 static int hf_openflow_v6_action_pop_pbb_pad
;
89 static int hf_openflow_v6_action_copy_field_n_bits
;
90 static int hf_openflow_v6_action_copy_field_src_offset
;
91 static int hf_openflow_v6_action_copy_field_dst_offset
;
92 static int hf_openflow_v6_action_copy_field_pad
;
93 static int hf_openflow_v6_action_meter_id
;
94 static int hf_openflow_v6_instruction_type
;
95 static int hf_openflow_v6_instruction_length
;
96 static int hf_openflow_v6_instruction_experimenter_experimenter
;
97 static int hf_openflow_v6_instruction_goto_table_table_id
;
98 static int hf_openflow_v6_instruction_goto_table_pad
;
99 static int hf_openflow_v6_instruction_write_metadata_pad
;
100 static int hf_openflow_v6_instruction_write_metadata_value
;
101 static int hf_openflow_v6_instruction_write_metadata_mask
;
102 static int hf_openflow_v6_instruction_actions_pad
;
103 static int hf_openflow_v6_port_desc_prop_type
;
104 static int hf_openflow_v6_port_desc_prop_length
;
105 static int hf_openflow_v6_port_desc_prop_ethernet_pad
;
106 static int hf_openflow_v6_port_desc_prop_ethernet_current
;
107 static int hf_openflow_v6_port_desc_prop_ethernet_current_10mb_hd
;
108 static int hf_openflow_v6_port_desc_prop_ethernet_current_10mb_fd
;
109 static int hf_openflow_v6_port_desc_prop_ethernet_current_100mb_hd
;
110 static int hf_openflow_v6_port_desc_prop_ethernet_current_100mb_fd
;
111 static int hf_openflow_v6_port_desc_prop_ethernet_current_1gb_hd
;
112 static int hf_openflow_v6_port_desc_prop_ethernet_current_1gb_fd
;
113 static int hf_openflow_v6_port_desc_prop_ethernet_current_10gb_fd
;
114 static int hf_openflow_v6_port_desc_prop_ethernet_current_40gb_fd
;
115 static int hf_openflow_v6_port_desc_prop_ethernet_current_100gb_fd
;
116 static int hf_openflow_v6_port_desc_prop_ethernet_current_1tb_fd
;
117 static int hf_openflow_v6_port_desc_prop_ethernet_current_other
;
118 static int hf_openflow_v6_port_desc_prop_ethernet_current_copper
;
119 static int hf_openflow_v6_port_desc_prop_ethernet_current_fiber
;
120 static int hf_openflow_v6_port_desc_prop_ethernet_current_autoneg
;
121 static int hf_openflow_v6_port_desc_prop_ethernet_current_pause
;
122 static int hf_openflow_v6_port_desc_prop_ethernet_current_pause_asym
;
123 static int hf_openflow_v6_port_desc_prop_ethernet_current_reserved
;
124 static int hf_openflow_v6_port_desc_prop_ethernet_advertised
;
125 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_10mb_hd
;
126 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_10mb_fd
;
127 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_100mb_hd
;
128 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_100mb_fd
;
129 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_1gb_hd
;
130 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_1gb_fd
;
131 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_10gb_fd
;
132 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_40gb_fd
;
133 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_100gb_fd
;
134 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_1tb_fd
;
135 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_other
;
136 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_copper
;
137 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_fiber
;
138 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_autoneg
;
139 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_pause
;
140 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_pause_asym
;
141 static int hf_openflow_v6_port_desc_prop_ethernet_advertised_reserved
;
142 static int hf_openflow_v6_port_desc_prop_ethernet_supported
;
143 static int hf_openflow_v6_port_desc_prop_ethernet_supported_10mb_hd
;
144 static int hf_openflow_v6_port_desc_prop_ethernet_supported_10mb_fd
;
145 static int hf_openflow_v6_port_desc_prop_ethernet_supported_100mb_hd
;
146 static int hf_openflow_v6_port_desc_prop_ethernet_supported_100mb_fd
;
147 static int hf_openflow_v6_port_desc_prop_ethernet_supported_1gb_hd
;
148 static int hf_openflow_v6_port_desc_prop_ethernet_supported_1gb_fd
;
149 static int hf_openflow_v6_port_desc_prop_ethernet_supported_10gb_fd
;
150 static int hf_openflow_v6_port_desc_prop_ethernet_supported_40gb_fd
;
151 static int hf_openflow_v6_port_desc_prop_ethernet_supported_100gb_fd
;
152 static int hf_openflow_v6_port_desc_prop_ethernet_supported_1tb_fd
;
153 static int hf_openflow_v6_port_desc_prop_ethernet_supported_other
;
154 static int hf_openflow_v6_port_desc_prop_ethernet_supported_copper
;
155 static int hf_openflow_v6_port_desc_prop_ethernet_supported_fiber
;
156 static int hf_openflow_v6_port_desc_prop_ethernet_supported_autoneg
;
157 static int hf_openflow_v6_port_desc_prop_ethernet_supported_pause
;
158 static int hf_openflow_v6_port_desc_prop_ethernet_supported_pause_asym
;
159 static int hf_openflow_v6_port_desc_prop_ethernet_supported_reserved
;
160 static int hf_openflow_v6_port_desc_prop_optical_pad
;
161 static int hf_openflow_v6_port_desc_prop_optical_supported
;
162 static int hf_openflow_v6_port_desc_prop_optical_supported_rx_tune
;
163 static int hf_openflow_v6_port_desc_prop_optical_supported_tx_tune
;
164 static int hf_openflow_v6_port_desc_prop_optical_supported_tx_pwr
;
165 static int hf_openflow_v6_port_desc_prop_optical_supported_use_freq
;
166 static int hf_openflow_v6_port_desc_prop_optical_tx_min_freq_lmda
;
167 static int hf_openflow_v6_port_desc_prop_optical_tx_max_freq_lmda
;
168 static int hf_openflow_v6_port_desc_prop_optical_tx_grid_freq_lmda
;
169 static int hf_openflow_v6_port_desc_prop_optical_rx_min_freq_lmda
;
170 static int hf_openflow_v6_port_desc_prop_optical_rx_max_freq_lmda
;
171 static int hf_openflow_v6_port_desc_prop_optical_rx_grid_freq_lmda
;
172 static int hf_openflow_v6_port_desc_prop_optical_tx_pwr_min
;
173 static int hf_openflow_v6_port_desc_prop_optical_tx_pwr_max
;
174 static int hf_openflow_v6_port_desc_prop_experimenter_experimenter
;
175 static int hf_openflow_v6_port_desc_prop_experimenter_exp_type
;
176 static int hf_openflow_v6_port_desc_prop_ethernet_peer
;
177 static int hf_openflow_v6_port_desc_prop_ethernet_peer_10mb_hd
;
178 static int hf_openflow_v6_port_desc_prop_ethernet_peer_10mb_fd
;
179 static int hf_openflow_v6_port_desc_prop_ethernet_peer_100mb_hd
;
180 static int hf_openflow_v6_port_desc_prop_ethernet_peer_100mb_fd
;
181 static int hf_openflow_v6_port_desc_prop_ethernet_peer_1gb_hd
;
182 static int hf_openflow_v6_port_desc_prop_ethernet_peer_1gb_fd
;
183 static int hf_openflow_v6_port_desc_prop_ethernet_peer_10gb_fd
;
184 static int hf_openflow_v6_port_desc_prop_ethernet_peer_40gb_fd
;
185 static int hf_openflow_v6_port_desc_prop_ethernet_peer_100gb_fd
;
186 static int hf_openflow_v6_port_desc_prop_ethernet_peer_1tb_fd
;
187 static int hf_openflow_v6_port_desc_prop_ethernet_peer_other
;
188 static int hf_openflow_v6_port_desc_prop_ethernet_peer_copper
;
189 static int hf_openflow_v6_port_desc_prop_ethernet_peer_fiber
;
190 static int hf_openflow_v6_port_desc_prop_ethernet_peer_autoneg
;
191 static int hf_openflow_v6_port_desc_prop_ethernet_peer_pause
;
192 static int hf_openflow_v6_port_desc_prop_ethernet_peer_pause_asym
;
193 static int hf_openflow_v6_port_desc_prop_ethernet_peer_reserved
;
194 static int hf_openflow_v6_port_desc_prop_ethernet_curr_speed
;
195 static int hf_openflow_v6_port_desc_prop_ethernet_max_speed
;
196 static int hf_openflow_v6_port_stats_prop_type
;
197 static int hf_openflow_v6_port_stats_prop_length
;
198 static int hf_openflow_v6_port_stats_prop_ethernet_pad
;
199 static int hf_openflow_v6_port_stats_prop_ethernet_rx_frame_err
;
200 static int hf_openflow_v6_port_stats_prop_ethernet_rx_over_err
;
201 static int hf_openflow_v6_port_stats_prop_ethernet_rx_crc_err
;
202 static int hf_openflow_v6_port_stats_prop_ethernet_collisions
;
203 static int hf_openflow_v6_port_stats_prop_optical_pad
;
204 static int hf_openflow_v6_port_stats_prop_optical_flags
;
205 static int hf_openflow_v6_port_stats_prop_optical_flags_rx_tune
;
206 static int hf_openflow_v6_port_stats_prop_optical_flags_tx_tune
;
207 static int hf_openflow_v6_port_stats_prop_optical_flags_tx_pwr
;
208 static int hf_openflow_v6_port_stats_prop_optical_flags_rx_pwr
;
209 static int hf_openflow_v6_port_stats_prop_optical_flags_tx_bias
;
210 static int hf_openflow_v6_port_stats_prop_optical_flags_tx_temp
;
211 static int hf_openflow_v6_port_stats_prop_optical_tx_freq_lmda
;
212 static int hf_openflow_v6_port_stats_prop_optical_tx_offset
;
213 static int hf_openflow_v6_port_stats_prop_optical_tx_grid_span
;
214 static int hf_openflow_v6_port_stats_prop_optical_rx_freq_lmda
;
215 static int hf_openflow_v6_port_stats_prop_optical_rx_offset
;
216 static int hf_openflow_v6_port_stats_prop_optical_rx_grid_span
;
217 static int hf_openflow_v6_port_stats_prop_optical_tx_pwr
;
218 static int hf_openflow_v6_port_stats_prop_optical_rx_pwr
;
219 static int hf_openflow_v6_port_stats_prop_optical_bias_current
;
220 static int hf_openflow_v6_port_stats_prop_optical_temperature
;
221 static int hf_openflow_v6_port_stats_prop_experimenter_experimenter
;
222 static int hf_openflow_v6_port_stats_prop_experimenter_exp_type
;
223 static int hf_openflow_v6_port_port_no
;
224 static int hf_openflow_v6_port_length
;
225 static int hf_openflow_v6_port_pad
;
226 static int hf_openflow_v6_port_hw_addr
;
227 static int hf_openflow_v6_port_pad2
;
228 static int hf_openflow_v6_port_name
;
229 static int hf_openflow_v6_port_config
;
230 static int hf_openflow_v6_port_config_port_down
;
231 static int hf_openflow_v6_port_config_no_recv
;
232 static int hf_openflow_v6_port_config_no_fwd
;
233 static int hf_openflow_v6_port_config_no_packet_in
;
234 static int hf_openflow_v6_port_state
;
235 static int hf_openflow_v6_port_state_link_down
;
236 static int hf_openflow_v6_port_state_blocked
;
237 static int hf_openflow_v6_port_state_live
;
238 static int hf_openflow_v6_meter_band_type
;
239 static int hf_openflow_v6_meter_band_len
;
240 static int hf_openflow_v6_meter_band_rate
;
241 static int hf_openflow_v6_meter_band_burst_size
;
242 static int hf_openflow_v6_meter_band_drop_pad
;
243 static int hf_openflow_v6_meter_band_dscp_remark_prec_level
;
244 static int hf_openflow_v6_meter_band_dscp_remark_pad
;
245 static int hf_openflow_v6_meter_band_experimenter_experimenter
;
246 static int hf_openflow_v6_hello_element_type
;
247 static int hf_openflow_v6_hello_element_length
;
248 static int hf_openflow_v6_hello_element_version_bitmap
;
249 static int hf_openflow_v6_hello_element_pad
;
250 static int hf_openflow_v6_error_type
;
251 static int hf_openflow_v6_error_hello_failed_code
;
252 static int hf_openflow_v6_error_bad_request_code
;
253 static int hf_openflow_v6_error_bad_action_code
;
254 static int hf_openflow_v6_error_bad_instruction_code
;
255 static int hf_openflow_v6_error_bad_match_code
;
256 static int hf_openflow_v6_error_flow_mod_failed_code
;
257 static int hf_openflow_v6_error_group_mod_failed_code
;
258 static int hf_openflow_v6_error_port_mod_failed_code
;
259 static int hf_openflow_v6_error_table_mod_failed_code
;
260 static int hf_openflow_v6_error_queue_op_failed_code
;
261 static int hf_openflow_v6_error_switch_config_failed_code
;
262 static int hf_openflow_v6_error_role_request_failed_code
;
263 static int hf_openflow_v6_error_meter_mod_failed_code
;
264 static int hf_openflow_v6_error_table_features_failed_code
;
265 static int hf_openflow_v6_error_bad_property_code
;
266 static int hf_openflow_v6_error_async_config_failed_code
;
267 static int hf_openflow_v6_error_flow_monitor_failed_code
;
268 static int hf_openflow_v6_error_bundle_failed_code
;
269 static int hf_openflow_v6_error_code
;
270 static int hf_openflow_v6_error_data_text
;
271 static int hf_openflow_v6_error_data_body
;
272 static int hf_openflow_v6_error_experimenter
;
273 static int hf_openflow_v6_echo_data
;
274 static int hf_openflow_v6_experimenter_experimenter
;
275 static int hf_openflow_v6_experimenter_exp_type
;
276 static int hf_openflow_v6_switch_features_datapath_id
;
277 static int hf_openflow_v6_switch_features_n_buffers
;
278 static int hf_openflow_v6_switch_features_n_tables
;
279 static int hf_openflow_v6_switch_features_auxiliary_id
;
280 static int hf_openflow_v6_switch_features_pad
;
281 static int hf_openflow_v6_switch_features_capabilities
;
282 static int hf_openflow_v6_switch_features_capabilities_flow_stats
;
283 static int hf_openflow_v6_switch_features_capabilities_table_stats
;
284 static int hf_openflow_v6_switch_features_capabilities_port_stats
;
285 static int hf_openflow_v6_switch_features_capabilities_group_stats
;
286 static int hf_openflow_v6_switch_features_capabilities_ip_reasm
;
287 static int hf_openflow_v6_switch_features_capabilities_queue_stats
;
288 static int hf_openflow_v6_switch_features_capabilities_port_blocked
;
289 static int hf_openflow_v6_switch_features_capabilities_bundles
;
290 static int hf_openflow_v6_switch_features_capabilities_flow_monitoring
;
291 static int hf_openflow_v6_switch_features_reserved
;
292 static int hf_openflow_v6_switch_config_flags
;
293 static int hf_openflow_v6_switch_config_flags_fragments
;
294 static int hf_openflow_v6_switch_config_miss_send_len
;
295 static int hf_openflow_v6_packet_in_buffer_id
;
296 static int hf_openflow_v6_packet_in_total_len
;
297 static int hf_openflow_v6_packet_in_reason
;
298 static int hf_openflow_v6_packet_in_table_id
;
299 static int hf_openflow_v6_packet_in_cookie
;
300 static int hf_openflow_v6_packet_in_pad
;
301 static int hf_openflow_v6_flow_removed_cookie
;
302 static int hf_openflow_v6_flow_removed_priority
;
303 static int hf_openflow_v6_flow_removed_reason
;
304 static int hf_openflow_v6_flow_removed_table_id
;
305 static int hf_openflow_v6_flow_removed_idle_timeout
;
306 static int hf_openflow_v6_flow_removed_hard_timeout
;
307 static int hf_openflow_v6_port_status_reason
;
308 static int hf_openflow_v6_port_status_pad
;
309 static int hf_openflow_v6_packet_out_buffer_id
;
310 static int hf_openflow_v6_packet_out_acts_len
;
311 static int hf_openflow_v6_packet_out_pad
;
312 static int hf_openflow_v6_flowmod_cookie
;
313 static int hf_openflow_v6_flowmod_cookie_mask
;
314 static int hf_openflow_v6_flowmod_table_id
;
315 static int hf_openflow_v6_flowmod_command
;
316 static int hf_openflow_v6_flowmod_idle_timeout
;
317 static int hf_openflow_v6_flowmod_hard_timeout
;
318 static int hf_openflow_v6_flowmod_priority
;
319 static int hf_openflow_v6_flowmod_buffer_id
;
320 static int hf_openflow_v6_flowmod_out_port
;
321 static int hf_openflow_v6_flowmod_out_group
;
322 static int hf_openflow_v6_flowmod_flags
;
323 static int hf_openflow_v6_flowmod_flags_send_flow_rem
;
324 static int hf_openflow_v6_flowmod_flags_check_overlap
;
325 static int hf_openflow_v6_flowmod_flags_reset_counts
;
326 static int hf_openflow_v6_flowmod_flags_no_packet_counts
;
327 static int hf_openflow_v6_flowmod_flags_no_byte_counts
;
328 static int hf_openflow_v6_flowmod_importance
;
329 static int hf_openflow_v6_bucket_length
;
330 static int hf_openflow_v6_bucket_weight
;
331 static int hf_openflow_v6_bucket_watch_port
;
332 static int hf_openflow_v6_bucket_watch_group
;
333 static int hf_openflow_v6_bucket_pad
;
334 static int hf_openflow_v6_groupmod_command
;
335 static int hf_openflow_v6_groupmod_type
;
336 static int hf_openflow_v6_groupmod_pad
;
337 static int hf_openflow_v6_groupmod_group_id
;
338 static int hf_openflow_v6_groupmod_bucket_array_len
;
339 static int hf_openflow_v6_groupmod_command_bucket_id
;
340 static int hf_openflow_v6_portmod_prop_type
;
341 static int hf_openflow_v6_portmod_prop_length
;
342 static int hf_openflow_v6_portmod_prop_ethernet_advertise
;
343 static int hf_openflow_v6_portmod_prop_ethernet_advertise_10mb_hd
;
344 static int hf_openflow_v6_portmod_prop_ethernet_advertise_10mb_fd
;
345 static int hf_openflow_v6_portmod_prop_ethernet_advertise_100mb_hd
;
346 static int hf_openflow_v6_portmod_prop_ethernet_advertise_100mb_fd
;
347 static int hf_openflow_v6_portmod_prop_ethernet_advertise_1gb_hd
;
348 static int hf_openflow_v6_portmod_prop_ethernet_advertise_1gb_fd
;
349 static int hf_openflow_v6_portmod_prop_ethernet_advertise_10gb_fd
;
350 static int hf_openflow_v6_portmod_prop_ethernet_advertise_40gb_fd
;
351 static int hf_openflow_v6_portmod_prop_ethernet_advertise_100gb_fd
;
352 static int hf_openflow_v6_portmod_prop_ethernet_advertise_1tb_fd
;
353 static int hf_openflow_v6_portmod_prop_ethernet_advertise_other
;
354 static int hf_openflow_v6_portmod_prop_ethernet_advertise_copper
;
355 static int hf_openflow_v6_portmod_prop_ethernet_advertise_fiber
;
356 static int hf_openflow_v6_portmod_prop_ethernet_advertise_autoneg
;
357 static int hf_openflow_v6_portmod_prop_ethernet_advertise_pause
;
358 static int hf_openflow_v6_portmod_prop_ethernet_advertise_pause_asym
;
359 static int hf_openflow_v6_portmod_prop_optical_configure
;
360 static int hf_openflow_v6_portmod_prop_optical_configure_rx_tune
;
361 static int hf_openflow_v6_portmod_prop_optical_configure_tx_tune
;
362 static int hf_openflow_v6_portmod_prop_optical_configure_tx_pwr
;
363 static int hf_openflow_v6_portmod_prop_optical_configure_use_freq
;
364 static int hf_openflow_v6_portmod_prop_optical_freq_lmda
;
365 static int hf_openflow_v6_portmod_prop_optical_fl_offset
;
366 static int hf_openflow_v6_portmod_prop_optical_grid_span
;
367 static int hf_openflow_v6_portmod_prop_optical_tx_pwr
;
368 static int hf_openflow_v6_portmod_prop_experimenter_experimenter
;
369 static int hf_openflow_v6_portmod_prop_experimenter_exp_type
;
370 static int hf_openflow_v6_portmod_port_no
;
371 static int hf_openflow_v6_portmod_pad
;
372 static int hf_openflow_v6_portmod_hw_addr
;
373 static int hf_openflow_v6_portmod_pad2
;
374 static int hf_openflow_v6_portmod_config
;
375 static int hf_openflow_v6_portmod_config_port_down
;
376 static int hf_openflow_v6_portmod_config_no_recv
;
377 static int hf_openflow_v6_portmod_config_no_fwd
;
378 static int hf_openflow_v6_portmod_config_no_packet_in
;
379 static int hf_openflow_v6_portmod_mask
;
380 static int hf_openflow_v6_portmod_mask_port_down
;
381 static int hf_openflow_v6_portmod_mask_no_recv
;
382 static int hf_openflow_v6_portmod_mask_no_fwd
;
383 static int hf_openflow_v6_portmod_mask_no_packet_in
;
384 static int hf_openflow_v6_tablemod_table_id
;
385 static int hf_openflow_v6_tablemod_pad
;
386 static int hf_openflow_v6_tablemod_config
;
387 static int hf_openflow_v6_tablemod_config_eviction
;
388 static int hf_openflow_v6_tablemod_config_vacancy_events
;
389 static int hf_openflow_v6_tablemod_prop_type
;
390 static int hf_openflow_v6_tablemod_prop_length
;
391 static int hf_openflow_v6_tablemod_prop_eviction_flags
;
392 static int hf_openflow_v6_tablemod_prop_eviction_flags_other
;
393 static int hf_openflow_v6_tablemod_prop_eviction_flags_importance
;
394 static int hf_openflow_v6_tablemod_prop_eviction_flags_lifetime
;
395 static int hf_openflow_v6_tablemod_prop_vacancy_vacancy_down
;
396 static int hf_openflow_v6_tablemod_prop_vacancy_vacancy_up
;
397 static int hf_openflow_v6_tablemod_prop_vacancy_vacancy
;
398 static int hf_openflow_v6_tablemod_prop_vacancy_pad
;
399 static int hf_openflow_v6_tablemod_prop_experimenter_experimenter
;
400 static int hf_openflow_v6_tablemod_prop_experimenter_exp_type
;
401 static int hf_openflow_v6_flow_stats_request_table_id
;
402 static int hf_openflow_v6_flow_stats_request_pad
;
403 static int hf_openflow_v6_flow_stats_request_out_port
;
404 static int hf_openflow_v6_flow_stats_request_out_group
;
405 static int hf_openflow_v6_flow_stats_request_pad2
;
406 static int hf_openflow_v6_flow_stats_request_cookie
;
407 static int hf_openflow_v6_flow_stats_request_cookie_mask
;
408 static int hf_openflow_v6_aggregate_stats_request_table_id
;
409 static int hf_openflow_v6_aggregate_stats_request_pad
;
410 static int hf_openflow_v6_aggregate_stats_request_out_port
;
411 static int hf_openflow_v6_aggregate_stats_request_out_group
;
412 static int hf_openflow_v6_aggregate_stats_request_pad2
;
413 static int hf_openflow_v6_aggregate_stats_request_cookie
;
414 static int hf_openflow_v6_aggregate_stats_request_cookie_mask
;
415 static int hf_openflow_v6_table_feature_prop_type
;
416 static int hf_openflow_v6_table_feature_prop_length
;
417 static int hf_openflow_v6_table_feature_prop_next_tables_next_table_id
;
418 static int hf_openflow_v6_table_feature_prop_table_sync_from_table_id
;
419 static int hf_openflow_v6_table_feature_prop_experimenter_experimenter
;
420 static int hf_openflow_v6_table_feature_prop_experimenter_exp_type
;
421 static int hf_openflow_v6_table_feature_prop_pad
;
422 static int hf_openflow_v6_table_features_length
;
423 static int hf_openflow_v6_table_features_table_id
;
424 static int hf_openflow_v6_table_features_pad
;
425 static int hf_openflow_v6_table_features_name
;
426 static int hf_openflow_v6_table_features_metadata_match
;
427 static int hf_openflow_v6_table_features_metadata_write
;
428 static int hf_openflow_v6_table_features_capabilities
;
429 static int hf_openflow_v6_table_features_capabilities_eviction
;
430 static int hf_openflow_v6_table_features_capabilities_vacancy_events
;
431 static int hf_openflow_v6_table_features_max_entries
;
432 static int hf_openflow_v6_port_stats_request_port_no
;
433 static int hf_openflow_v6_port_stats_request_pad
;
434 static int hf_openflow_v6_queue_stats_request_port_no
;
435 static int hf_openflow_v6_queue_stats_request_queue_id
;
436 static int hf_openflow_v6_group_stats_request_group_id
;
437 static int hf_openflow_v6_group_stats_request_pad
;
438 static int hf_openflow_v6_meter_stats_request_meter_id
;
439 static int hf_openflow_v6_meter_stats_request_pad
;
440 static int hf_openflow_v6_meter_desc_request_meter_id
;
441 static int hf_openflow_v6_meter_desc_request_pad
;
442 static int hf_openflow_v6_queue_desc_request_port_no
;
443 static int hf_openflow_v6_queue_desc_request_queue_id
;
444 static int hf_openflow_v6_flow_monitor_request_monitor_id
;
445 static int hf_openflow_v6_flow_monitor_request_out_port
;
446 static int hf_openflow_v6_flow_monitor_request_out_group
;
447 static int hf_openflow_v6_flow_monitor_request_flags
;
448 static int hf_openflow_v6_flow_monitor_request_flags_initial
;
449 static int hf_openflow_v6_flow_monitor_request_flags_add
;
450 static int hf_openflow_v6_flow_monitor_request_flags_removed
;
451 static int hf_openflow_v6_flow_monitor_request_flags_modify
;
452 static int hf_openflow_v6_flow_monitor_request_flags_instructions
;
453 static int hf_openflow_v6_flow_monitor_request_flags_no_abbrev
;
454 static int hf_openflow_v6_flow_monitor_request_flags_only_own
;
455 static int hf_openflow_v6_flow_monitor_request_table_id
;
456 static int hf_openflow_v6_flow_monitor_request_command
;
457 static int hf_openflow_v6_multipart_request_type
;
458 static int hf_openflow_v6_multipart_request_flags
;
459 static int hf_openflow_v6_multipart_request_flags_more
;
460 static int hf_openflow_v6_multipart_request_pad
;
461 static int hf_openflow_v6_multipart_request_experimenter_experimenter
;
462 static int hf_openflow_v6_multipart_request_experimenter_exp_type
;
463 static int hf_openflow_v6_switch_description_mfr_desc
;
464 static int hf_openflow_v6_switch_description_hw_desc
;
465 static int hf_openflow_v6_switch_description_sw_desc
;
466 static int hf_openflow_v6_switch_description_serial_num
;
467 static int hf_openflow_v6_switch_description_dp_desc
;
468 static int hf_openflow_v6_flow_stats_length
;
469 static int hf_openflow_v6_flow_stats_table_id
;
470 static int hf_openflow_v6_flow_stats_duration_sec
;
471 static int hf_openflow_v6_flow_stats_duration_nsec
;
472 static int hf_openflow_v6_flow_stats_priority
;
473 static int hf_openflow_v6_flow_stats_pad2
;
474 static int hf_openflow_v6_table_stats_table_id
;
475 static int hf_openflow_v6_table_stats_pad
;
476 static int hf_openflow_v6_table_stats_active_count
;
477 static int hf_openflow_v6_table_stats_lookup_count
;
478 static int hf_openflow_v6_table_stats_match_count
;
479 static int hf_openflow_v6_port_stats_length
;
480 static int hf_openflow_v6_port_stats_pad
;
481 static int hf_openflow_v6_port_stats_port_no
;
482 static int hf_openflow_v6_port_stats_duration_sec
;
483 static int hf_openflow_v6_port_stats_duration_nsec
;
484 static int hf_openflow_v6_port_stats_rx_packets
;
485 static int hf_openflow_v6_port_stats_tx_packets
;
486 static int hf_openflow_v6_port_stats_rx_bytes
;
487 static int hf_openflow_v6_port_stats_tx_bytes
;
488 static int hf_openflow_v6_port_stats_rx_dropped
;
489 static int hf_openflow_v6_port_stats_tx_dropped
;
490 static int hf_openflow_v6_port_stats_rx_errors
;
491 static int hf_openflow_v6_port_stats_tx_errors
;
492 static int hf_openflow_v6_queue_stats_length
;
493 static int hf_openflow_v6_queue_stats_pad
;
494 static int hf_openflow_v6_queue_stats_port_no
;
495 static int hf_openflow_v6_queue_stats_queue_id
;
496 static int hf_openflow_v6_queue_stats_tx_bytes
;
497 static int hf_openflow_v6_queue_stats_tx_packets
;
498 static int hf_openflow_v6_queue_stats_tx_errors
;
499 static int hf_openflow_v6_queue_stats_duration_sec
;
500 static int hf_openflow_v6_queue_stats_duration_nsec
;
501 static int hf_openflow_v6_queue_stats_prop_type
;
502 static int hf_openflow_v6_queue_stats_prop_length
;
503 static int hf_openflow_v6_queue_stats_prop_experimenter_experimenter
;
504 static int hf_openflow_v6_queue_stats_prop_experimenter_exp_type
;
505 static int hf_openflow_v6_bucket_counter_packet_count
;
506 static int hf_openflow_v6_bucket_counter_byte_count
;
507 static int hf_openflow_v6_group_stats_length
;
508 static int hf_openflow_v6_group_stats_pad
;
509 static int hf_openflow_v6_group_stats_group_id
;
510 static int hf_openflow_v6_group_stats_ref_count
;
511 static int hf_openflow_v6_group_stats_pad2
;
512 static int hf_openflow_v6_group_stats_packet_count
;
513 static int hf_openflow_v6_group_stats_byte_count
;
514 static int hf_openflow_v6_group_desc_length
;
515 static int hf_openflow_v6_group_desc_type
;
516 static int hf_openflow_v6_group_desc_pad
;
517 static int hf_openflow_v6_group_desc_group_id
;
518 static int hf_openflow_v6_group_features_types
;
519 static int hf_openflow_v6_group_features_types_all
;
520 static int hf_openflow_v6_group_features_types_select
;
521 static int hf_openflow_v6_group_features_types_indirect
;
522 static int hf_openflow_v6_group_features_types_ff
;
523 static int hf_openflow_v6_group_features_capabilities
;
524 static int hf_openflow_v6_group_features_capabilities_select_weight
;
525 static int hf_openflow_v6_group_features_capabilities_select_liveness
;
526 static int hf_openflow_v6_group_features_capabilities_chaining
;
527 static int hf_openflow_v6_group_features_capabilities_chaining_checks
;
528 static int hf_openflow_v6_group_features_max_groups_all
;
529 static int hf_openflow_v6_group_features_max_groups_select
;
530 static int hf_openflow_v6_group_features_max_groups_indirect
;
531 static int hf_openflow_v6_group_features_max_groups_ff
;
532 static int hf_openflow_v6_group_features_actions_all
;
533 static int hf_openflow_v6_group_features_actions_all_output
;
534 static int hf_openflow_v6_group_features_actions_all_copy_ttl_out
;
535 static int hf_openflow_v6_group_features_actions_all_copy_ttl_in
;
536 static int hf_openflow_v6_group_features_actions_all_set_mpls_ttl
;
537 static int hf_openflow_v6_group_features_actions_all_dec_mpls_ttl
;
538 static int hf_openflow_v6_group_features_actions_all_push_vlan
;
539 static int hf_openflow_v6_group_features_actions_all_pop_vlan
;
540 static int hf_openflow_v6_group_features_actions_all_push_mpls
;
541 static int hf_openflow_v6_group_features_actions_all_pop_mpls
;
542 static int hf_openflow_v6_group_features_actions_all_set_queue
;
543 static int hf_openflow_v6_group_features_actions_all_group
;
544 static int hf_openflow_v6_group_features_actions_all_set_nw_ttl
;
545 static int hf_openflow_v6_group_features_actions_all_dec_nw_ttl
;
546 static int hf_openflow_v6_group_features_actions_all_set_field
;
547 static int hf_openflow_v6_group_features_actions_all_push_pbb
;
548 static int hf_openflow_v6_group_features_actions_all_pop_pbb
;
549 static int hf_openflow_v6_group_features_actions_all_copy_field
;
550 static int hf_openflow_v6_group_features_actions_all_meter
;
551 static int hf_openflow_v6_group_features_actions_select
;
552 static int hf_openflow_v6_group_features_actions_select_output
;
553 static int hf_openflow_v6_group_features_actions_select_copy_ttl_out
;
554 static int hf_openflow_v6_group_features_actions_select_copy_ttl_in
;
555 static int hf_openflow_v6_group_features_actions_select_set_mpls_ttl
;
556 static int hf_openflow_v6_group_features_actions_select_dec_mpls_ttl
;
557 static int hf_openflow_v6_group_features_actions_select_push_vlan
;
558 static int hf_openflow_v6_group_features_actions_select_pop_vlan
;
559 static int hf_openflow_v6_group_features_actions_select_push_mpls
;
560 static int hf_openflow_v6_group_features_actions_select_pop_mpls
;
561 static int hf_openflow_v6_group_features_actions_select_set_queue
;
562 static int hf_openflow_v6_group_features_actions_select_group
;
563 static int hf_openflow_v6_group_features_actions_select_set_nw_ttl
;
564 static int hf_openflow_v6_group_features_actions_select_dec_nw_ttl
;
565 static int hf_openflow_v6_group_features_actions_select_set_field
;
566 static int hf_openflow_v6_group_features_actions_select_push_pbb
;
567 static int hf_openflow_v6_group_features_actions_select_pop_pbb
;
568 static int hf_openflow_v6_group_features_actions_select_copy_field
;
569 static int hf_openflow_v6_group_features_actions_select_meter
;
570 static int hf_openflow_v6_group_features_actions_indirect
;
571 static int hf_openflow_v6_group_features_actions_indirect_output
;
572 static int hf_openflow_v6_group_features_actions_indirect_copy_ttl_out
;
573 static int hf_openflow_v6_group_features_actions_indirect_copy_ttl_in
;
574 static int hf_openflow_v6_group_features_actions_indirect_set_mpls_ttl
;
575 static int hf_openflow_v6_group_features_actions_indirect_dec_mpls_ttl
;
576 static int hf_openflow_v6_group_features_actions_indirect_push_vlan
;
577 static int hf_openflow_v6_group_features_actions_indirect_pop_vlan
;
578 static int hf_openflow_v6_group_features_actions_indirect_push_mpls
;
579 static int hf_openflow_v6_group_features_actions_indirect_pop_mpls
;
580 static int hf_openflow_v6_group_features_actions_indirect_set_queue
;
581 static int hf_openflow_v6_group_features_actions_indirect_group
;
582 static int hf_openflow_v6_group_features_actions_indirect_set_nw_ttl
;
583 static int hf_openflow_v6_group_features_actions_indirect_dec_nw_ttl
;
584 static int hf_openflow_v6_group_features_actions_indirect_set_field
;
585 static int hf_openflow_v6_group_features_actions_indirect_push_pbb
;
586 static int hf_openflow_v6_group_features_actions_indirect_pop_pbb
;
587 static int hf_openflow_v6_group_features_actions_indirect_copy_field
;
588 static int hf_openflow_v6_group_features_actions_indirect_meter
;
589 static int hf_openflow_v6_group_features_actions_ff
;
590 static int hf_openflow_v6_group_features_actions_ff_output
;
591 static int hf_openflow_v6_group_features_actions_ff_copy_ttl_out
;
592 static int hf_openflow_v6_group_features_actions_ff_copy_ttl_in
;
593 static int hf_openflow_v6_group_features_actions_ff_set_mpls_ttl
;
594 static int hf_openflow_v6_group_features_actions_ff_dec_mpls_ttl
;
595 static int hf_openflow_v6_group_features_actions_ff_push_vlan
;
596 static int hf_openflow_v6_group_features_actions_ff_pop_vlan
;
597 static int hf_openflow_v6_group_features_actions_ff_push_mpls
;
598 static int hf_openflow_v6_group_features_actions_ff_pop_mpls
;
599 static int hf_openflow_v6_group_features_actions_ff_set_queue
;
600 static int hf_openflow_v6_group_features_actions_ff_group
;
601 static int hf_openflow_v6_group_features_actions_ff_set_nw_ttl
;
602 static int hf_openflow_v6_group_features_actions_ff_dec_nw_ttl
;
603 static int hf_openflow_v6_group_features_actions_ff_set_field
;
604 static int hf_openflow_v6_group_features_actions_ff_push_pbb
;
605 static int hf_openflow_v6_group_features_actions_ff_pop_pbb
;
606 static int hf_openflow_v6_group_features_actions_ff_copy_field
;
607 static int hf_openflow_v6_group_features_actions_ff_meter
;
608 static int hf_openflow_v6_meter_band_stats_packet_band_count
;
609 static int hf_openflow_v6_meter_band_stats_byte_band_count
;
610 static int hf_openflow_v6_meter_stats_meter_id
;
611 static int hf_openflow_v6_meter_stats_len
;
612 static int hf_openflow_v6_meter_stats_pad
;
613 static int hf_openflow_v6_meter_stats_flow_count
;
614 static int hf_openflow_v6_meter_stats_packet_in_count
;
615 static int hf_openflow_v6_meter_stats_byte_in_count
;
616 static int hf_openflow_v6_meter_stats_duration_sec
;
617 static int hf_openflow_v6_meter_stats_duration_nsec
;
618 static int hf_openflow_v6_meter_desc_len
;
619 static int hf_openflow_v6_meter_desc_flags
;
620 static int hf_openflow_v6_meter_desc_flags_kbps
;
621 static int hf_openflow_v6_meter_desc_flags_pktps
;
622 static int hf_openflow_v6_meter_desc_flags_burst
;
623 static int hf_openflow_v6_meter_desc_flags_stats
;
624 static int hf_openflow_v6_meter_desc_meter_id
;
625 static int hf_openflow_v6_meter_features_max_meter
;
626 static int hf_openflow_v6_meter_features_band_types
;
627 static int hf_openflow_v6_meter_features_band_types_drop
;
628 static int hf_openflow_v6_meter_features_band_types_dscp_remark
;
629 static int hf_openflow_v6_meter_features_capabilities
;
630 static int hf_openflow_v6_meter_features_capabilities_kbps
;
631 static int hf_openflow_v6_meter_features_capabilities_pktps
;
632 static int hf_openflow_v6_meter_features_capabilities_burst
;
633 static int hf_openflow_v6_meter_features_capabilities_stats
;
634 static int hf_openflow_v6_meter_features_max_bands
;
635 static int hf_openflow_v6_meter_features_max_color
;
636 static int hf_openflow_v6_meter_features_pad
;
637 static int hf_openflow_v6_flow_update_length
;
638 static int hf_openflow_v6_flow_update_event
;
639 static int hf_openflow_v6_flow_update_full_table_id
;
640 static int hf_openflow_v6_flow_update_full_reason
;
641 static int hf_openflow_v6_flow_update_full_zero
;
642 static int hf_openflow_v6_flow_update_full_idle_timeout
;
643 static int hf_openflow_v6_flow_update_full_hard_timeout
;
644 static int hf_openflow_v6_flow_update_full_priority
;
645 static int hf_openflow_v6_flow_update_full_zeros
;
646 static int hf_openflow_v6_flow_update_full_cookie
;
647 static int hf_openflow_v6_flow_update_abbrev_xid
;
648 static int hf_openflow_v6_flow_update_paused_zeros
;
649 static int hf_openflow_v6_multipart_reply_type
;
650 static int hf_openflow_v6_multipart_reply_flags
;
651 static int hf_openflow_v6_multipart_reply_flags_more
;
652 static int hf_openflow_v6_multipart_reply_pad
;
653 static int hf_openflow_v6_multipart_reply_experimenter_experimenter
;
654 static int hf_openflow_v6_multipart_reply_experimenter_exp_type
;
655 static int hf_openflow_v6_table_desc_length
;
656 static int hf_openflow_v6_table_desc_table_id
;
657 static int hf_openflow_v6_table_desc_pad
;
658 static int hf_openflow_v6_table_desc_config
;
659 static int hf_openflow_v6_table_desc_config_eviction
;
660 static int hf_openflow_v6_table_desc_config_vacancy_events
;
661 static int hf_openflow_v6_queue_desc_port_no
;
662 static int hf_openflow_v6_queue_desc_queue_id
;
663 static int hf_openflow_v6_queue_desc_len
;
664 static int hf_openflow_v6_queue_desc_pad
;
665 static int hf_openflow_v6_queue_desc_prop_property
;
666 static int hf_openflow_v6_queue_desc_prop_len
;
667 static int hf_openflow_v6_queue_desc_prop_pad
;
668 static int hf_openflow_v6_queue_desc_prop_min_rate_rate
;
669 static int hf_openflow_v6_queue_desc_prop_min_rate_pad
;
670 static int hf_openflow_v6_queue_desc_prop_max_rate_rate
;
671 static int hf_openflow_v6_queue_desc_prop_max_rate_pad
;
672 static int hf_openflow_v6_queue_desc_prop_experimenter_experimenter
;
673 static int hf_openflow_v6_queue_desc_prop_experimenter_exp_type
;
674 static int hf_openflow_v6_role_request_role
;
675 static int hf_openflow_v6_role_request_pad
;
676 static int hf_openflow_v6_role_request_generation_id
;
677 static int hf_openflow_v6_role_reply_role
;
678 static int hf_openflow_v6_role_reply_pad
;
679 static int hf_openflow_v6_role_reply_generation_id
;
680 static int hf_openflow_v6_async_config_prop_type
;
681 static int hf_openflow_v6_async_config_prop_length
;
682 static int hf_openflow_v6_async_config_prop_reason_packet_in_mask
;
683 static int hf_openflow_v6_async_config_prop_reason_packet_in_mask_table_miss
;
684 static int hf_openflow_v6_async_config_prop_reason_packet_in_mask_apply_action
;
685 static int hf_openflow_v6_async_config_prop_reason_packet_in_mask_invalid_ttl
;
686 static int hf_openflow_v6_async_config_prop_reason_packet_in_mask_action_set
;
687 static int hf_openflow_v6_async_config_prop_reason_packet_in_mask_group
;
688 static int hf_openflow_v6_async_config_prop_reason_packet_in_mask_packet_out
;
689 static int hf_openflow_v6_async_config_prop_reason_port_status_mask
;
690 static int hf_openflow_v6_async_config_prop_reason_port_status_mask_add
;
691 static int hf_openflow_v6_async_config_prop_reason_port_status_mask_delete
;
692 static int hf_openflow_v6_async_config_prop_reason_port_status_mask_modify
;
693 static int hf_openflow_v6_async_config_prop_reason_flow_removed_mask
;
694 static int hf_openflow_v6_async_config_prop_reason_flow_removed_mask_idle_timeout
;
695 static int hf_openflow_v6_async_config_prop_reason_flow_removed_mask_hard_timeout
;
696 static int hf_openflow_v6_async_config_prop_reason_flow_removed_mask_delete
;
697 static int hf_openflow_v6_async_config_prop_reason_flow_removed_mask_group_delete
;
698 static int hf_openflow_v6_async_config_prop_reason_flow_removed_mask_meter_delete
;
699 static int hf_openflow_v6_async_config_prop_reason_flow_removed_mask_eviction
;
700 static int hf_openflow_v6_async_config_prop_reason_role_status_mask
;
701 static int hf_openflow_v6_async_config_prop_reason_role_status_mask_master_request
;
702 static int hf_openflow_v6_async_config_prop_reason_role_status_mask_config
;
703 static int hf_openflow_v6_async_config_prop_reason_role_status_mask_experimenter
;
704 static int hf_openflow_v6_async_config_prop_reason_table_status_mask
;
705 static int hf_openflow_v6_async_config_prop_reason_table_status_mask_vacancy_down
;
706 static int hf_openflow_v6_async_config_prop_reason_table_status_mask_vacancy_up
;
707 static int hf_openflow_v6_async_config_prop_reason_requestforward_mask
;
708 static int hf_openflow_v6_async_config_prop_reason_requestforward_mask_group_mod
;
709 static int hf_openflow_v6_async_config_prop_reason_requestforward_mask_meter_mod
;
710 static int hf_openflow_v6_async_config_prop_experimenter_experimenter
;
711 static int hf_openflow_v6_async_config_prop_experimenter_exp_type
;
712 static int hf_openflow_v6_metermod_command
;
713 static int hf_openflow_v6_metermod_flags
;
714 static int hf_openflow_v6_metermod_flags_kbps
;
715 static int hf_openflow_v6_metermod_flags_pktps
;
716 static int hf_openflow_v6_metermod_flags_burst
;
717 static int hf_openflow_v6_metermod_flags_stats
;
718 static int hf_openflow_v6_metermod_meter_id
;
719 static int hf_openflow_v6_role_status_role
;
720 static int hf_openflow_v6_role_status_reason
;
721 static int hf_openflow_v6_role_status_pad
;
722 static int hf_openflow_v6_role_status_generation_id
;
723 static int hf_openflow_v6_table_status_reason
;
724 static int hf_openflow_v6_table_status_pad
;
725 static int hf_openflow_v6_bundle_control_bundle_id
;
726 static int hf_openflow_v6_bundle_control_type
;
727 static int hf_openflow_v6_bundle_control_flags
;
728 static int hf_openflow_v6_bundle_control_flags_atomic
;
729 static int hf_openflow_v6_bundle_control_flags_ordered
;
730 static int hf_openflow_v6_bundle_prop_type
;
731 static int hf_openflow_v6_bundle_prop_length
;
732 static int hf_openflow_v6_bundle_prop_experimenter_experimenter
;
733 static int hf_openflow_v6_bundle_prop_experimenter_exp_type
;
734 static int hf_openflow_v6_bundle_add_bundle_id
;
735 static int hf_openflow_v6_bundle_add_pad
;
736 static int hf_openflow_v6_bundle_add_flags
;
737 static int hf_openflow_v6_bundle_add_flags_atomic
;
738 static int hf_openflow_v6_bundle_add_flags_ordered
;
739 static int hf_openflow_v6_oxs_class
;
740 static int hf_openflow_v6_oxs_field
;
741 static int hf_openflow_v6_oxs_reserved
;
742 static int hf_openflow_v6_oxs_length
;
743 static int hf_openflow_v6_oxs_basic_duration_sec
;
744 static int hf_openflow_v6_oxs_basic_duration_nsec
;
745 static int hf_openflow_v6_oxs_basic_idle_sec
;
746 static int hf_openflow_v6_oxs_basic_idle_nsec
;
747 static int hf_openflow_v6_oxs_basic_flow_count
;
748 static int hf_openflow_v6_oxs_basic_packet_count
;
749 static int hf_openflow_v6_oxs_basic_byte_count
;
750 static int hf_openflow_v6_oxs_experimenter_experimenter
;
751 static int hf_openflow_v6_oxs_experimenter_value
;
752 static int hf_openflow_v6_instruction_stat_trigger_flags
;
753 static int hf_openflow_v6_instruction_stat_triffer_flags_periodic
;
754 static int hf_openflow_v6_instruction_stat_triffer_flags_only_first
;
755 static int hf_openflow_v6_instruction_stat_triffer_flags_reserved
;
756 static int hf_openflow_v6_port_desc_prop_recirculate_port_no
;
757 static int hf_openflow_v6_bundle_features_request_flags
;
758 static int hf_openflow_v6_bundle_features_request_pad
;
759 static int hf_openflow_v6_stats_reserved
;
760 static int hf_openflow_v6_stats_length
;
761 static int hf_openflow_v6_stats_pad
;
762 static int hf_openflow_v6_flow_desc_length
;
763 static int hf_openflow_v6_flow_desc_pad2
;
764 static int hf_openflow_v6_flow_desc_table_id
;
765 static int hf_openflow_v6_flow_desc_pad
;
766 static int hf_openflow_v6_flow_desc_priority
;
767 static int hf_openflow_v6_flow_desc_idle_timeout
;
768 static int hf_openflow_v6_flow_desc_hard_timeout
;
769 static int hf_openflow_v6_flow_desc_flags
;
770 static int hf_openflow_v6_flow_desc_flags_send_flow_rem
;
771 static int hf_openflow_v6_flow_desc_flags_check_overlap
;
772 static int hf_openflow_v6_flow_desc_flags_reset_counts
;
773 static int hf_openflow_v6_flow_desc_flags_no_packet_counts
;
774 static int hf_openflow_v6_flow_desc_flags_no_byte_counts
;
775 static int hf_openflow_v6_flow_desc_importance
;
776 static int hf_openflow_v6_flow_desc_cookie
;
777 static int hf_openflow_v6_controller_status_length
;
778 static int hf_openflow_v6_controller_status_short_id
;
779 static int hf_openflow_v6_controller_status_role
;
780 static int hf_openflow_v6_controller_status_reason
;
781 static int hf_openflow_v6_controller_status_channel_status
;
782 static int hf_openflow_v6_controller_status_pad
;
783 static int hf_openflow_v6_time_seconds
;
784 static int hf_openflow_v6_time_nanoseconds
;
785 static int hf_openflow_v6_time_pad
;
786 static int hf_openflow_v6_bundle_feature_prop_type
;
787 static int hf_openflow_v6_bundle_feature_prop_length
;
788 static int hf_openflow_v6_bundle_feature_prop_time_pad
;
789 static int hf_openflow_v6_bundle_feature_prop_experimenter_experimenter
;
790 static int hf_openflow_v6_bundle_feature_prop_experimenter_exp_type
;
791 static int hf_openflow_v6_bundle_feature_prop_pad
;
792 static int hf_openflow_v6_controller_status_prop_type
;
793 static int hf_openflow_v6_controller_status_prop_length
;
794 static int hf_openflow_v6_controller_status_prop_experimenter_experimenter
;
795 static int hf_openflow_v6_controller_status_prop_experimenter_exp_type
;
796 static int hf_openflow_v6_controller_status_prop_pad
;
797 static int hf_openflow_v6_flow_stats_reason
;
798 static int hf_openflow_v6_controller_status_prop_uri
;
800 static int ett_openflow_v6
;
801 static int ett_openflow_v6_flowmod_flags
;
802 static int ett_openflow_v6_bucket
;
803 static int ett_openflow_v6_oxm
;
804 static int ett_openflow_v6_match
;
805 static int ett_openflow_v6_action
;
806 static int ett_openflow_v6_instruction
;
807 static int ett_openflow_v6_port_desc_prop
;
808 static int ett_openflow_v6_port_desc_prop_ethernet_current
;
809 static int ett_openflow_v6_port_desc_prop_ethernet_advertised
;
810 static int ett_openflow_v6_port_desc_prop_ethernet_supported
;
811 static int ett_openflow_v6_port_desc_prop_ethernet_peer
;
812 static int ett_openflow_v6_port_desc_prop_optical_supported
;
813 static int ett_openflow_v6_port_stats_prop
;
814 static int ett_openflow_v6_port_stats_prop_optical_flags
;
815 static int ett_openflow_v6_port
;
816 static int ett_openflow_v6_port_config
;
817 static int ett_openflow_v6_port_state
;
818 static int ett_openflow_v6_meter_band
;
819 static int ett_openflow_v6_hello_element
;
820 static int ett_openflow_v6_error_data
;
821 static int ett_openflow_v6_switch_features_capabilities
;
822 static int ett_openflow_v6_switch_config_flags
;
823 static int ett_openflow_v6_packet_in_data
;
824 static int ett_openflow_v6_packet_out_data
;
825 static int ett_openflow_v6_portmod_prop
;
826 static int ett_openflow_v6_portmod_prop_ethernet_advertise
;
827 static int ett_openflow_v6_portmod_prop_optical_configure
;
828 static int ett_openflow_v6_portmod_config
;
829 static int ett_openflow_v6_portmod_mask
;
830 static int ett_openflow_v6_tablemod_config
;
831 static int ett_openflow_v6_tablemod_prop
;
832 static int ett_openflow_v6_tablemod_prop_eviction_flags
;
833 static int ett_openflow_v6_table_features
;
834 static int ett_openflow_v6_table_features_capabilities
;
835 static int ett_openflow_v6_table_feature_prop
;
836 static int ett_openflow_v6_table_feature_prop_instruction_id
;
837 static int ett_openflow_v6_table_feature_prop_action_id
;
838 static int ett_openflow_v6_table_feature_prop_oxm_id
;
839 static int ett_openflow_v6_flow_monitor_request_flags
;
840 static int ett_openflow_v6_multipart_request_flags
;
841 static int ett_openflow_v6_flow_stats
;
842 static int ett_openflow_v6_table_stats
;
843 static int ett_openflow_v6_port_stats
;
844 static int ett_openflow_v6_queue_stats
;
845 static int ett_openflow_v6_queue_stats_prop
;
846 static int ett_openflow_v6_bucket_counter
;
847 static int ett_openflow_v6_group_stats
;
848 static int ett_openflow_v6_group_desc
;
849 static int ett_openflow_v6_group_features_types
;
850 static int ett_openflow_v6_group_features_capabilities
;
851 static int ett_openflow_v6_group_features_actions_all
;
852 static int ett_openflow_v6_group_features_actions_select
;
853 static int ett_openflow_v6_group_features_actions_indirect
;
854 static int ett_openflow_v6_group_features_actions_ff
;
855 static int ett_openflow_v6_meter_band_stats
;
856 static int ett_openflow_v6_meter_stats
;
857 static int ett_openflow_v6_meter_desc
;
858 static int ett_openflow_v6_meter_desc_flags
;
859 static int ett_openflow_v6_meter_features_band_types
;
860 static int ett_openflow_v6_meter_features_capabilities
;
861 static int ett_openflow_v6_flow_update
;
862 static int ett_openflow_v6_multipart_reply_flags
;
863 static int ett_openflow_v6_table_desc
;
864 static int ett_openflow_v6_table_desc_config
;
865 static int ett_openflow_v6_queue_desc
;
866 static int ett_openflow_v6_queue_desc_prop
;
867 static int ett_openflow_v6_async_config_prop
;
868 static int ett_openflow_v6_async_config_prop_reason_packet_in_mask
;
869 static int ett_openflow_v6_async_config_prop_reason_port_status_mask
;
870 static int ett_openflow_v6_async_config_prop_reason_flow_removed_mask
;
871 static int ett_openflow_v6_async_config_prop_reason_role_status_mask
;
872 static int ett_openflow_v6_async_config_prop_reason_table_status_mask
;
873 static int ett_openflow_v6_async_config_prop_reason_requestforward_mask
;
874 static int ett_openflow_v6_metermod_flags
;
875 static int ett_openflow_v6_requestforward_request
;
876 static int ett_openflow_v6_bundle_control_flags
;
877 static int ett_openflow_v6_bundle_prop
;
878 static int ett_openflow_v6_bundle_add_flags
;
879 static int ett_openflow_v6_bundle_add_message
;
880 static int ett_openflow_v6_instruction_stat_trigger_flags
;
881 static int ett_openflow_v6_flow_desc
;
882 static int ett_openflow_v6_flow_desc_flags
;
883 static int ett_openflow_v6_bundle_feature_prop
;
884 static int ett_openflow_v6_controller_status_prop
;
886 static expert_field ei_openflow_v6_match_undecoded
;
887 static expert_field ei_openflow_v6_oxm_undecoded
;
888 static expert_field ei_openflow_v6_action_undecoded
;
889 static expert_field ei_openflow_v6_instruction_undecoded
;
890 static expert_field ei_openflow_v6_port_desc_prop_undecoded
;
891 static expert_field ei_openflow_v6_port_stats_prop_undecoded
;
892 static expert_field ei_openflow_v6_meter_band_undecoded
;
893 static expert_field ei_openflow_v6_hello_element_undecoded
;
894 static expert_field ei_openflow_v6_error_undecoded
;
895 static expert_field ei_openflow_v6_experimenter_undecoded
;
896 static expert_field ei_openflow_v6_portmod_prop_undecoded
;
897 static expert_field ei_openflow_v6_tablemod_prop_undecoded
;
898 static expert_field ei_openflow_v6_table_feature_prop_undecoded
;
899 static expert_field ei_openflow_v6_multipart_request_undecoded
;
900 static expert_field ei_openflow_v6_queue_stats_prop_undecoded
;
901 static expert_field ei_openflow_v6_flow_update_undecoded
;
902 static expert_field ei_openflow_v6_multipart_reply_undecoded
;
903 static expert_field ei_openflow_v6_queue_desc_prop_undecoded
;
904 static expert_field ei_openflow_v6_async_config_prop_undecoded
;
905 static expert_field ei_openflow_v6_bundle_prop_undecoded
;
906 static expert_field ei_openflow_v6_message_undecoded
;
907 static expert_field ei_openflow_v6_length_too_short
;
908 static expert_field ei_openflow_v6_bundle_feature_prop_undecoded
;
909 static expert_field ei_openflow_v6_controller_status_prop_undecoded
;
911 static const value_string openflow_v6_version_values
[] = {
918 #define OFPT_ECHO_REQUEST 2
919 #define OFPT_ECHO_REPLY 3
920 #define OFPT_EXPERIMENTER 4
921 #define OFPT_FEATURES_REQUEST 5
922 #define OFPT_FEATURES_REPLY 6
923 #define OFPT_GET_CONFIG_REQUEST 7
924 #define OFPT_GET_CONFIG_REPLY 8
925 #define OFPT_SET_CONFIG 9
926 #define OFPT_PACKET_IN 10
927 #define OFPT_FLOW_REMOVED 11
928 #define OFPT_PORT_STATUS 12
929 #define OFPT_PACKET_OUT 13
930 #define OFPT_FLOW_MOD 14
931 #define OFPT_GROUP_MOD 15
932 #define OFPT_PORT_MOD 16
933 #define OFPT_TABLE_MOD 17
934 #define OFPT_MULTIPART_REQUEST 18
935 #define OFPT_MULTIPART_REPLY 19
936 #define OFPT_BARRIER_REQUEST 20
937 #define OFPT_BARRIER_REPLY 21
938 #define OFPT_ROLE_REQUEST 24
939 #define OFPT_ROLE_REPLY 25
940 #define OFPT_GET_ASYNC_REQUEST 26
941 #define OFPT_GET_ASYNC_REPLY 27
942 #define OFPT_SET_ASYNC 28
943 #define OFPT_METER_MOD 29
944 #define OFPT_ROLE_STATUS 30
945 #define OFPT_TABLE_STATUS 31
946 #define OFPT_REQUESTFORWARD 32
947 #define OFPT_BUNDLE_CONTROL 33
948 #define OFPT_BUNDLE_ADD_MESSAGE 34
949 #define OFPT_CONTROLLER_STATUS 35
950 static const value_string openflow_v6_type_values
[] = {
951 { OFPT_HELLO
, "OFPT_HELLO" },
952 { OFPT_ERROR
, "OFPT_ERROR" },
953 { OFPT_ECHO_REQUEST
, "OFPT_ECHO_REQUEST" },
954 { OFPT_ECHO_REPLY
, "OFPT_ECHO_REPLY" },
955 { OFPT_EXPERIMENTER
, "OFPT_EXPERIMENTER" },
956 { OFPT_FEATURES_REQUEST
, "OFPT_FEATURES_REQUEST" },
957 { OFPT_FEATURES_REPLY
, "OFPT_FEATURES_REPLY" },
958 { OFPT_GET_CONFIG_REQUEST
, "OFPT_GET_CONFIG_REQUEST" },
959 { OFPT_GET_CONFIG_REPLY
, "OFPT_GET_CONFIG_REPLY" },
960 { OFPT_SET_CONFIG
, "OFPT_SET_CONFIG" },
961 { OFPT_PACKET_IN
, "OFPT_PACKET_IN" },
962 { OFPT_FLOW_REMOVED
, "OFPT_FLOW_REMOVED" },
963 { OFPT_PORT_STATUS
, "OFPT_PORT_STATUS" },
964 { OFPT_PACKET_OUT
, "OFPT_PACKET_OUT" },
965 { OFPT_FLOW_MOD
, "OFPT_FLOW_MOD" },
966 { OFPT_GROUP_MOD
, "OFPT_GROUP_MOD" },
967 { OFPT_PORT_MOD
, "OFPT_PORT_MOD" },
968 { OFPT_TABLE_MOD
, "OFPT_TABLE_MOD" },
969 { OFPT_MULTIPART_REQUEST
, "OFPT_MULTIPART_REQUEST" },
970 { OFPT_MULTIPART_REPLY
, "OFPT_MULTIPART_REPLY" },
971 { OFPT_BARRIER_REQUEST
, "OFPT_BARRIER_REQUEST" },
972 { OFPT_BARRIER_REPLY
, "OFPT_BARRIER_REPLY" },
973 { OFPT_ROLE_REQUEST
, "OFPT_ROLE_REQUEST" },
974 { OFPT_ROLE_REPLY
, "OFPT_ROLE_REPLY" },
975 { OFPT_GET_ASYNC_REQUEST
, "OFPT_GET_ASYNC_REQUEST" },
976 { OFPT_GET_ASYNC_REPLY
, "OFPT_GET_ASYNC_REPLY" },
977 { OFPT_SET_ASYNC
, "OFPT_SET_ASYNC" },
978 { OFPT_METER_MOD
, "OFPT_METER_MOD" },
979 { OFPT_ROLE_STATUS
, "OFPT_ROLE_STATUS" },
980 { OFPT_TABLE_STATUS
, "OFPT_TABLE_STATUS" },
981 { OFPT_REQUESTFORWARD
, "OFPT_REQUESTFORWARD" },
982 { OFPT_BUNDLE_CONTROL
, "OFPT_BUNDLE_CONTROL" },
983 { OFPT_BUNDLE_ADD_MESSAGE
, "OFPT_BUNDLE_ADD_MESSAGE" },
984 { OFPT_CONTROLLER_STATUS
, "OFPT_CONTROLLER_STATUS" },
987 static value_string_ext openflow_v6_type_values_ext
= VALUE_STRING_EXT_INIT(openflow_v6_type_values
);
990 dissect_openflow_header_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
992 /* uint8_t version; */
993 proto_tree_add_item(tree
, hf_openflow_v6_version
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
997 proto_tree_add_item(tree
, hf_openflow_v6_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1000 /* uint16_t length; */
1001 proto_tree_add_item(tree
, hf_openflow_v6_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1005 proto_tree_add_item(tree
, hf_openflow_v6_xid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1011 #define OFPP_MAX 0xffffff00 /* Last usable port number. */
1012 static const value_string openflow_v6_port_reserved_values
[] = {
1013 { 0xfffffff8, "OFPP_IN_PORT" },
1014 { 0xfffffff9, "OFPP_TABLE" },
1015 { 0xfffffffa, "OFPP_NORMAL" },
1016 { 0xfffffffb, "OFPP_FLOOD" },
1017 { 0xfffffffc, "OFPP_ALL" },
1018 { 0xfffffffd, "OFPP_CONTROLLER" },
1019 { 0xfffffffe, "OFPP_LOCAL" },
1020 { 0xffffffff, "OFPP_ANY" },
1024 #define OFPG_MAX 0xffffff00 /* Last usable group number. */
1025 static const value_string openflow_v6_group_reserved_values
[] = {
1026 { 0xfffffffc, "OFPG_ALL" },
1027 { 0xffffffff, "OFPG_ANY" },
1031 #define OFPTT_MAX 254 /* Last usable table number. */
1032 static const value_string openflow_v6_table_reserved_values
[] = {
1033 { 255, "OFPTT_ALL"},
1038 #define OFP_NO_BUFFER 0xffffffff /* No buffering. */
1039 static const value_string openflow_v6_buffer_reserved_values
[] = {
1040 { 0xffffffff, "OFP_NO_BUFFER" },
1047 #define OFPXSC_OPENFLOW_BASIC 0x8002
1048 #define OFPXSC_EXPERIMENTER 0xFFFF
1049 static const value_string openflow_v6_oxs_class_values
[] = {
1050 { OFPXSC_OPENFLOW_BASIC
, "OFPXSC_OPENFLOW_BASIC" },
1051 { OFPXSC_EXPERIMENTER
, "OFPXSC_EXPERIMENTER" },
1055 #define OFPXST_OFB_DURATION 0 /* Time flow entry has been alive. */
1056 #define OFPXST_OFB_IDLE_TIME 1 /* Time flow entry has been idle. */
1057 #define OFPXST_OFB_FLOW_COUNT 3 /* Number of aggregated flow entries. */
1058 #define OFPXST_OFB_PACKET_COUNT 4 /* Number of packets in flow entry. */
1059 #define OFPXST_OFB_BYTE_COUNT 5 /* Number of bytes in flow entry. */
1060 static const value_string openflow_v6_oxs_basic_field_values
[] = {
1061 { OFPXST_OFB_DURATION
, "OFPXST_OFB_DURATION" },
1062 { OFPXST_OFB_IDLE_TIME
, "OFPXST_OFB_IDLE_TIME" },
1063 { OFPXST_OFB_FLOW_COUNT
, "OFPXST_OFB_FLOW_COUNT" },
1064 { OFPXST_OFB_PACKET_COUNT
, "OFPXST_OFB_PACKET_COUNT" },
1065 { OFPXST_OFB_BYTE_COUNT
, "OFPXST_OFB_BYTE_COUNT" },
1069 #define OXS_FIELD_MASK 0xfe
1070 #define OXS_RESERVED_MASK 0x01
1073 dissect_openflow_v6_oxs(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1077 uint32_t oxs_payload_length
;
1079 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxs_class
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &oxs_class
);
1082 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxs_field
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &oxs_field
);
1083 proto_tree_add_item(tree
, hf_openflow_v6_oxs_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1086 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxs_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &oxs_payload_length
);
1089 if (oxs_class
== OFPXSC_OPENFLOW_BASIC
) {
1090 switch (oxs_field
) {
1091 case OFPXST_OFB_DURATION
:
1092 proto_tree_add_item(tree
, hf_openflow_v6_oxs_basic_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1093 proto_tree_add_item(tree
, hf_openflow_v6_oxs_basic_duration_nsec
, tvb
, offset
+4, 4, ENC_BIG_ENDIAN
);
1095 case OFPXST_OFB_IDLE_TIME
:
1096 proto_tree_add_item(tree
, hf_openflow_v6_oxs_basic_idle_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1097 proto_tree_add_item(tree
, hf_openflow_v6_oxs_basic_idle_nsec
, tvb
, offset
+4, 4, ENC_BIG_ENDIAN
);
1099 case OFPXST_OFB_FLOW_COUNT
:
1100 proto_tree_add_item(tree
, hf_openflow_v6_oxs_basic_flow_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1102 case OFPXST_OFB_PACKET_COUNT
:
1103 proto_tree_add_item(tree
, hf_openflow_v6_oxs_basic_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1105 case OFPXST_OFB_BYTE_COUNT
:
1106 proto_tree_add_item(tree
, hf_openflow_v6_oxs_basic_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1109 } else if (oxs_class
== OFPXSC_EXPERIMENTER
) {
1110 proto_tree_add_item(tree
, hf_openflow_v6_oxs_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1112 proto_tree_add_item(tree
, hf_openflow_v6_oxs_experimenter_value
, tvb
, offset
+4, oxs_payload_length
- 4, ENC_NA
);
1114 offset
+=oxs_payload_length
;
1120 dissect_openflow_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1123 uint32_t stats_length
;
1127 proto_tree_add_item(tree
, hf_openflow_v6_stats_reserved
, tvb
, offset
, 2, ENC_NA
);
1129 ti
= proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_stats_length
, tvb
, offset
+2, 2, ENC_BIG_ENDIAN
, &stats_length
);
1131 oxs_end
= offset
+ stats_length
;
1134 if (stats_length
< 4) {
1135 expert_add_info(pinfo
, ti
, &ei_openflow_v6_length_too_short
);
1139 while (offset
< oxs_end
) {
1140 offset
= dissect_openflow_v6_oxs(tvb
, pinfo
, tree
, offset
, oxs_end
- offset
);
1143 if (offset
> oxs_end
) {
1144 // XXX EI if offset > oxs_end?
1148 padding
= WS_ROUNDUP_8(stats_length
) - stats_length
;
1150 proto_tree_add_item(tree
, hf_openflow_v6_stats_pad
, tvb
, oxs_end
, padding
, ENC_NA
);
1160 #define OFPXMC_NXM_0 0x0000 /* Backward compatibility with NXM */
1161 #define OFPXMC_NXM_1 0x0001 /* Backward compatibility with NXM */
1162 #define OFPXMC_OPENFLOW_BASIC 0x8000 /* Basic class for OpenFlow */
1163 #define OFPXMC_PACKET_REGS 0x8001 /* Packet registers (pipeline fields). */
1164 #define OFPXMC_EXPERIMENTER 0xFFFF /* Experimenter class */
1165 static const value_string openflow_v6_oxm_class_values
[] = {
1166 { 0x0000, "OFPXMC_NMX_0" },
1167 { 0x0001, "OFPXMC_NXM_1" },
1168 { 0x8000, "OFPXMC_OPENFLOW_BASIC" },
1169 { 0x8001, "OFPXMC_PACKET_REGS" },
1170 { 0xFFFF, "OFPXMC_EXPERIMENTER" },
1174 #define OFPXMT_OFB_IN_PORT 0
1175 #define OFPXMT_OFB_IN_PHY_PORT 1
1176 #define OFPXMT_OFB_METADATA 2
1177 #define OFPXMT_OFB_ETH_DST 3
1178 #define OFPXMT_OFB_ETH_SRC 4
1179 #define OFPXMT_OFB_ETH_TYPE 5
1180 #define OFPXMT_OFB_VLAN_VID 6
1181 #define OFPXMT_OFB_VLAN_PCP 7
1182 #define OFPXMT_OFB_IP_DSCP 8
1183 #define OFPXMT_OFB_IP_ECN 9
1184 #define OFPXMT_OFB_IP_PROTO 10
1185 #define OFPXMT_OFB_IPV4_SRC 11
1186 #define OFPXMT_OFB_IPV4_DST 12
1187 #define OFPXMT_OFB_TCP_SRC 13
1188 #define OFPXMT_OFB_TCP_DST 14
1189 #define OFPXMT_OFB_UDP_SRC 15
1190 #define OFPXMT_OFB_UDP_DST 16
1191 #define OFPXMT_OFB_SCTP_SRC 17
1192 #define OFPXMT_OFB_SCTP_DST 18
1193 #define OFPXMT_OFB_ICMPV4_TYPE 19
1194 #define OFPXMT_OFB_ICMPV4_CODE 20
1195 #define OFPXMT_OFB_ARP_OP 21
1196 #define OFPXMT_OFB_ARP_SPA 22
1197 #define OFPXMT_OFB_ARP_TPA 23
1198 #define OFPXMT_OFB_ARP_SHA 24
1199 #define OFPXMT_OFB_ARP_THA 25
1200 #define OFPXMT_OFB_IPV6_SRC 26
1201 #define OFPXMT_OFB_IPV6_DST 27
1202 #define OFPXMT_OFB_IPV6_FLABEL 28
1203 #define OFPXMT_OFB_ICMPV6_TYPE 29
1204 #define OFPXMT_OFB_ICMPV6_CODE 30
1205 #define OFPXMT_OFB_IPV6_ND_TARGET 31
1206 #define OFPXMT_OFB_IPV6_ND_SLL 32
1207 #define OFPXMT_OFB_IPV6_ND_TLL 33
1208 #define OFPXMT_OFB_MPLS_LABEL 34
1209 #define OFPXMT_OFB_MPLS_TC 35
1210 #define OFPXMT_OFP_MPLS_BOS 36
1211 #define OFPXMT_OFB_PBB_ISID 37
1212 #define OFPXMT_OFB_TUNNEL_ID 38
1213 #define OFPXMT_OFB_IPV6_EXTHDR 39
1214 #define OFPXMT_OFB_PBB_UCA 41
1215 #define OFPXMT_OFB_TCP_FLAGS 42
1216 #define OFPXMT_OFB_ACTSET_OUTPUT 43
1217 #define OFPXMT_OFB_PACKET_TYPE 44
1218 static const value_string openflow_v6_oxm_basic_field_values
[] = {
1219 { 0, "OFPXMT_OFB_IN_PORT" },
1220 { 1, "OFPXMT_OFB_IN_PHY_PORT" },
1221 { 2, "OFPXMT_OFB_METADATA" },
1222 { 3, "OFPXMT_OFB_ETH_DST" },
1223 { 4, "OFPXMT_OFB_ETH_SRC" },
1224 { 5, "OFPXMT_OFB_ETH_TYPE" },
1225 { 6, "OFPXMT_OFB_VLAN_VID" },
1226 { 7, "OFPXMT_OFB_VLAN_PCP" },
1227 { 8, "OFPXMT_OFB_IP_DSCP" },
1228 { 9, "OFPXMT_OFB_IP_ECN" },
1229 { 10, "OFPXMT_OFB_IP_PROTO" },
1230 { 11, "OFPXMT_OFB_IPV4_SRC" },
1231 { 12, "OFPXMT_OFB_IPV4_DST" },
1232 { 13, "OFPXMT_OFB_TCP_SRC" },
1233 { 14, "OFPXMT_OFB_TCP_DST" },
1234 { 15, "OFPXMT_OFB_UDP_SRC" },
1235 { 16, "OFPXMT_OFB_UDP_DST" },
1236 { 17, "OFPXMT_OFB_SCTP_SRC" },
1237 { 18, "OFPXMT_OFB_SCTP_DST" },
1238 { 19, "OFPXMT_OFB_ICMPV4_TYPE" },
1239 { 20, "OFPXMT_OFB_ICMPV4_CODE" },
1240 { 21, "OFPXMT_OFB_ARP_OP" },
1241 { 22, "OFPXMT_OFB_ARP_SPA" },
1242 { 23, "OFPXMT_OFB_ARP_TPA" },
1243 { 24, "OFPXMT_OFB_ARP_SHA" },
1244 { 25, "OFPXMT_OFB_ARP_THA" },
1245 { 26, "OFPXMT_OFB_IPV6_SRC" },
1246 { 27, "OFPXMT_OFB_IPV6_DST" },
1247 { 28, "OFPXMT_OFB_IPV6_FLABEL" },
1248 { 29, "OFPXMT_OFB_ICMPV6_TYPE" },
1249 { 30, "OFPXMT_OFB_ICMPV6_CODE" },
1250 { 31, "OFPXMT_OFB_IPV6_ND_TARGET" },
1251 { 32, "OFPXMT_OFB_IPV6_ND_SLL" },
1252 { 33, "OFPXMT_OFB_IPV6_ND_TLL" },
1253 { 34, "OFPXMT_OFB_MPLS_LABEL" },
1254 { 35, "OFPXMT_OFB_MPLS_TC" },
1255 { 36, "OFPXMT_OFP_MPLS_BOS" },
1256 { 37, "OFPXMT_OFB_PBB_ISID" },
1257 { 38, "OFPXMT_OFB_TUNNEL_ID" },
1258 { 39, "OFPXMT_OFB_IPV6_EXTHDR" },
1259 { 40, "UNASSIGNED" }, /* include to allow direct lookup */
1260 { 41, "OFPXMT_OFB_PBB_UCA" },
1261 { 42, "OFPXMT_OFB_TCP_FLAGS" },
1262 { 43, "OFPXMT_OFB_ACTSET_OUTPUT" },
1263 { 44, "OFPXMT_OFB_PACKET_TYPE" },
1266 static value_string_ext openflow_v6_oxm_basic_field_values_ext
= VALUE_STRING_EXT_INIT(openflow_v6_oxm_basic_field_values
);
1268 #define OFPHTN_ONF 0
1269 #define OFPHTN_ETHERTYPE 1
1270 #define OFPHTN_IP_PROTO 2
1271 #define OFPHTN_UDP_TCP_PORT 3
1272 #define OFPHTN_IPV4_OPTION 4
1273 static const value_string openflow_v6_header_type_namespace_values
[] = {
1274 { OFPHTN_ONF
, "OFPHTN_ONF" },
1275 { OFPHTN_ETHERTYPE
, "OFPHTN_ETHERTYPE" },
1276 { OFPHTN_IP_PROTO
, "OFPHTN_IP_PROTO" },
1277 { OFPHTN_UDP_TCP_PORT
, "OFPHTN_UDP_TCP_PORT" },
1278 { OFPHTN_IPV4_OPTION
, "OFPHTN_IPV4_OPTION" },
1282 #define OXM_FIELD_MASK 0xfe
1283 #define OXM_HM_MASK 0x01
1285 typedef struct oxm_header
{
1289 uint32_t oxm_length
;
1292 dissect_openflow_oxm_header_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
, oxm_header
*retval
)
1297 uint32_t oxm_length
;
1300 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxm_class
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &oxm_class
);
1304 switch (oxm_class
) {
1305 case OFPXMC_OPENFLOW_BASIC
:
1306 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxm_field_basic
, tvb
, (offset
* 8), 7, ENC_NA
, &oxm_field
);
1308 case OFPXMC_PACKET_REGS
:
1309 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxm_register
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &oxm_field
);
1312 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxm_field
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &oxm_field
);
1317 proto_tree_add_item_ret_boolean(tree
, hf_openflow_v6_oxm_hm
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &oxm_hm
);
1321 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_oxm_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &oxm_length
);
1325 retval
->oxm_class
= oxm_class
;
1326 retval
->oxm_hm
= oxm_hm
;
1327 retval
->oxm_field
= oxm_field
;
1328 retval
->oxm_length
= oxm_length
;
1335 #define OFPVID_PRESENT 0x1000
1337 dissect_openflow_oxm_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1339 proto_tree
*oxm_tree
;
1342 uint8_t field_length
;
1343 uint32_t packet_type_namespace
;
1346 header
.oxm_length
= tvb_get_uint8(tvb
, offset
+ 3);
1348 oxm_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, header
.oxm_length
+ 4, ett_openflow_v6_oxm
, NULL
, "OXM field");
1350 offset
= dissect_openflow_oxm_header_v6(tvb
, pinfo
, oxm_tree
, offset
, length
, &header
);
1352 oxm_end
= offset
+ 4 + header
.oxm_length
;
1353 field_length
= (header
.oxm_hm
== 0) ? header
.oxm_length
: (header
.oxm_length
/ 2);
1355 if (header
.oxm_class
== OFPXMC_OPENFLOW_BASIC
) {
1356 switch(header
.oxm_field
) {
1357 case OFPXMT_OFB_IN_PORT
:
1358 case OFPXMT_OFB_IN_PHY_PORT
:
1359 case OFPXMT_OFB_ACTSET_OUTPUT
:
1360 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_uint32
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1364 case OFPXMT_OFB_ETH_DST
:
1365 case OFPXMT_OFB_ETH_SRC
:
1366 case OFPXMT_OFB_ARP_SHA
:
1367 case OFPXMT_OFB_ARP_THA
:
1368 case OFPXMT_OFB_IPV6_ND_SLL
: /*The source link-layer address option in an IPv6 Neighbor Discovery message */
1369 case OFPXMT_OFB_IPV6_ND_TLL
: /*The target link-layer address option in an IPv6 Neighbor Discovery message */
1370 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_etheraddr
, tvb
, offset
, 6, ENC_NA
);
1372 if (header
.oxm_hm
) {
1373 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_mask_etheraddr
, tvb
, offset
, 6, ENC_NA
);
1378 case OFPXMT_OFB_ETH_TYPE
:
1379 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1383 case OFPXMT_OFB_VLAN_VID
:
1384 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_vlan_present
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1385 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_vlan_vid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1387 if (header
.oxm_hm
) {
1388 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_mask_vlan
, tvb
, offset
, 2, ENC_NA
);
1393 case OFPXMT_OFB_IP_PROTO
:
1394 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_ipproto
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1398 case OFPXMT_OFB_IPV4_SRC
:
1399 case OFPXMT_OFB_IPV4_DST
:
1400 case OFPXMT_OFB_ARP_SPA
:
1401 case OFPXMT_OFB_ARP_TPA
:
1402 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_ipv4addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1404 if (header
.oxm_hm
) {
1405 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_mask_ipv4addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1410 case OFPXMT_OFB_TCP_SRC
:
1411 case OFPXMT_OFB_TCP_DST
:
1412 case OFPXMT_OFB_UDP_SRC
:
1413 case OFPXMT_OFB_UDP_DST
:
1414 case OFPXMT_OFB_SCTP_SRC
:
1415 case OFPXMT_OFB_SCTP_DST
:
1416 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_uint16
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1420 case OFPXMT_OFB_IPV6_SRC
:
1421 case OFPXMT_OFB_IPV6_DST
:
1422 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_ipv6addr
, tvb
, offset
, 16, ENC_NA
);
1424 if (header
.oxm_hm
) {
1425 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_mask_ipv6addr
, tvb
, offset
, 16, ENC_NA
);
1430 case OFPXMT_OFB_MPLS_LABEL
:
1431 /* size differs in specification and header file */
1432 if (field_length
== 3) {
1433 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_uint24
, tvb
, offset
, 3, ENC_BIG_ENDIAN
);
1435 } else if (field_length
== 4) {
1436 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_uint32
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1441 case OFPXMT_OFB_PACKET_TYPE
:
1442 ti
= proto_tree_add_item_ret_uint(oxm_tree
, hf_openflow_v6_oxm_value_uint16
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &packet_type_namespace
);
1443 proto_item_append_text(ti
, " (%s)", val_to_str_const(packet_type_namespace
, openflow_v6_header_type_namespace_values
, "Unknown"));
1446 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value_uint16
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1452 if (field_length
> 0) {
1453 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value
, tvb
, offset
, field_length
, ENC_NA
);
1454 offset
+= field_length
;
1458 if (field_length
> 0 && header
.oxm_hm
!= 0) {
1459 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_mask
, tvb
, offset
, field_length
, ENC_NA
);
1460 offset
+= field_length
;
1465 if(oxm_end
> offset
){
1466 proto_tree_add_expert_format(oxm_tree
, pinfo
, &ei_openflow_v6_oxm_undecoded
,
1467 tvb
, offset
, oxm_end
-offset
, "Undecoded Data");
1471 } else if (header
.oxm_class
== OFPXMC_PACKET_REGS
) {
1472 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_value
, tvb
, offset
, 8, ENC_NA
);
1474 if (header
.oxm_hm
) {
1475 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_mask
, tvb
, offset
, 8, ENC_NA
);
1478 } else if (header
.oxm_class
== OFPXMC_EXPERIMENTER
) {
1479 /* uint32_t experimenter; */
1480 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1482 proto_tree_add_item(oxm_tree
, hf_openflow_v6_oxm_experimenter_value
, tvb
, offset
, header
.oxm_length
- 4, ENC_NA
);
1483 offset
+=(header
.oxm_length
- 4);
1485 proto_tree_add_expert_format(oxm_tree
, pinfo
, &ei_openflow_v6_oxm_undecoded
,
1486 tvb
, offset
, header
.oxm_length
, "Unknown OXM body.");
1487 offset
+=header
.oxm_length
;
1493 #define OFPMT_STANDARD 0 /* Standard Match. Deprecated. */
1494 #define OFPMT_OXM 1 /* OpenFlow Extensible Match */
1495 static const value_string openflow_v6_match_type_values
[] = {
1496 { 0, "OFPMT_STANDARD" },
1502 dissect_openflow_match_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1505 proto_tree
*match_tree
;
1506 uint32_t match_type
;
1507 uint16_t match_length
;
1509 uint16_t pad_length
;
1511 match_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_match
, &ti
, "Match");
1513 /* uint16_t type; */
1514 proto_tree_add_item_ret_uint(match_tree
, hf_openflow_v6_match_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &match_type
);
1517 /* uint16_t length; (excluding padding) */
1518 match_length
= tvb_get_ntohs(tvb
, offset
);
1519 pad_length
= (match_length
+ 7)/8*8 - match_length
;
1520 proto_item_set_len(ti
, match_length
+ pad_length
);
1521 ti
= proto_tree_add_item(match_tree
, hf_openflow_v6_match_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1524 if (match_length
< 4) {
1525 expert_add_info(pinfo
, ti
, &ei_openflow_v6_length_too_short
);
1530 switch (match_type
) {
1531 case OFPMT_STANDARD
:
1532 proto_tree_add_expert_format(match_tree
, pinfo
, &ei_openflow_v6_match_undecoded
,
1533 tvb
, offset
, match_length
- 4, "Standard match body (deprecated).");
1534 offset
+=match_length
-4;
1538 fields_end
= offset
+ match_length
- 4;
1539 while(offset
< fields_end
) {
1540 offset
= dissect_openflow_oxm_v6(tvb
, pinfo
, match_tree
, offset
, length
);
1545 proto_tree_add_expert_format(match_tree
, pinfo
, &ei_openflow_v6_match_undecoded
,
1546 tvb
, offset
, match_length
- 4, "Unknown match body.");
1547 offset
+=match_length
-4;
1551 /* pad; Exactly ((length + 7)/8*8 - length) (between 0 and 7) bytes of all-zero bytes. */
1552 if (pad_length
> 0) {
1553 proto_tree_add_item(match_tree
, hf_openflow_v6_match_pad
, tvb
, offset
, pad_length
, ENC_NA
);
1560 #define OFPM_MAX 0xffffff00 /* Last usable meter number. */
1561 static const value_string openflow_v6_meter_id_reserved_values
[] = {
1562 { 0xfffffffd, "OFPM_SLOWPATH" },
1563 { 0xfffffffe, "OFPM_CONTROLLER" },
1564 { 0xffffffff, "OFPM_ALL" },
1568 #define OFPMBT_DROP 1
1569 #define OFPMBT_DSCP_REMARK 2
1570 #define OFPMBT_EXPERIMENTER 0xFFFF
1571 static const value_string openflow_v6_meter_band_type_values
[] = {
1572 { OFPMBT_DROP
, "OFPMBT_DROP" },
1573 { OFPMBT_DSCP_REMARK
, "OFPMBT_DSCP_REMARK" },
1574 { OFPMBT_EXPERIMENTER
, "OFPMBT_EXPERIMENTER" },
1578 #define OFPMF_KBPS 1 << 0
1579 #define OFPMF_PKTPS 1 << 1
1580 #define OFPMF_BURST 1 << 2
1581 #define OFPMF_STATS 1 << 3
1584 dissect_openflow_meter_band_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1587 proto_tree
*band_tree
;
1591 band_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_meter_band
, &ti
, "Meter band");
1593 /* uint16_t type; */
1594 proto_tree_add_item_ret_uint(band_tree
, hf_openflow_v6_meter_band_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &band_type
);
1598 band_len
= tvb_get_ntohs(tvb
, offset
);
1599 proto_item_set_len(ti
, band_len
);
1600 ti
= proto_tree_add_item(band_tree
, hf_openflow_v6_meter_band_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1603 /* uint32_t rate; */
1604 proto_tree_add_item(band_tree
, hf_openflow_v6_meter_band_rate
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1607 /* uint32_t burst_size; */
1608 proto_tree_add_item(band_tree
, hf_openflow_v6_meter_band_burst_size
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1611 if (band_len
< 12) {
1612 expert_add_info(pinfo
, ti
, &ei_openflow_v6_length_too_short
);
1616 switch (band_type
) {
1618 /* uint8_t pad[4]; */
1619 proto_tree_add_item(band_tree
, hf_openflow_v6_meter_band_drop_pad
, tvb
, offset
, 4, ENC_NA
);
1623 case OFPMBT_DSCP_REMARK
:
1624 /* uint8_t prec_level; */
1625 proto_tree_add_item(band_tree
, hf_openflow_v6_meter_band_dscp_remark_prec_level
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1628 /* uint8_t pad[3]; */
1629 proto_tree_add_item(band_tree
, hf_openflow_v6_meter_band_dscp_remark_pad
, tvb
, offset
, 3, ENC_NA
);
1633 case OFPMBT_EXPERIMENTER
:
1634 /* uint32_t experimenter; */
1635 proto_tree_add_item(band_tree
, hf_openflow_v6_meter_band_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1638 /* uint32_t experimenter_data[0]; */
1639 proto_tree_add_expert_format(band_tree
, pinfo
, &ei_openflow_v6_meter_band_undecoded
,
1640 tvb
, offset
, offset
- 16 + band_len
, "Experimenter meter band body.");
1641 offset
+=band_len
-16;
1645 proto_tree_add_expert_format(band_tree
, pinfo
, &ei_openflow_v6_meter_band_undecoded
,
1646 tvb
, offset
, offset
- 12 + band_len
, "Unknown meter band body.");
1647 offset
+=band_len
-12;
1655 #define OFPHET_VERSIONBITMAP 1
1656 static const value_string openflow_v6_hello_element_type_values
[] = {
1657 { 1, "OFPHET_VERSIONBITMAP" },
1662 dissect_openflow_hello_element_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1664 proto_tree
*elem_tree
;
1666 uint16_t elem_length
;
1667 uint16_t pad_length
;
1669 elem_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v6_hello_element
, NULL
, "Element");
1671 /* uint16_t type; */
1672 proto_tree_add_item_ret_uint(elem_tree
, hf_openflow_v6_hello_element_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &elem_type
);
1675 /* uint16_t length; */
1676 elem_length
= tvb_get_ntohs(tvb
, offset
);
1677 pad_length
= (elem_length
+ 7)/8*8 - elem_length
;
1678 proto_tree_add_item(elem_tree
, hf_openflow_v6_hello_element_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1681 if (elem_length
>= 4) {
1683 /* Otherwise expert info? */
1686 switch (elem_type
) {
1687 case OFPHET_VERSIONBITMAP
:
1689 proto_tree_add_item(elem_tree
, hf_openflow_v6_hello_element_version_bitmap
, tvb
, offset
, elem_length
, ENC_NA
);
1690 offset
+= elem_length
;
1694 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_hello_element_undecoded
,
1695 tvb
, offset
, elem_length
, "Unknown hello element body.");
1696 offset
+= elem_length
;
1700 if (pad_length
> 0) {
1701 proto_tree_add_item(tree
, hf_openflow_v6_hello_element_pad
, tvb
, offset
, pad_length
, ENC_NA
);
1709 dissect_openflow_hello_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1712 while (offset
< length
) {
1713 offset
= dissect_openflow_hello_element_v6(tvb
, pinfo
, tree
, offset
, length
);
1718 #define OFPET_HELLO_FAILED 0
1719 #define OFPET_BAD_REQUEST 1
1720 #define OFPET_BAD_ACTION 2
1721 #define OFPET_BAD_INSTRUCTION 3
1722 #define OFPET_BAD_MATCH 4
1723 #define OFPET_FLOW_MOD_FAILED 5
1724 #define OFPET_GROUP_MOD_FAILED 6
1725 #define OFPET_PORT_MOD_FAILED 7
1726 #define OFPET_TABLE_MOD_FAILED 8
1727 #define OFPET_QUEUE_OP_FAILED 9
1728 #define OFPET_SWITCH_CONFIG_FAILED 10
1729 #define OFPET_ROLE_REQUEST_FAILED 11
1730 #define OFPET_METER_MOD_FAILED 12
1731 #define OFPET_TABLE_FEATURES_FAILED 13
1732 #define OFPET_BAD_PROPERTY 14
1733 #define OFPET_ASYNC_CONFIG_FAILED 15
1734 #define OFPET_FLOW_MONITOR_FAILED 16
1735 #define OFPET_BUNDLE_FAILED 17
1736 #define OFPET_EXPERIMENTER 0xffff
1737 static const value_string openflow_v6_error_type_values
[] = {
1738 { 0, "OFPET_HELLO_FAILED" },
1739 { 1, "OFPET_BAD_REQUEST" },
1740 { 2, "OFPET_BAD_ACTION" },
1741 { 3, "OFPET_BAD_INSTRUCTION" },
1742 { 4, "OFPET_BAD_MATCH" },
1743 { 5, "OFPET_FLOW_MOD_FAILED" },
1744 { 6, "OFPET_GROUP_MOD_FAILED" },
1745 { 7, "OFPET_PORT_MOD_FAILED" },
1746 { 8, "OFPET_TABLE_MOD_FAILED" },
1747 { 9, "OFPET_QUEUE_OP_FAILED" },
1748 { 10, "OFPET_SWITCH_CONFIG_FAILED" },
1749 { 11, "OFPET_ROLE_REQUEST_FAILED" },
1750 { 12, "OFPET_METER_MOD_FAILED" },
1751 { 13, "OFPET_TABLE_FEATURES_FAILED" },
1752 { 14, "OFPET_BAD_PROPERTY" },
1753 { 15, "OFPET_ASYNC_CONFIG_FAILED" },
1754 { 16, "OFPET_FLOW_MONITOR_FAILED" },
1755 { 17, "OFPET_BUNDLE_FAILED" },
1756 { 0xffff, "OFPET_EXPERIMENTER" },
1760 static const value_string openflow_v6_error_hello_failed_code_values
[] = {
1761 { 0, "OFPHFC_INCOMPATIBLE" },
1762 { 1, "OFPHFC_EPERM" },
1766 static const value_string openflow_v6_error_bad_request_code_values
[] = {
1767 { 0, "OFPBRC_BAD_VERSION" },
1768 { 1, "OFPBRC_BAD_TYPE" },
1769 { 2, "OFPBRC_BAD_MULTIPART" },
1770 { 3, "OFPBRC_BAD_EXPERIMENTER" },
1771 { 4, "OFPBRC_BAD_EXP_TYPE" },
1772 { 5, "OFPBRC_EPERM" },
1773 { 6, "OFPBRC_BAD_LEN" },
1774 { 7, "OFPBRC_BUFFER_EMPTY" },
1775 { 8, "OFPBRC_BUFFER_UNKNOWN" },
1776 { 9, "OFPBRC_BAD_TABLE_ID" },
1777 { 10, "OFPBRC_IS_SLAVE" },
1778 { 11, "OFPBRC_BAD_PORT" },
1779 { 12, "OFPBRC_BAD_PACKET" },
1780 { 13, "OFPBRC_MULTIPART_BUFFER_OVERFLOW" },
1781 { 14, "OFPBRC_MULTIPART_REQUEST_TIMEOUT" },
1782 { 15, "OFPBRC_MULTIPART_REPLY_TIMEOUT" },
1786 static const value_string openflow_v6_error_bad_action_code_values
[] = {
1787 { 0, "OFPBAC_BAD_TYPE" },
1788 { 1, "OFPBAC_BAD_LEN" },
1789 { 2, "OFPBAC_BAD_EXPERIMENTER" },
1790 { 3, "OFPBAC_BAD_EXP_TYPE" },
1791 { 4, "OFPBAC_BAD_OUT_PORT" },
1792 { 5, "OFPBAC_BAD_ARGUMENT" },
1793 { 6, "OFPBAC_EPERM" },
1794 { 7, "OFPBAC_TOO_MANY" },
1795 { 8, "OFPBAC_BAD_QUEUE" },
1796 { 9, "OFPBAC_BAD_OUT_GROUP" },
1797 { 10, "OFPBAC_MATCH_INCONSISTENT" },
1798 { 11, "OFPBAC_UNSUPPORTED_ORDER" },
1799 { 12, "OFPBAC_BAD_TAG" },
1800 { 13, "OFPBAC_BAD_SET_TYPE" },
1801 { 14, "OFPBAC_BAD_SET_LEN" },
1802 { 15, "OFPBAC_BAD_SET_ARGUMENT" },
1803 { 16, "OFPBAC_BAD_SET_MASK" },
1804 { 17, "OFPBAC_BAD_SET_METER" },
1808 static const value_string openflow_v6_error_bad_instruction_code_values
[] = {
1809 { 0, "OFPBIC_UNKNOWN_INST" },
1810 { 1, "OFPBIC_UNSUP_INST" },
1811 { 2, "OFPBIC_BAD_TABLE_ID" },
1812 { 3, "OFPBIC_UNSUP_METADATA" },
1813 { 4, "OFPBIC_UNSUP_METADATA_MASK" },
1814 { 5, "OFPBIC_BAD_EXPERIMENTER" },
1815 { 6, "OFPBIC_BAD_EXP_TYPE" },
1816 { 7, "OFPBIC_BAD_LEN" },
1817 { 8, "OFPBIC_EPERM" },
1818 { 9, "OFPBIC_DUP_INST" },
1822 static const value_string openflow_v6_error_bad_match_code_values
[] = {
1823 { 0, "OFPBMC_BAD_TYPE" },
1824 { 1, "OFPBMC_BAD_LEN" },
1825 { 2, "OFPBMC_BAD_TAG" },
1826 { 3, "OFPBMC_BAD_DL_ADDR_MASK" },
1827 { 4, "OFPBMC_BAD_NW_ADDR_MASK" },
1828 { 5, "OFPBMC_BAD_WILDCARDS" },
1829 { 6, "OFPBMC_BAD_FIELD" },
1830 { 7, "OFPBMC_BAD_VALUE" },
1831 { 8, "OFPBMC_BAD_MASK" },
1832 { 9, "OFPBMC_BAD_PREREQ" },
1833 { 10, "OFPBMC_DUP_FIELD" },
1834 { 11, "OFPBMC_EPERM" },
1838 static const value_string openflow_v6_error_flow_mod_failed_code_values
[] = {
1839 { 0, "OFPFMFC_UNKNOWN" },
1840 { 1, "OFPFMFC_TABLE_FULL" },
1841 { 2, "OFPFMFC_BAD_TABLE_ID" },
1842 { 3, "OFPFMFC_OVERLAP" },
1843 { 4, "OFPFMFC_EPERM" },
1844 { 5, "OFPFMFC_BAD_TIMEOUT" },
1845 { 6, "OFPFMFC_BAD_COMMAND" },
1846 { 7, "OFPFMFC_BAD_FLAGS" },
1847 { 8, "OFPFMFC_CANT_SYNC" },
1848 { 9, "OFPFMFC_BAD_PRIORITY" },
1852 static const value_string openflow_v6_error_group_mod_failed_code_values
[] = {
1853 { 0, "OFPGMFC_GROUP_EXISTS" },
1854 { 1, "OFPGMFC_INVALID_GROUP" },
1855 { 2, "OFPGMFC_WEIGHT_UNSUPPORTED" },
1856 { 3, "OFPGMFC_OUT_OF_GROUPS" },
1857 { 4, "OFPGMFC_OUT_OF_BUCKETS" },
1858 { 5, "OFPGMFC_CHAINING_UNSUPPORTED" },
1859 { 6, "OFPGMFC_WATCH_UNSUPPORTED" },
1860 { 7, "OFPGMFC_LOOP" },
1861 { 8, "OFPGMFC_UNKNOWN_GROUP" },
1862 { 9, "OFPGMFC_CHAINED_GROUP" },
1863 { 10, "OFPGMFC_BAD_TYPE" },
1864 { 11, "OFPGMFC_BAD_COMMAND" },
1865 { 12, "OFPGMFC_BAD_BUCKET" },
1866 { 13, "OFPGMFC_BAD_WATCH" },
1867 { 14, "OFPGMFC_EPERM" },
1871 static const value_string openflow_v6_error_port_mod_failed_code_values
[] = {
1872 { 0, "OFPPMFC_BAD_PORT" },
1873 { 1, "OFPPMFC_BAD_HW_ADDR" },
1874 { 2, "OFPPMFC_BAD_CONFIG" },
1875 { 3, "OFPPMFC_BAD_ADVERTISE" },
1876 { 4, "OFPPMFC_EPERM" },
1880 static const value_string openflow_v6_error_table_mod_failed_code_values
[] = {
1881 { 0, "OFPTMFC_BAD_TABLE" },
1882 { 1, "OFPTMFC_BAD_CONFIG" },
1883 { 2, "OFPTMFC_EPERM" },
1887 static const value_string openflow_v6_error_queue_op_failed_code_values
[] = {
1888 { 0, "OFPQOFC_BAD_PORT" },
1889 { 1, "OFPQOFC_BAD_QUEUE" },
1890 { 2, "OFPQOFC_EPERM" },
1894 static const value_string openflow_v6_error_switch_config_failed_code_values
[] = {
1895 { 0, "OFPSCFC_BAD_FLAGS" },
1896 { 1, "OFPSCFC_BAD_LEN" },
1897 { 2, "OFPQCFC_EPERM" },
1901 static const value_string openflow_v6_error_role_request_failed_code_values
[] = {
1902 { 0, "OFPRRFC_STALE" },
1903 { 1, "OFPRRFC_UNSUP" },
1904 { 2, "OFPRRFC_BAD_ROLE" },
1908 static const value_string openflow_v6_error_meter_mod_failed_code_values
[] = {
1909 { 0, "OFPMMFC_UNKNOWN" },
1910 { 1, "OFPMMFC_METER_EXISTS" },
1911 { 2, "OFPMMFC_INVALID_METER" },
1912 { 3, "OFPMMFC_UNKNOWN_METER" },
1913 { 4, "OFPMMFC_BAD_COMMAND" },
1914 { 5, "OFPMMFC_BAD_FLAGS" },
1915 { 6, "OFPMMFC_BAD_RATE" },
1916 { 7, "OFPMMFC_BAD_BURST" },
1917 { 8, "OFPMMFC_BAD_BAND" },
1918 { 9, "OFPMMFC_BAD_BAND_VALUE" },
1919 { 10, "OFPMMFC_OUT_OF_METERS" },
1920 { 11, "OFPMMFC_OUT_OF_BANDS" },
1924 static const value_string openflow_v6_error_table_features_failed_code_values
[] = {
1925 { 0, "OFPTFFC_BAD_TABLE" },
1926 { 1, "OFPTFFC_BAD_METADATA" },
1927 { 5, "OFPTFFC_EPERM" },
1931 static const value_string openflow_v6_error_bad_property_code_values
[] = {
1932 { 0, "OFPBPC_BAD_TYPE" },
1933 { 1, "OFPBPC_BAD_LEN" },
1934 { 2, "OFPBPC_BAD_VALUE" },
1935 { 3, "OFPBPC_TOO_MANY" },
1936 { 4, "OFPBPC_DUP_TYPE" },
1937 { 5, "OFPBPC_BAD_EXPERIMENTER" },
1938 { 6, "OFPBPC_BAD_EXP_TYPE" },
1939 { 7, "OFPBPC_BAD_EXP_VALUE" },
1940 { 8, "OFPBPC_EPERM" },
1944 static const value_string openflow_v6_error_async_config_failed_code_values
[] = {
1945 { 0, "OFPACFC_INVALID" },
1946 { 1, "OFPACFC_UNSUPPORTED" },
1947 { 2, "OFPACFC_EPERM" },
1951 static const value_string openflow_v6_error_flow_monitor_failed_code_values
[] = {
1952 { 0, "OFPMOFC_UNKNOWN" },
1953 { 1, "OFPMOFC_MONITOR_EXISTS" },
1954 { 2, "OFPMOFC_INVALID_MONITOR" },
1955 { 3, "OFPMOFC_UNKNOWN_MONITOR" },
1956 { 4, "OFPMOFC_BAD_COMMAND" },
1957 { 5, "OFPMOFC_BAD_FLAGS" },
1958 { 6, "OFPMOFC_BAD_TABLE_ID" },
1959 { 7, "OFPMOFC_BAD_OUT" },
1963 static const value_string openflow_v6_error_bundle_failed_code_values
[] = {
1964 { 0, "OFPBFC_UNKNOWN" },
1965 { 1, "OFPBFC_EPERM" },
1966 { 2, "OFPBFC_BAD_ID" },
1967 { 3, "OFPBFC_BUNDLE_EXIST" },
1968 { 4, "OFPBFC_BUNDLE_CLOSED" },
1969 { 5, "OFPBFC_OUT_OF_BUNDLES" },
1970 { 6, "OFPBFC_BAD_TYPE" },
1971 { 7, "OFPBFC_BAD_FLAGS" },
1972 { 8, "OFPBFC_MSG_BAD_LEN" },
1973 { 9, "OFPBFC_MSG_BAD_XID" },
1974 { 10, "OFPBFC_MSG_UNSUP" },
1975 { 11, "OFPBFC_MSG_CONFLICT" },
1976 { 12, "OFPBFC_MSG_TOO_MANY" },
1977 { 13, "OFPBFC_MSG_FAILED" },
1978 { 14, "OFPBFC_TIMEOUT" },
1979 { 15, "OFPBFC_BUNDLE_IN_PROGRESS" },
1984 // NOLINTNEXTLINE(misc-no-recursion)
1985 dissect_openflow_error_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1987 proto_tree
*data_tree
;
1988 proto_item
*data_ti
;
1989 uint32_t error_type
;
1991 /* uint16_t type; */
1992 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_error_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &error_type
);
1995 /* uint16_t code; */
1996 switch(error_type
) {
1997 case OFPET_HELLO_FAILED
:
1998 proto_tree_add_item(tree
, hf_openflow_v6_error_hello_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2000 case OFPET_BAD_REQUEST
:
2001 proto_tree_add_item(tree
, hf_openflow_v6_error_bad_request_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2003 case OFPET_BAD_ACTION
:
2004 proto_tree_add_item(tree
, hf_openflow_v6_error_bad_action_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2006 case OFPET_BAD_INSTRUCTION
:
2007 proto_tree_add_item(tree
, hf_openflow_v6_error_bad_instruction_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2009 case OFPET_BAD_MATCH
:
2010 proto_tree_add_item(tree
, hf_openflow_v6_error_bad_match_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2012 case OFPET_FLOW_MOD_FAILED
:
2013 proto_tree_add_item(tree
, hf_openflow_v6_error_flow_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2015 case OFPET_GROUP_MOD_FAILED
:
2016 proto_tree_add_item(tree
, hf_openflow_v6_error_group_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2018 case OFPET_PORT_MOD_FAILED
:
2019 proto_tree_add_item(tree
, hf_openflow_v6_error_port_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2021 case OFPET_TABLE_MOD_FAILED
:
2022 proto_tree_add_item(tree
, hf_openflow_v6_error_table_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2024 case OFPET_QUEUE_OP_FAILED
:
2025 proto_tree_add_item(tree
, hf_openflow_v6_error_queue_op_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2027 case OFPET_SWITCH_CONFIG_FAILED
:
2028 proto_tree_add_item(tree
, hf_openflow_v6_error_switch_config_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2030 case OFPET_ROLE_REQUEST_FAILED
:
2031 proto_tree_add_item(tree
, hf_openflow_v6_error_role_request_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2033 case OFPET_METER_MOD_FAILED
:
2034 proto_tree_add_item(tree
, hf_openflow_v6_error_meter_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2036 case OFPET_TABLE_FEATURES_FAILED
:
2037 proto_tree_add_item(tree
, hf_openflow_v6_error_table_features_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2039 case OFPET_BAD_PROPERTY
:
2040 proto_tree_add_item(tree
, hf_openflow_v6_error_bad_property_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2042 case OFPET_ASYNC_CONFIG_FAILED
:
2043 proto_tree_add_item(tree
, hf_openflow_v6_error_async_config_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2045 case OFPET_FLOW_MONITOR_FAILED
:
2046 proto_tree_add_item(tree
, hf_openflow_v6_error_flow_monitor_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2048 case OFPET_BUNDLE_FAILED
:
2049 proto_tree_add_item(tree
, hf_openflow_v6_error_bundle_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2051 case OFPET_EXPERIMENTER
:
2053 proto_tree_add_item(tree
, hf_openflow_v6_error_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2058 switch(error_type
) {
2059 case OFPET_HELLO_FAILED
:
2060 /* uint8_t data[0]; contains an ASCII text string */
2061 proto_tree_add_item(tree
, hf_openflow_v6_error_data_text
, tvb
, offset
, length
- 12, ENC_NA
|ENC_ASCII
);
2062 /*offset += length - 12;*/
2065 case OFPET_BAD_REQUEST
:
2066 case OFPET_BAD_ACTION
:
2067 case OFPET_BAD_INSTRUCTION
:
2068 case OFPET_BAD_MATCH
:
2069 case OFPET_FLOW_MOD_FAILED
:
2070 case OFPET_GROUP_MOD_FAILED
:
2071 case OFPET_PORT_MOD_FAILED
:
2072 case OFPET_TABLE_MOD_FAILED
:
2073 case OFPET_QUEUE_OP_FAILED
:
2074 case OFPET_SWITCH_CONFIG_FAILED
:
2075 case OFPET_ROLE_REQUEST_FAILED
:
2076 case OFPET_METER_MOD_FAILED
:
2077 case OFPET_TABLE_FEATURES_FAILED
: {
2078 /* uint8_t data[0]; contains at least the first 64 bytes of the failed request. */
2079 bool save_in_error_pkt
;
2081 data_ti
= proto_tree_add_item(tree
, hf_openflow_v6_error_data_body
, tvb
, offset
, length
- 20, ENC_NA
);
2082 data_tree
= proto_item_add_subtree(data_ti
, ett_openflow_v6_error_data
);
2084 /* Save error pkt */
2085 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
2086 pinfo
->flags
.in_error_pkt
= true;
2088 /* Disable update/change of column info */
2089 col_set_writable(pinfo
->cinfo
, -1, false);
2091 dissect_openflow_message_v6(tvb
, pinfo
, data_tree
, offset
);
2093 /* Restore the "we're inside an error packet" flag. */
2094 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
2096 /* Restore the capability of update/change column info */
2097 col_set_writable(pinfo
->cinfo
, -1, true);
2099 /*offset += length - 12;*/
2103 case OFPET_EXPERIMENTER
:
2104 /* uint32_t experimenter */
2105 proto_tree_add_item(tree
, hf_openflow_v6_error_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2107 /* uint8_t data[0]; */
2108 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_error_undecoded
,
2109 tvb
, offset
, length
- 16, "Experimenter error body.");
2110 /*offset += length - 16;*/
2114 /* uint8_t data[0]; */
2115 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_error_undecoded
,
2116 tvb
, offset
, length
- 12, "Unknown error body.");
2117 /*offset += length - 12;*/
2124 dissect_openflow_echo_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2127 if (offset
< length
) {
2128 proto_tree_add_item(tree
, hf_openflow_v6_echo_data
, tvb
, offset
, length
- offset
, ENC_NA
);
2134 dissect_openflow_experimenter_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2136 /* uint32_t experimenter; */
2137 proto_tree_add_item(tree
, hf_openflow_v6_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2140 /* uint32_t exp_type; */
2141 proto_tree_add_item(tree
, hf_openflow_v6_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2145 if (offset
< length
) {
2146 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_experimenter_undecoded
,
2147 tvb
, offset
, length
- 16, "Experimenter body.");
2151 #define OFPC_FLOW_STATS 1<<0 /* Flow statistics. */
2152 #define OFPC_TABLE_STATS 1<<1 /* Table statistics. */
2153 #define OFPC_PORT_STATS 1<<2 /* Port statistics. */
2154 #define OFPC_GROUP_STATS 1<<3 /* Group statistics. */
2155 #define OFPC_IP_REASM 1<<5 /* Can reassemble IP fragments. */
2156 #define OFPC_QUEUE_STATS 1<<6 /* Queue statistics. */
2157 #define OFPC_PORT_BLOCKED 1<<8 /* Switch will block looping ports. */
2158 #define OFPC_BUNDLES 1<<9 /* Switch supports bundles. */
2159 #define OFPC_FLOW_MONITORING 1<<10 /* Switch supports flow monitoring. */
2162 dissect_openflow_switch_features_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2165 proto_tree
*cap_tree
;
2167 /* uint64_t datapath_id; */
2168 proto_tree_add_item(tree
, hf_openflow_v6_switch_features_datapath_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2171 /* uint32_t n_buffers; */
2172 proto_tree_add_item(tree
, hf_openflow_v6_switch_features_n_buffers
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2175 /* uint8_t n_tables; */
2176 proto_tree_add_item(tree
, hf_openflow_v6_switch_features_n_tables
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2179 /* uint8_t auxiliary_id; */
2180 proto_tree_add_item(tree
, hf_openflow_v6_switch_features_auxiliary_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2183 /* uint8_t pad[2]; */
2184 proto_tree_add_item(tree
, hf_openflow_v6_switch_features_pad
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2187 /* uint32_t capabilities; */
2188 ti
= proto_tree_add_item(tree
, hf_openflow_v6_switch_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2189 cap_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_switch_features_capabilities
);
2191 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_flow_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2192 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_table_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2193 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_port_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2194 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_group_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2195 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_ip_reasm
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2196 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_queue_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2197 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_port_blocked
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2198 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_bundles
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2199 proto_tree_add_item(cap_tree
, hf_openflow_v6_switch_features_capabilities_flow_monitoring
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2202 /* uint32_t reserved; */
2203 proto_tree_add_item(tree
, hf_openflow_v6_switch_features_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2207 static const value_string openflow_v6_switch_config_fragments_values
[] = {
2208 { 0, "OFPC_FRAG_NORMAL" },
2209 { 1, "OFPC_FRAG_DROP" },
2210 { 2, "OFPC_FRAG_REASM" },
2214 #define OFPCML_MAX 0xffe5 /* Maximum max_len value. */
2215 static const value_string openflow_v6_controller_max_len_reserved_values
[] = {
2216 { 0xffff, "OFPCML_NO_BUFFER" },
2221 dissect_openflow_switch_config_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2224 proto_tree
*flags_tree
;
2226 /* uint16_t flags; */
2227 ti
= proto_tree_add_item(tree
, hf_openflow_v6_switch_config_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2228 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_switch_config_flags
);
2231 proto_tree_add_bits_item(flags_tree
, hf_openflow_v6_switch_config_flags_fragments
, tvb
, (offset
* 8) + 14, 2, ENC_NA
);
2234 /* uint16_t miss_send_len; */
2235 proto_tree_add_item(tree
, hf_openflow_v6_switch_config_miss_send_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2239 #define OFPR_TABLE_MISS 0
2240 #define OFPR_APPLY_ACTION 1
2241 #define OFPR_INVALID_TTL 2
2242 #define OFPR_ACTION_SET 3
2243 #define OFPR_GROUP 4
2244 #define OFPR_PACKET_OUT 5
2245 static const value_string openflow_v6_packet_in_reason_values
[] = {
2246 { OFPR_TABLE_MISS
, "OFPR_TABLE_MISS" },
2247 { OFPR_APPLY_ACTION
, "OFPR_APPLY_ACTION" },
2248 { OFPR_INVALID_TTL
, "OFPR_INVALID_TTL" },
2249 { OFPR_ACTION_SET
, "OFPR_ACTION_SET" },
2250 { OFPR_GROUP
, "OFPR_GROUP " },
2251 { OFPR_PACKET_OUT
, "OFPR_PACKET_OUT" },
2256 dissect_openflow_packet_in_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2258 proto_tree
*data_tree
;
2261 bool save_in_error_pkt
;
2262 address save_dl_src
, save_dl_dst
, save_net_src
, save_net_dst
, save_src
, save_dst
;
2264 /* uint32_t buffer_id; */
2265 proto_tree_add_item(tree
, hf_openflow_v6_packet_in_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2268 /* uint16_t total_len; */
2269 proto_tree_add_item(tree
, hf_openflow_v6_packet_in_total_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2272 /* uint8_t reason; */
2273 proto_tree_add_item(tree
, hf_openflow_v6_packet_in_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2276 /* uint8_t table_id; */
2277 proto_tree_add_item(tree
, hf_openflow_v6_packet_in_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2280 /* uint64_t cookie; */
2281 proto_tree_add_item(tree
, hf_openflow_v6_packet_in_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2284 /* struct ofp_match match; */
2285 offset
= dissect_openflow_match_v6(tvb
, pinfo
, tree
, offset
, length
);
2287 /* uint8_t pad[2]; */
2288 proto_tree_add_item(tree
, hf_openflow_v6_packet_in_pad
, tvb
, offset
, 2, ENC_NA
);
2291 /* uint8_t data[0]; */
2292 if (offset
< length
) {
2293 data_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v6_packet_in_data
, NULL
, "Data");
2295 /* save some state */
2296 save_writable
= col_get_writable(pinfo
->cinfo
, -1);
2297 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
2298 copy_address_shallow(&save_dl_src
, &pinfo
->dl_src
);
2299 copy_address_shallow(&save_dl_dst
, &pinfo
->dl_dst
);
2300 copy_address_shallow(&save_net_src
, &pinfo
->net_src
);
2301 copy_address_shallow(&save_net_dst
, &pinfo
->net_dst
);
2302 copy_address_shallow(&save_src
, &pinfo
->src
);
2303 copy_address_shallow(&save_dst
, &pinfo
->dst
);
2306 col_set_writable(pinfo
->cinfo
, -1, false);
2307 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
- offset
);
2308 call_dissector(eth_withoutfcs_handle
, next_tvb
, pinfo
, data_tree
);
2310 /* restore saved state */
2311 col_set_writable(pinfo
->cinfo
, -1, save_writable
);
2312 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
2313 copy_address_shallow(&pinfo
->dl_src
, &save_dl_src
);
2314 copy_address_shallow(&pinfo
->dl_dst
, &save_dl_dst
);
2315 copy_address_shallow(&pinfo
->net_src
, &save_net_src
);
2316 copy_address_shallow(&pinfo
->net_dst
, &save_net_dst
);
2317 copy_address_shallow(&pinfo
->src
, &save_src
);
2318 copy_address_shallow(&pinfo
->dst
, &save_dst
);
2323 #define OFPRR_IDLE_TIMEOUT 0
2324 #define OFPRR_HARD_TIMEOUT 1
2325 #define OFPRR_DELETE 2
2326 #define OFPRR_GROUP_DELETE 3
2327 #define OFPRR_METER_DELETE 4
2328 #define OFPRR_EVICTION 5
2329 static const value_string openflow_v6_flow_removed_reason_values
[] = {
2330 { OFPRR_IDLE_TIMEOUT
, "OFPRR_IDLE_TIMEOUT" },
2331 { OFPRR_HARD_TIMEOUT
, "OFPRR_HARD_TIMEOUT" },
2332 { OFPRR_DELETE
, "OFPRR_DELETE" },
2333 { OFPRR_GROUP_DELETE
, "OFPRR_GROUP_DELETE" },
2334 { OFPRR_METER_DELETE
, "OFPRR_METER_DELETE" },
2335 { OFPRR_EVICTION
, "OFPRR_EVICTION" },
2340 dissect_openflow_flow_removed_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2342 /* uint8_t table_id; */
2343 proto_tree_add_item(tree
, hf_openflow_v6_flow_removed_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2346 /* uint8_t reason; */
2347 proto_tree_add_item(tree
, hf_openflow_v6_flow_removed_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2350 /* uint16_t priority; */
2351 proto_tree_add_item(tree
, hf_openflow_v6_flow_removed_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2354 /* uint16_t idle_timeout; */
2355 proto_tree_add_item(tree
, hf_openflow_v6_flow_removed_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2358 /* uint16_t hard_timeout; */
2359 proto_tree_add_item(tree
, hf_openflow_v6_flow_removed_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2362 /* uint64_t cookie; */
2363 proto_tree_add_item(tree
, hf_openflow_v6_flow_removed_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2366 /* struct ofp_match match; */
2367 offset
= dissect_openflow_match_v6(tvb
, pinfo
, tree
, offset
, length
);
2369 /* struct ofp_stats */
2370 dissect_openflow_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
2373 #define OFPAT_OUTPUT 0 /* Output to switch port. */
2374 #define OFPAT_COPY_TTL_OUT 11 /* Copy TTL "outwards" */
2375 #define OFPAT_COPY_TTL_IN 12 /* Copy TTL "inwards" */
2376 #define OFPAT_SET_MPLS_TTL 15 /* MPLS TTL */
2377 #define OFPAT_DEC_MPLS_TTL 16 /* Decrement MPLS TTL */
2378 #define OFPAT_PUSH_VLAN 17 /* Push a new VLAN tag */
2379 #define OFPAT_POP_VLAN 18 /* Pop the outer VLAN tag */
2380 #define OFPAT_PUSH_MPLS 19 /* Push a new MPLS tag */
2381 #define OFPAT_POP_MPLS 20 /* Pop the outer MPLS tag */
2382 #define OFPAT_SET_QUEUE 21 /* Set queue id when outputting to a port */
2383 #define OFPAT_GROUP 22 /* Apply group. */
2384 #define OFPAT_SET_NW_TTL 23 /* IP TTL. */
2385 #define OFPAT_DEC_NW_TTL 24 /* Decrement IP TTL. */
2386 #define OFPAT_SET_FIELD 25 /* Set a header field using OXM TLV format. */
2387 #define OFPAT_PUSH_PBB 26 /* Push a new PBB service tag (I-TAG) */
2388 #define OFPAT_POP_PBB 27 /* Pop the outer PBB service tag (I-TAG) */
2389 #define OFPAT_COPY_FIELD 28 /* Copy value between header and register. */
2390 #define OFPAT_METER 29 /* Apply meter (rate limiter) */
2391 #define OFPAT_EXPERIMENTER 0xffff
2393 static const value_string openflow_v6_action_type_values
[] = {
2394 { 0, "OFPAT_OUTPUT" },
2395 { 11, "OFPAT_COPY_TTL_OUT" },
2396 { 12, "OFPAT_COPY_TTL_IN" },
2397 { 15, "OFPAT_SET_MPLS_TTL" },
2398 { 16, "OFPAT_DEC_MPLS_TTL" },
2399 { 17, "OFPAT_PUSH_VLAN" },
2400 { 18, "OFPAT_POP_VLAN" },
2401 { 19, "OFPAT_PUSH_MPLS" },
2402 { 20, "OFPAT_POP_MPLS" },
2403 { 21, "OFPAT_SET_QUEUE" },
2404 { 22, "OFPAT_GROUP" },
2405 { 23, "OFPAT_SET_NW_TTL" },
2406 { 24, "OFPAT_DEC_NW_TTL" },
2407 { 25, "OFPAT_SET_FIELD" },
2408 { 26, "OFPAT_PUSH_PBB" },
2409 { 27, "OFPAT_POP_PBB" },
2410 { 28, "OFPAT_COPY_FIELD" },
2411 { 29, "OFPAT_METER" },
2412 { 0xffff, "OFPAT_EXPERIMENTER" },
2419 dissect_openflow_action_header_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2423 /* uint16_t type; */
2424 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_action_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &act_type
);
2427 /* uint16_t length; */
2428 proto_tree_add_item(tree
, hf_openflow_v6_action_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2431 if (act_type
== OFPAT_EXPERIMENTER
) {
2432 /* uint32_t experimenter; */
2433 proto_tree_add_item(tree
, hf_openflow_v6_action_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2442 dissect_openflow_action_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2444 proto_tree
*act_tree
;
2446 uint16_t act_length
;
2449 act_type
= tvb_get_ntohs(tvb
, offset
);
2450 act_length
= tvb_get_ntohs(tvb
, offset
+ 2);
2451 act_end
= offset
+ act_length
;
2453 act_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, act_length
, ett_openflow_v6_action
, NULL
, "Action");
2455 offset
= dissect_openflow_action_header_v6(tvb
, pinfo
, act_tree
, offset
, length
);
2459 /* uint32_t port; */
2460 proto_tree_add_item(act_tree
, hf_openflow_v6_action_output_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2463 /* uint16_t max_len; */
2464 proto_tree_add_item(act_tree
, hf_openflow_v6_action_output_max_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2467 /* uint8_t pad[6]; */
2468 proto_tree_add_item(act_tree
, hf_openflow_v6_action_output_pad
, tvb
, offset
, 6, ENC_NA
);
2473 case OFPAT_COPY_TTL_OUT
:
2474 /* uint8_t pad[4]; */
2475 proto_tree_add_item(act_tree
, hf_openflow_v6_action_copy_ttl_out_pad
, tvb
, offset
, 4, ENC_NA
);
2479 case OFPAT_COPY_TTL_IN
:
2480 /* uint8_t pad[4]; */
2481 proto_tree_add_item(act_tree
, hf_openflow_v6_action_copy_ttl_in_pad
, tvb
, offset
, 4, ENC_NA
);
2485 case OFPAT_SET_MPLS_TTL
:
2486 /* uint8_t mpls_ttl; */
2487 proto_tree_add_item(act_tree
, hf_openflow_v6_action_set_mpls_ttl_ttl
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2490 /* uint8_t pad[3]; */
2491 proto_tree_add_item(act_tree
, hf_openflow_v6_action_set_mpls_ttl_pad
, tvb
, offset
, 3, ENC_NA
);
2495 case OFPAT_DEC_MPLS_TTL
:
2496 /* uint8_t pad[4]; */
2497 proto_tree_add_item(act_tree
, hf_openflow_v6_action_dec_mpls_ttl_pad
, tvb
, offset
, 4, ENC_NA
);
2501 case OFPAT_PUSH_VLAN
:
2502 /* uint16_t ethertype; */
2503 proto_tree_add_item(act_tree
, hf_openflow_v6_action_push_vlan_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2506 /* uint8_t pad[2]; */
2507 proto_tree_add_item(act_tree
, hf_openflow_v6_action_push_vlan_pad
, tvb
, offset
, 2, ENC_NA
);
2511 case OFPAT_POP_VLAN
:
2512 /* uint8_t pad[4]; */
2513 proto_tree_add_item(act_tree
, hf_openflow_v6_action_pop_vlan_pad
, tvb
, offset
, 4, ENC_NA
);
2517 case OFPAT_PUSH_MPLS
:
2518 /* uint16_t ethertype; */
2519 proto_tree_add_item(act_tree
, hf_openflow_v6_action_push_mpls_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2522 /* uint8_t pad[2]; */
2523 proto_tree_add_item(act_tree
, hf_openflow_v6_action_push_mpls_pad
, tvb
, offset
, 2, ENC_NA
);
2527 case OFPAT_POP_MPLS
:
2528 /* uint16_t ethertype; */
2529 proto_tree_add_item(act_tree
, hf_openflow_v6_action_pop_mpls_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2532 /* uint8_t pad[2]; */
2533 proto_tree_add_item(act_tree
, hf_openflow_v6_action_pop_mpls_pad
, tvb
, offset
, 2, ENC_NA
);
2537 case OFPAT_SET_QUEUE
:
2538 /* uint32_t queue_id; */
2539 proto_tree_add_item(act_tree
, hf_openflow_v6_action_set_queue_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2544 /* uint32_t group_id; */
2545 proto_tree_add_item(act_tree
, hf_openflow_v6_action_group_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2549 case OFPAT_SET_NW_TTL
:
2550 /* uint8_t nw_ttl; */
2551 proto_tree_add_item(act_tree
, hf_openflow_v6_action_set_nw_ttl_ttl
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2554 /* uint8_t pad[3]; */
2555 proto_tree_add_item(act_tree
, hf_openflow_v6_action_set_nw_ttl_pad
, tvb
, offset
, 3, ENC_NA
);
2559 case OFPAT_DEC_NW_TTL
:
2560 /* uint8_t pad[4]; */
2561 proto_tree_add_item(act_tree
, hf_openflow_v6_action_dec_nw_ttl_pad
, tvb
, offset
, 4, ENC_NA
);
2565 case OFPAT_SET_FIELD
:
2566 offset
= dissect_openflow_oxm_v6(tvb
, pinfo
, act_tree
, offset
, length
);
2568 /* padded to 64 bits */
2569 if (offset
< act_end
) {
2570 proto_tree_add_item(act_tree
, hf_openflow_v6_action_set_field_pad
, tvb
, offset
, act_end
- offset
, ENC_NA
);
2575 case OFPAT_PUSH_PBB
:
2576 /* uint16_t ethertype; */
2577 proto_tree_add_item(act_tree
, hf_openflow_v6_action_push_pbb_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2580 /* uint8_t pad[2]; */
2581 proto_tree_add_item(act_tree
, hf_openflow_v6_action_push_pbb_pad
, tvb
, offset
, 2, ENC_NA
);
2586 /* uint8_t pad[4]; */
2587 proto_tree_add_item(act_tree
, hf_openflow_v6_action_pop_pbb_pad
, tvb
, offset
, 4, ENC_NA
);
2591 case OFPAT_COPY_FIELD
:
2592 /* uint16_t n_bits; */
2593 proto_tree_add_item(act_tree
, hf_openflow_v6_action_copy_field_n_bits
, tvb
, offset
, 2, ENC_NA
);
2595 /* uint16_t src_offset; */
2596 proto_tree_add_item(act_tree
, hf_openflow_v6_action_copy_field_src_offset
, tvb
, offset
, 2, ENC_NA
);
2598 /* uint16_t dst_offset; */
2599 proto_tree_add_item(act_tree
, hf_openflow_v6_action_copy_field_dst_offset
, tvb
, offset
, 2, ENC_NA
);
2601 /* uint8_t pad[2]; */
2602 proto_tree_add_item(act_tree
, hf_openflow_v6_action_copy_field_pad
, tvb
, offset
, 2, ENC_NA
);
2607 /* uint32_t meter_id; */
2608 proto_tree_add_item(act_tree
, hf_openflow_v6_action_meter_id
, tvb
, offset
, 4, ENC_NA
);
2613 case OFPAT_EXPERIMENTER
:
2614 proto_tree_add_expert_format(act_tree
, pinfo
, &ei_openflow_v6_action_undecoded
,
2615 tvb
, offset
, act_length
- 8, "Experimenter action body.");
2616 offset
+= act_length
- 8;
2620 proto_tree_add_expert_format(act_tree
, pinfo
, &ei_openflow_v6_action_undecoded
,
2621 tvb
, offset
, act_length
- 4, "Unknown action body.");
2622 offset
+= act_length
- 4;
2630 #define OFPPF_10MB_HD 1 << 0
2631 #define OFPPF_10MB_FD 1 << 1
2632 #define OFPPF_100MB_HD 1 << 2
2633 #define OFPPF_100MB_FD 1 << 3
2634 #define OFPPF_1GB_HD 1 << 4
2635 #define OFPPF_1GB_FD 1 << 5
2636 #define OFPPF_10GB_FD 1 << 6
2637 #define OFPPF_40GB_FD 1 << 7
2638 #define OFPPF_100GB_FD 1 << 8
2639 #define OFPPF_1TB_FD 1 << 9
2640 #define OFPPF_OTHER 1 << 10
2642 #define OFPPF_COPPER 1 << 11
2643 #define OFPPF_FIBER 1 << 12
2644 #define OFPPF_AUTONEG 1 << 13
2645 #define OFPPF_PAUSE 1 << 14
2646 #define OFPPF_PAUSE_ASYM 1 << 15
2647 #define OFPPF_RESERVED 0xFFFF0000
2650 dissect_openflow_port_desc_prop_ethernet_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2653 proto_tree
*curr_tree
, *adv_tree
, *supp_tree
, *peer_tree
;
2655 /* uint8_t pad[4]; */
2656 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_ethernet_pad
, tvb
, offset
, 2, ENC_NA
);
2659 /* uint32_t curr; */
2660 ti
= proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_ethernet_current
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2661 curr_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_desc_prop_ethernet_current
);
2663 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2664 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2665 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2666 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2667 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2668 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2669 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2670 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2671 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2672 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2673 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2674 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2675 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2676 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2677 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2678 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2679 proto_tree_add_item(curr_tree
, hf_openflow_v6_port_desc_prop_ethernet_current_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2682 /* uint32_t advertised; */
2683 ti
= proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2684 adv_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_desc_prop_ethernet_advertised
);
2686 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2687 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2688 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2689 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2690 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2691 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2692 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2693 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2694 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2695 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2696 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2697 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2698 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2699 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2700 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2701 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2702 proto_tree_add_item(adv_tree
, hf_openflow_v6_port_desc_prop_ethernet_advertised_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2705 /* uint32_t supported; */
2706 ti
= proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_ethernet_supported
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2707 supp_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_desc_prop_ethernet_supported
);
2709 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2710 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2711 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2712 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2713 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2714 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2715 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2716 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2717 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2718 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2719 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2720 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2721 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2722 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2723 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2724 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2725 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_ethernet_supported_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2728 /* uint32_t peer; */
2729 ti
= proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_ethernet_peer
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2730 peer_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_desc_prop_ethernet_peer
);
2732 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2733 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2734 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2735 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2736 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2737 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2738 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2739 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2740 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2741 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2742 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2743 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2744 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2745 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2746 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2747 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2748 proto_tree_add_item(peer_tree
, hf_openflow_v6_port_desc_prop_ethernet_peer_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2751 /* uint32_t curr_speed; */
2752 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_ethernet_curr_speed
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2753 proto_item_append_text(tree
, " Speed: %u Mb", tvb_get_ntohl(tvb
, offset
)/1000);
2756 /* uint32_t max_speed; */
2757 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_ethernet_max_speed
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2764 #define OFPOPF_RX_TUNE 1<<0
2765 #define OFPOPF_TX_TUNE 1<<1
2766 #define OFPOPF_TX_PWR 1<<2
2767 #define OFPOPF_USE_FREQ 1<<3
2769 dissect_openflow_port_desc_prop_optical_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2772 proto_tree
*supp_tree
;
2774 /* uint8_t pad[4]; */
2775 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_pad
, tvb
, offset
, 2, ENC_NA
);
2778 /* uint32_t supported; */
2779 ti
= proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_supported
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2780 supp_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_desc_prop_optical_supported
);
2782 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_optical_supported_rx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2783 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_optical_supported_tx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2784 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_optical_supported_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2785 proto_tree_add_item(supp_tree
, hf_openflow_v6_port_desc_prop_optical_supported_use_freq
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2788 /* uint32_t tx_min_freq_lmda; */
2789 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_tx_min_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2792 /* uint32_t tx_max_freq_lmda; */
2793 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_tx_max_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2796 /* uint32_t tx_grid_freq_lmda; */
2797 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_tx_grid_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2800 /* uint32_t rx_min_freq_lmda; */
2801 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_rx_min_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2804 /* uint32_t rx_max_freq_lmda; */
2805 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_rx_max_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2808 /* uint32_t rx_grid_freq_lmda; */
2809 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_rx_grid_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2812 /* uint16_t tx_pwr_min; */
2813 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_tx_pwr_min
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2816 /* uint16_t tx_pwr_max; */
2817 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_optical_tx_pwr_max
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2825 #define OFPPDPT_ETHERNET 0
2826 #define OFPPDPT_OPTICAL 1
2827 #define OFPPDPT_PIPELINE_INPUT 2
2828 #define OFPPDPT_PIPELINE_OUTPUT 3
2829 #define OFPPDPT_RECIRCULATE 4
2830 #define OFPPDPT_EXPERIMENTER 0xFFFF
2831 static const value_string openflow_v6_port_desc_prop_type_values
[] = {
2832 { OFPPDPT_ETHERNET
, "OFPPDPT_ETHERNET" },
2833 { OFPPDPT_OPTICAL
, "OFPPDPT_OPTICAL" },
2834 { OFPPDPT_PIPELINE_INPUT
, "OFPPDPT_PIPELINE_INPUT" },
2835 { OFPPDPT_PIPELINE_OUTPUT
, "OFPPDPT_PIPELINE_OUTPUT" },
2836 { OFPPDPT_RECIRCULATE
, "OFPPDPT_RECIRCULATE" },
2837 { OFPPDPT_EXPERIMENTER
, "OFPPDPT_EXPERIMENTER" },
2842 dissect_openflow_port_desc_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2844 proto_tree
*prop_tree
;
2845 proto_item
*prop_item
;
2847 uint32_t prop_length
;
2850 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_port_desc_prop
, NULL
, "Port desc. property");
2852 /* uint16_t type; */
2853 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_port_desc_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
2857 prop_item
= proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_port_desc_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_length
);
2860 switch (prop_type
) {
2861 case OFPPDPT_ETHERNET
:
2862 offset
= dissect_openflow_port_desc_prop_ethernet_v6(tvb
, pinfo
, prop_tree
, offset
, length
);
2865 case OFPPDPT_OPTICAL
:
2866 offset
= dissect_openflow_port_desc_prop_optical_v6(tvb
, pinfo
, prop_tree
, offset
, length
);
2869 case OFPPDPT_PIPELINE_INPUT
:
2870 case OFPPDPT_PIPELINE_OUTPUT
:
2871 fields_end
= offset
+ prop_length
- 4;
2872 while(offset
< fields_end
) {
2873 offset
= dissect_openflow_oxm_v6(tvb
, pinfo
, prop_tree
, offset
, length
);
2875 offset
+=WS_ROUNDUP_8(prop_length
) - prop_length
;
2878 case OFPPDPT_RECIRCULATE
:
2879 fields_end
= offset
+ prop_length
- 4;
2880 while(offset
< fields_end
) {
2881 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_recirculate_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2884 offset
+=WS_ROUNDUP_8(prop_length
) - prop_length
;
2887 case OFPPDPT_EXPERIMENTER
:
2888 if (prop_length
<= 12) {
2889 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
2893 /* uint32_t experimenter; */
2894 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2897 /* uint32_t exp_type; */
2898 proto_tree_add_item(tree
, hf_openflow_v6_port_desc_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2901 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_port_desc_prop_undecoded
,
2902 tvb
, offset
, prop_length
- 12, "Experimenter port desc. property.");
2903 offset
+= prop_length
- 12;
2907 if (prop_length
<= 4) {
2908 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
2912 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_port_desc_prop_undecoded
,
2913 tvb
, offset
, prop_length
- 4, "Unknown port desc. property.");
2914 offset
+= prop_length
- 4;
2923 #define OFPPC_PORT_DOWN 1 << 0
2924 #define OFPPC_NO_RECV 1 << 2
2925 #define OFPPC_NO_FWD 1 << 5
2926 #define OFPPC_NO_PACKET_IN 1 << 6
2928 #define OFPPS_LINK_DOWN 1 << 0
2929 #define OFPPS_BLOCKED 1 << 1
2930 #define OFPPS_LIVE 1 << 2
2932 #define OFP_ETH_ALEN 6
2933 #define OFP_MAX_PORT_NAME_LEN 16
2935 dissect_openflow_port_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2938 proto_tree
*port_tree
, *conf_tree
, *state_tree
;
2939 uint32_t port_length
;
2942 port_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 64, ett_openflow_v6_port
, NULL
, "Port");
2944 /* uint32_t port_no; */
2945 proto_tree_add_item(port_tree
, hf_openflow_v6_port_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2948 /* uint16_t length; */
2949 proto_tree_add_item_ret_uint(port_tree
, hf_openflow_v6_port_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &port_length
);
2950 port_end
= port_length
+ offset
- 4;
2953 /* uint8_t pad[2]; */
2954 proto_tree_add_item(port_tree
, hf_openflow_v6_port_pad
, tvb
, offset
, 2, ENC_NA
);
2957 /* uint8_t hw_addr[OFP_ETH_ALEN]; */
2958 proto_tree_add_item(port_tree
, hf_openflow_v6_port_hw_addr
, tvb
, offset
, OFP_ETH_ALEN
, ENC_NA
);
2959 proto_item_append_text(port_tree
, ": %s", tvb_ether_to_str(pinfo
->pool
, tvb
, offset
));
2960 offset
+=OFP_ETH_ALEN
;
2962 /* uint8_t pad2[2]; */
2963 proto_tree_add_item(port_tree
, hf_openflow_v6_port_pad2
, tvb
, offset
, 2, ENC_NA
);
2966 /* char name[OFP_MAX_PORT_NAME_LEN]; Null-terminated */
2967 proto_tree_add_item(port_tree
, hf_openflow_v6_port_name
, tvb
, offset
, OFP_MAX_PORT_NAME_LEN
, ENC_ASCII
);
2969 proto_item_append_text(port_tree
, " (%s)", tvb_get_string_enc(pinfo
->pool
, tvb
, offset
, OFP_ETH_ALEN
, ENC_ASCII
));
2970 offset
+=OFP_MAX_PORT_NAME_LEN
;
2972 /* uint32_t config; */
2973 ti
= proto_tree_add_item(port_tree
, hf_openflow_v6_port_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2974 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_config
);
2976 proto_tree_add_item(conf_tree
, hf_openflow_v6_port_config_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2977 proto_tree_add_item(conf_tree
, hf_openflow_v6_port_config_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2978 proto_tree_add_item(conf_tree
, hf_openflow_v6_port_config_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2979 proto_tree_add_item(conf_tree
, hf_openflow_v6_port_config_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2982 /* uint32_t state; */
2983 ti
= proto_tree_add_item(port_tree
, hf_openflow_v6_port_state
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2984 state_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_state
);
2986 proto_tree_add_item(state_tree
, hf_openflow_v6_port_state_link_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2987 proto_tree_add_item(state_tree
, hf_openflow_v6_port_state_blocked
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2988 proto_tree_add_item(state_tree
, hf_openflow_v6_port_state_live
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2991 /* struct ofp_port_desc_prop_header properties[0]; */
2992 while (offset
< port_end
) {
2993 offset
= dissect_openflow_port_desc_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
3002 #define OFPPR_DELETE 1
3003 #define OFPPR_MODIFY 2
3004 static const value_string openflow_v6_port_status_reason_values
[] = {
3005 { OFPPR_ADD
, "OFPPR_ADD" },
3006 { OFPPR_DELETE
, "OFPPR_DELETE" },
3007 { OFPPR_MODIFY
, "OFPPR_MODIFY" },
3012 dissect_openflow_port_status_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3014 /* uint8_t reason; */
3015 proto_tree_add_item(tree
, hf_openflow_v6_port_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3018 /* uint8_t pad[7]; */
3019 proto_tree_add_item(tree
, hf_openflow_v6_port_status_pad
, tvb
, offset
, 7, ENC_NA
);
3022 /* struct ofp_port desc; */
3023 dissect_openflow_port_v6(tvb
, pinfo
, tree
, offset
, length
);
3028 dissect_openflow_packet_out_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3030 proto_tree
*data_tree
;
3035 bool save_in_error_pkt
;
3036 address save_dl_src
, save_dl_dst
, save_net_src
, save_net_dst
, save_src
, save_dst
;
3038 /* uint32_t buffer_id; */
3039 proto_tree_add_item(tree
, hf_openflow_v6_packet_out_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3042 /* uint16_t actions_len; */
3043 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_packet_out_acts_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &acts_len
);
3046 /* uint8_t pad[2]; */
3047 proto_tree_add_item(tree
, hf_openflow_v6_packet_out_pad
, tvb
, offset
, 2, ENC_NA
);
3050 /* struct ofp_match match; */
3051 offset
= dissect_openflow_match_v6(tvb
, pinfo
, tree
, offset
, length
);
3053 /* struct ofp_action_header actions[0]; */
3054 acts_end
= offset
+ acts_len
;
3056 while (offset
< acts_end
) {
3057 offset
= dissect_openflow_action_v6(tvb
, pinfo
, tree
, offset
, length
);
3060 /* uint8_t data[0]; */
3061 if (offset
< length
) {
3062 data_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v6_packet_out_data
, NULL
, "Data");
3064 /* save some state */
3065 save_writable
= col_get_writable(pinfo
->cinfo
, -1);
3066 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
3067 copy_address_shallow(&save_dl_src
, &pinfo
->dl_src
);
3068 copy_address_shallow(&save_dl_dst
, &pinfo
->dl_dst
);
3069 copy_address_shallow(&save_net_src
, &pinfo
->net_src
);
3070 copy_address_shallow(&save_net_dst
, &pinfo
->net_dst
);
3071 copy_address_shallow(&save_src
, &pinfo
->src
);
3072 copy_address_shallow(&save_dst
, &pinfo
->dst
);
3075 col_set_writable(pinfo
->cinfo
, -1, false);
3076 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
- offset
);
3077 call_dissector(eth_withoutfcs_handle
, next_tvb
, pinfo
, data_tree
);
3079 /* restore saved state */
3080 col_set_writable(pinfo
->cinfo
, -1, save_writable
);
3081 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
3082 copy_address_shallow(&pinfo
->dl_src
, &save_dl_src
);
3083 copy_address_shallow(&pinfo
->dl_dst
, &save_dl_dst
);
3084 copy_address_shallow(&pinfo
->net_src
, &save_net_src
);
3085 copy_address_shallow(&pinfo
->net_dst
, &save_net_dst
);
3086 copy_address_shallow(&pinfo
->src
, &save_src
);
3087 copy_address_shallow(&pinfo
->dst
, &save_dst
);
3092 #define OFPIT_GOTO_TABLE 1 /* Setup the next table in the lookup */
3093 #define OFPIT_WRITE_METADATA 2 /* Setup the metadata field for use later in */
3094 #define OFPIT_WRITE_ACTIONS 3 /* Write the action(s) onto the datapath action */
3095 #define OFPIT_APPLY_ACTIONS 4 /* Applies the action(s) immediately */
3096 #define OFPIT_CLEAR_ACTIONS 5 /* Clears all actions from the datapath */
3097 #define OFPIT_METER 6 /* Apply meter (rate limiter) */
3098 #define OFPIT_STAT_TRIGGER 7 /* Statistics triggers */
3099 #define OFPIT_EXPERIMENTER 0xFFFF /* Experimenter instruction */
3100 static const value_string openflow_v6_instruction_type_values
[] = {
3101 { 0x0001, "OFPIT_GOTO_TABLE" },
3102 { 0x0002, "OFPIT_WRITE_METADATA" },
3103 { 0x0003, "OFPIT_WRITE_ACTIONS" },
3104 { 0x0004, "OFPIT_APPLY_ACTIONS" },
3105 { 0x0005, "OFPIT_CLEAR_ACTIONS" },
3106 { 0x0006, "OFPIT_METER (Deprecated)" },
3107 { 0x0007, "OFPIT_STAT_TRIGGER" },
3108 { 0xffff, "OFPIT_EXPERIMENTER = 0xFFFF" },
3113 typedef struct inst_header
{
3118 dissect_openflow_instruction_header_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
, inst_header
*retval
)
3121 uint32_t inst_length
;
3123 /* uint16_t type; */
3124 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_instruction_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &inst_type
);
3127 /* uint16_t length; */
3128 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_instruction_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &inst_length
);
3131 if (inst_type
== OFPIT_EXPERIMENTER
) {
3132 /* uint32_t experimenter; */
3133 proto_tree_add_item(tree
, hf_openflow_v6_instruction_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3138 retval
->type
= inst_type
;
3139 retval
->length
= inst_length
;
3145 #define OFPSTF_PERIODIC 1 << 0
3146 #define OFPSTF_ONLY_FIRST 1 << 1
3148 dissect_openflow_instruction_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3151 proto_tree
*inst_tree
, *flags_tree
;
3155 inst_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_instruction
, &ti
, "Instruction");
3157 offset
= dissect_openflow_instruction_header_v6(tvb
, pinfo
, inst_tree
, offset
, length
, &header
);
3158 proto_item_set_len(ti
, header
.length
);
3160 if (header
.length
< 8) {
3161 // XXX Shouldn't it be reported with an expert info?
3165 inst_end
= offset
+ header
.length
- 4;
3167 switch (header
.type
) {
3168 case OFPIT_GOTO_TABLE
:
3169 /* uint8_t table_id; */
3170 proto_tree_add_item(inst_tree
, hf_openflow_v6_instruction_goto_table_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3173 /* uint8_t pad[3]; */
3174 proto_tree_add_item(inst_tree
, hf_openflow_v6_instruction_goto_table_pad
, tvb
, offset
, 3, ENC_NA
);
3178 case OFPIT_WRITE_METADATA
:
3179 /* uint8_t pad[4]; */
3180 proto_tree_add_item(inst_tree
, hf_openflow_v6_instruction_write_metadata_pad
, tvb
, offset
, 4, ENC_NA
);
3183 /* uint64_t metadata; */
3184 proto_tree_add_item(inst_tree
, hf_openflow_v6_instruction_write_metadata_value
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3187 /* uint64_t metadata_mask; */
3188 proto_tree_add_item(inst_tree
, hf_openflow_v6_instruction_write_metadata_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3192 case OFPIT_WRITE_ACTIONS
:
3193 case OFPIT_APPLY_ACTIONS
:
3194 case OFPIT_CLEAR_ACTIONS
:
3195 proto_tree_add_item(inst_tree
, hf_openflow_v6_instruction_actions_pad
, tvb
, offset
, 4, ENC_NA
);
3198 while (offset
< inst_end
) {
3199 offset
= dissect_openflow_action_v6(tvb
, pinfo
, inst_tree
, offset
, length
);
3203 case OFPIT_STAT_TRIGGER
:
3204 ti
= proto_tree_add_item(inst_tree
, hf_openflow_v6_instruction_stat_trigger_flags
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3205 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_instruction_stat_trigger_flags
);
3206 proto_tree_add_item(flags_tree
, hf_openflow_v6_instruction_stat_triffer_flags_periodic
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3207 proto_tree_add_item(flags_tree
, hf_openflow_v6_instruction_stat_triffer_flags_only_first
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3208 proto_tree_add_item(flags_tree
, hf_openflow_v6_instruction_stat_triffer_flags_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3211 while (offset
< inst_end
) {
3212 offset
= dissect_openflow_stats_v6(tvb
, pinfo
, inst_tree
, offset
, length
);
3216 case OFPIT_EXPERIMENTER
:
3217 proto_tree_add_expert_format(inst_tree
, pinfo
, &ei_openflow_v6_instruction_undecoded
,
3218 tvb
, offset
, header
.length
- 8, "Experimenter instruction body.");
3219 offset
+= header
.length
- 8;
3223 proto_tree_add_expert_format(inst_tree
, pinfo
, &ei_openflow_v6_instruction_undecoded
,
3224 tvb
, offset
, header
.length
- 4, "Unknown instruction body.");
3225 offset
+= header
.length
- 4;
3233 static const value_string openflow_v6_flowmod_command_values
[] = {
3235 { 1, "OFPFC_MODIFY" },
3236 { 2, "OFPFC_MODIFY_STRICT" },
3237 { 3, "OFPFC_DELETE" },
3238 { 4, "OFPFC_DELETE_STRICT" },
3242 #define OFPFF_SEND_FLOW_REM 1 << 0 /* Send flow removed message when flow expires or is deleted. */
3243 #define OFPFF_CHECK_OVERLAP 1 << 1 /* Check for overlapping entries first. */
3244 #define OFPFF_RESET_COUNTS 1 << 2 /* Reset flow packet and byte counts. */
3245 #define OFPFF_NO_PKT_COUNTS 1 << 3 /* Don't keep track of packet count. */
3246 #define OFPFF_NO_BYT_COUNTS 1 << 4 /* Don't keep track of byte count. */
3249 dissect_openflow_flowmod_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3252 proto_tree
*flags_tree
;
3254 /* uint64_t cookie; */
3255 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3258 /* uint64_t cookie_mask; */
3259 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3262 /* uint8_t table_id; */
3263 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3266 /* uint8_t command; */
3267 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_command
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3270 /* uint16_t idle_timeout; */
3271 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3274 /* uint16_t hard_timeout; */
3275 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3278 /* uint16_t priority; */
3279 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3282 /* uint32_t buffer_id; */
3283 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3286 /* uint32_t out_port; */
3287 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3290 /* uint32_t out_group; */
3291 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3294 /* uint16_t flags; */
3295 ti
= proto_tree_add_item(tree
, hf_openflow_v6_flowmod_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3296 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_flowmod_flags
);
3298 proto_tree_add_item(flags_tree
, hf_openflow_v6_flowmod_flags_send_flow_rem
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3299 proto_tree_add_item(flags_tree
, hf_openflow_v6_flowmod_flags_check_overlap
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3300 proto_tree_add_item(flags_tree
, hf_openflow_v6_flowmod_flags_reset_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3301 proto_tree_add_item(flags_tree
, hf_openflow_v6_flowmod_flags_no_packet_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3302 proto_tree_add_item(flags_tree
, hf_openflow_v6_flowmod_flags_no_byte_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3305 /* uint16_t importance; */
3306 proto_tree_add_item(tree
, hf_openflow_v6_flowmod_importance
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3309 /* struct ofp_match match; */
3310 offset
= dissect_openflow_match_v6(tvb
, pinfo
, tree
, offset
, length
);
3312 /* struct ofp_instruction instructions[0]; */
3313 while (offset
< length
) {
3314 offset
= dissect_openflow_instruction_v6(tvb
, pinfo
, tree
, offset
, length
);
3319 dissect_openflow_bucket_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3322 proto_tree
*bucket_tree
;
3323 uint16_t bucket_length
;
3326 bucket_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_bucket
, &ti
, "Bucket");
3329 bucket_length
= tvb_get_ntohs(tvb
, offset
);
3330 proto_item_set_len(ti
, bucket_length
);
3331 proto_tree_add_item(bucket_tree
, hf_openflow_v6_bucket_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3334 if (bucket_length
< 16) {
3338 /* uint16_t weight; */
3339 proto_tree_add_item(bucket_tree
, hf_openflow_v6_bucket_weight
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3342 /* uint32_t watch_port; */
3343 proto_tree_add_item(bucket_tree
, hf_openflow_v6_bucket_watch_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3346 /* uint32_t watch_group; */
3347 proto_tree_add_item(bucket_tree
, hf_openflow_v6_bucket_watch_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3350 /* uint8_t pad[4]; */
3351 proto_tree_add_item(bucket_tree
, hf_openflow_v6_bucket_pad
, tvb
, offset
, 4, ENC_NA
);
3354 /*struct ofp_action_header actions[0]; */
3355 acts_end
= offset
+ bucket_length
- 16;
3356 while (offset
< acts_end
) {
3357 offset
= dissect_openflow_action_v6(tvb
, pinfo
, bucket_tree
, offset
, length
);
3364 static const value_string openflow_v6_groupmod_command_values
[] = {
3366 { 1, "OFPGC_MODIFY" },
3367 { 2, "OFPGC_DELETE" },
3368 { 3, "OFPGC_INSERT_BUCKET" },
3369 { 5, "OFPGC_DELETE_BUCKET" },
3374 #define OFPGT_SELECT 1
3375 #define OFPGT_INDIRECT 2
3377 static const value_string openflow_v6_group_type_values
[] = {
3378 { OFPGT_ALL
, "OFPGT_ALL" },
3379 { OFPGT_SELECT
, "OFPGT_SELECT" },
3380 { OFPGT_INDIRECT
, "OFPGT_INDIRECT" },
3381 { OFPGT_FF
, "OFPGT_FF" },
3386 dissect_openflow_groupmod_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3388 /* uint16_t command; */
3389 proto_tree_add_item(tree
, hf_openflow_v6_groupmod_command
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3393 proto_tree_add_item(tree
, hf_openflow_v6_groupmod_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3397 proto_tree_add_item(tree
, hf_openflow_v6_groupmod_pad
, tvb
, offset
, 1, ENC_NA
);
3400 /* uint32_t group_id; */
3401 proto_tree_add_item(tree
, hf_openflow_v6_groupmod_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3404 /* uint16_t bucket_array_len; */
3405 proto_tree_add_item(tree
, hf_openflow_v6_groupmod_bucket_array_len
, tvb
, offset
, 2, ENC_NA
);
3408 /* uint8_t pad2[2]; */
3409 proto_tree_add_item(tree
, hf_openflow_v6_groupmod_pad
, tvb
, offset
, 2, ENC_NA
);
3412 /* uint32_t command_bucket_id; */
3413 proto_tree_add_item(tree
, hf_openflow_v6_groupmod_command_bucket_id
, tvb
, offset
, 4, ENC_NA
);
3416 /* struct ofp_bucket buckets[0]; */
3417 while (offset
< length
) {
3418 offset
= dissect_openflow_bucket_v6(tvb
, pinfo
, tree
, offset
, length
);
3425 dissect_openflow_portmod_prop_ethernet_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3428 proto_tree
*adv_tree
;
3430 /* uint32_t advertise; */
3431 ti
= proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_ethernet_advertise
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3432 adv_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_portmod_prop_ethernet_advertise
);
3434 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3435 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3436 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3437 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3438 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3439 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3440 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3441 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3442 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3443 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3444 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3445 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3446 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3447 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3448 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3449 proto_tree_add_item(adv_tree
, hf_openflow_v6_portmod_prop_ethernet_advertise_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3456 dissect_openflow_portmod_prop_optical_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3459 proto_tree
*conf_tree
;
3461 /* uint32_t configure; */
3462 ti
= proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_optical_configure
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3463 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_portmod_prop_optical_configure
);
3465 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_prop_optical_configure_rx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3466 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_prop_optical_configure_tx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3467 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_prop_optical_configure_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3468 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_prop_optical_configure_use_freq
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3471 /* uint32_t freq_lmda; */
3472 proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_optical_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3475 /* int32_t fl_offset; */
3476 proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_optical_fl_offset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3479 /* uint32_t grid_span; */
3480 proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_optical_grid_span
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3483 /* uint32_t tx_pwr; */
3484 proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_optical_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3492 #define OFPPMPT_ETHERNET 0
3493 #define OFPPMPT_OPTICAL 1
3494 #define OFPPMPT_EXPERIMENTER 0xFFFF
3495 static const value_string openflow_v6_portmod_prop_type_values
[] = {
3496 { OFPPMPT_ETHERNET
, "OFPPMPT_ETHERNET" },
3497 { OFPPMPT_OPTICAL
, "OFPPMPT_OPTICAL" },
3498 { OFPPMPT_EXPERIMENTER
, "OFPPMPT_EXPERIMENTER" },
3503 dissect_openflow_portmod_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3505 proto_tree
*prop_tree
;
3506 proto_item
*prop_item
, *ti
;
3508 uint32_t prop_length
;
3510 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_portmod_prop
, &ti
, "Portmod property");
3512 /* uint16_t type; */
3513 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_portmod_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
3517 prop_item
= proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_portmod_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_length
);
3518 proto_item_set_len(ti
, prop_length
);
3521 switch (prop_type
) {
3522 case OFPPMPT_ETHERNET
:
3523 offset
= dissect_openflow_portmod_prop_ethernet_v6(tvb
, pinfo
, prop_tree
, offset
, length
);
3526 case OFPPMPT_OPTICAL
:
3527 offset
= dissect_openflow_portmod_prop_optical_v6(tvb
, pinfo
, prop_tree
, offset
, length
);
3530 case OFPPMPT_EXPERIMENTER
:
3531 if (prop_length
<= 12) {
3532 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
3536 /* uint32_t experimenter; */
3537 proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3540 /* uint32_t exp_type; */
3541 proto_tree_add_item(tree
, hf_openflow_v6_portmod_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3544 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_portmod_prop_undecoded
,
3545 tvb
, offset
, prop_length
- 12, "Experimenter port desc. property.");
3546 offset
+= prop_length
- 12;
3550 if (prop_length
<= 4) {
3551 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
3555 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_portmod_prop_undecoded
,
3556 tvb
, offset
, prop_length
- 4, "Unknown port desc. property.");
3557 offset
+= prop_length
- 4;
3567 dissect_openflow_portmod_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3570 proto_tree
*conf_tree
, *mask_tree
;
3572 /* uint32_t port_no; */
3573 proto_tree_add_item(tree
, hf_openflow_v6_portmod_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3576 /* uint8_t pad[4]; */
3577 proto_tree_add_item(tree
, hf_openflow_v6_portmod_pad
, tvb
, offset
, 4, ENC_NA
);
3580 /* uint8_t hw_addr[OFP_ETH_ALEN]; */
3581 proto_tree_add_item(tree
, hf_openflow_v6_portmod_hw_addr
, tvb
, offset
, OFP_ETH_ALEN
, ENC_NA
);
3582 offset
+=OFP_ETH_ALEN
;
3584 /* uint8_t pad2[2]; */
3585 proto_tree_add_item(tree
, hf_openflow_v6_portmod_pad2
, tvb
, offset
, 2, ENC_NA
);
3588 /* uint32_t config; */
3589 ti
= proto_tree_add_item(tree
, hf_openflow_v6_portmod_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3590 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_portmod_config
);
3592 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_config_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3593 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_config_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3594 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_config_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3595 proto_tree_add_item(conf_tree
, hf_openflow_v6_portmod_config_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3598 /* uint32_t mask; */
3599 ti
= proto_tree_add_item(tree
, hf_openflow_v6_portmod_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3600 mask_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_portmod_mask
);
3602 proto_tree_add_item(mask_tree
, hf_openflow_v6_portmod_mask_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3603 proto_tree_add_item(mask_tree
, hf_openflow_v6_portmod_mask_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3604 proto_tree_add_item(mask_tree
, hf_openflow_v6_portmod_mask_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3605 proto_tree_add_item(mask_tree
, hf_openflow_v6_portmod_mask_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3608 /* struct ofp_port_mod_prop_header properties[0]; */
3609 while (offset
< length
) {
3610 offset
= dissect_openflow_portmod_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
3615 #define OFPTMPT_EVICTION 0x2
3616 #define OFPTMPT_VACANCY 0x3
3617 #define OFPTMPT_EXPERIMENTER 0xFFFF
3618 static const value_string openflow_v6_tablemod_prop_type_values
[] = {
3619 { OFPTMPT_EVICTION
, "OFPTMPT_EVICTION" },
3620 { OFPTMPT_VACANCY
, "OFPTMPT_VACANCY" },
3621 { OFPTMPT_EXPERIMENTER
, "OFPTMPT_EXPERIMENTER" },
3625 #define OFPTMPEF_OTHER 1<<0
3626 #define OFPTMPEF_IMPORTANCE 1<<1
3627 #define OFPTMPEF_LIFETIME 1<<2
3629 dissect_openflow_tablemod_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3631 proto_item
*ti
, *prop_item
;
3632 proto_tree
*prop_tree
, *flags_tree
;
3635 uint32_t prop_length
;
3637 prop_length
= tvb_get_ntohs(tvb
, offset
+ 2);
3639 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_tablemod_prop
, &ti
, "Tablemod property");
3641 /* uint16_t type; */
3642 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_tablemod_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
3646 prop_item
= proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_tablemod_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_length
);
3647 proto_item_set_len(ti
, prop_length
);
3650 switch (prop_type
) {
3651 case OFPTMPT_EVICTION
:
3652 /* uint32_t flags; */
3653 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_tablemod_prop_eviction_flags
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3654 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_tablemod_prop_eviction_flags
);
3656 proto_tree_add_item(flags_tree
, hf_openflow_v6_tablemod_prop_eviction_flags_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3657 proto_tree_add_item(flags_tree
, hf_openflow_v6_tablemod_prop_eviction_flags_importance
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3658 proto_tree_add_item(flags_tree
, hf_openflow_v6_tablemod_prop_eviction_flags_lifetime
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3662 case OFPTMPT_VACANCY
:
3663 /* uint8_t vacancy_down; */
3664 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_prop_vacancy_vacancy_down
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3667 /* uint8_t vacancy_up; */
3668 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_prop_vacancy_vacancy_up
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3671 /* uint8_t vacancy; */
3672 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_prop_vacancy_vacancy
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3675 /* uint8_t pad[1]; */
3676 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_prop_vacancy_pad
, tvb
, offset
, 1, ENC_NA
);
3680 case OFPTMPT_EXPERIMENTER
:
3681 if (prop_length
<= 12) {
3682 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
3686 /* uint32_t experimenter; */
3687 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3690 /* uint32_t exp_type; */
3691 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3694 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_tablemod_prop_undecoded
,
3695 tvb
, offset
, prop_length
- 12, "Experimenter table mod. property.");
3696 offset
+= prop_length
- 12;
3700 if (prop_length
<= 4) {
3701 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
3705 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_tablemod_prop_undecoded
,
3706 tvb
, offset
, prop_length
- 4, "Unknown table mod. property.");
3707 offset
+= prop_length
- 4;
3715 #define OFPTC_EVICTION 1<<2
3716 #define OFPTC_VACANCY_EVENTS 1<<3
3718 dissect_openflow_tablemod_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3721 proto_tree
*conf_tree
;
3724 /* uint8_t table_id; */
3725 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3728 /* uint8_t pad[3]; */
3729 proto_tree_add_item(tree
, hf_openflow_v6_tablemod_pad
, tvb
, offset
, 3, ENC_NA
);
3732 /* uint32_t config; */
3733 ti
= proto_tree_add_item(tree
, hf_openflow_v6_tablemod_config
, tvb
, offset
, 4, ENC_NA
);
3734 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_tablemod_config
);
3736 proto_tree_add_item(conf_tree
, hf_openflow_v6_tablemod_config_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3737 proto_tree_add_item(conf_tree
, hf_openflow_v6_tablemod_config_vacancy_events
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3740 /* struct ofp_table_mod_prop_header properties[0]; */
3741 while (offset
< length
) {
3742 save_offset
= offset
;
3743 offset
= dissect_openflow_tablemod_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
3744 if (offset
<= save_offset
) {
3745 /* We don't need to go backwards or introduce an infinite loop */
3753 dissect_openflow_flow_stats_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3755 /* uint8_t table_id; */
3756 proto_tree_add_item(tree
, hf_openflow_v6_flow_stats_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3759 /* uint8_t pad[3]; */
3760 proto_tree_add_item(tree
, hf_openflow_v6_flow_stats_request_pad
, tvb
, offset
, 3, ENC_NA
);
3763 /* uint32_t out_port; */
3764 proto_tree_add_item(tree
, hf_openflow_v6_flow_stats_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3767 /* uint32_t out_group; */
3768 proto_tree_add_item(tree
, hf_openflow_v6_flow_stats_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3771 /* uint8_t pad2[4]; */
3772 proto_tree_add_item(tree
, hf_openflow_v6_flow_stats_request_pad2
, tvb
, offset
, 4, ENC_NA
);
3775 /* uint64_t cookie; */
3776 proto_tree_add_item(tree
, hf_openflow_v6_flow_stats_request_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3779 /* uint64_t cookie_mask; */
3780 proto_tree_add_item(tree
, hf_openflow_v6_flow_stats_request_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3783 /* struct ofp_match match; */
3784 dissect_openflow_match_v6(tvb
, pinfo
, tree
, offset
, length
);
3788 dissect_openflow_aggregate_stats_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3790 /* uint8_t table_id; */
3791 proto_tree_add_item(tree
, hf_openflow_v6_aggregate_stats_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3794 /* uint8_t pad[3]; */
3795 proto_tree_add_item(tree
, hf_openflow_v6_aggregate_stats_request_pad
, tvb
, offset
, 3, ENC_NA
);
3798 /* uint32_t out_port; */
3799 proto_tree_add_item(tree
, hf_openflow_v6_aggregate_stats_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3802 /* uint32_t out_group; */
3803 proto_tree_add_item(tree
, hf_openflow_v6_aggregate_stats_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3806 /* uint8_t pad2[4]; */
3807 proto_tree_add_item(tree
, hf_openflow_v6_aggregate_stats_request_pad2
, tvb
, offset
, 4, ENC_NA
);
3810 /* uint64_t cookie; */
3811 proto_tree_add_item(tree
, hf_openflow_v6_aggregate_stats_request_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3814 /* uint64_t cookie_mask; */
3815 proto_tree_add_item(tree
, hf_openflow_v6_aggregate_stats_request_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3818 /* struct ofp_match match; */
3819 dissect_openflow_match_v6(tvb
, pinfo
, tree
, offset
, length
);
3823 #define OFPTFPT_INSTRUCTIONS 0
3824 #define OFPTFPT_INSTRUCTIONS_MISS 1
3825 #define OFPTFPT_NEXT_TABLES 2
3826 #define OFPTFPT_NEXT_TABLES_MISS 3
3827 #define OFPTFPT_WRITE_ACTIONS 4
3828 #define OFPTFPT_WRITE_ACTIONS_MISS 5
3829 #define OFPTFPT_APPLY_ACTIONS 6
3830 #define OFPTFPT_APPLY_ACTIONS_MISS 7
3831 #define OFPTFPT_MATCH 8
3832 #define OFPTFPT_WILDCARDS 10
3833 #define OFPTFPT_WRITE_SETFIELD 12
3834 #define OFPTFPT_WRITE_SETFIELD_MISS 13
3835 #define OFPTFPT_APPLY_SETFIELD 14
3836 #define OFPTFPT_APPLY_SETFIELD_MISS 15
3837 #define OFPTFPT_TABLE_SYNC_FROM 16
3838 #define OFPTFPT_WRITE_COPYFIELD 18
3839 #define OFPTFPT_WRITE_COPYFIELD_MISS 19
3840 #define OFPTFPT_APPLY_COPYFIELD 20
3841 #define OFPTFPT_APPLY_COPYFIELD_MISS 21
3842 #define OFPTFPT_PACKET_TYPES 22
3843 #define OFPTFPT_EXPERIMENTER 0xFFFE
3844 #define OFPTFPT_EXPERIMENTER_MISS 0xFFFF
3845 static const value_string openflow_v6_table_feature_prop_type_values
[] = {
3846 { OFPTFPT_INSTRUCTIONS
, "OFPTFPT_INSTRUCTIONS" },
3847 { OFPTFPT_INSTRUCTIONS_MISS
, "OFPTFPT_INSTRUCTIONS_MISS" },
3848 { OFPTFPT_NEXT_TABLES
, "OFPTFPT_NEXT_TABLES" },
3849 { OFPTFPT_NEXT_TABLES_MISS
, "OFPTFPT_NEXT_TABLES_MISS" },
3850 { OFPTFPT_WRITE_ACTIONS
, "OFPTFPT_WRITE_ACTIONS" },
3851 { OFPTFPT_WRITE_ACTIONS_MISS
, "OFPTFPT_WRITE_ACTIONS_MISS" },
3852 { OFPTFPT_APPLY_ACTIONS
, "OFPTFPT_APPLY_ACTIONS" },
3853 { OFPTFPT_APPLY_ACTIONS_MISS
, "OFPTFPT_APPLY_ACTIONS_MISS" },
3854 { OFPTFPT_MATCH
, "OFPTFPT_MATCH" },
3855 { OFPTFPT_WILDCARDS
, "OFPTFPT_WILDCARDS" },
3856 { OFPTFPT_WRITE_SETFIELD
, "OFPTFPT_WRITE_SETFIELD" },
3857 { OFPTFPT_WRITE_SETFIELD_MISS
, "OFPTFPT_WRITE_SETFIELD_MISS" },
3858 { OFPTFPT_APPLY_SETFIELD
, "OFPTFPT_APPLY_SETFIELD" },
3859 { OFPTFPT_APPLY_SETFIELD_MISS
, "OFPTFPT_APPLY_SETFIELD_MISS" },
3860 { OFPTFPT_EXPERIMENTER
, "OFPTFPT_EXPERIMENTER" },
3861 { OFPTFPT_EXPERIMENTER_MISS
, "OFPTFPT_EXPERIMENTER_MISS" },
3862 { OFPTFPT_TABLE_SYNC_FROM
, "OFPTFPT_TABLE_SYNC_FROM" },
3863 { OFPTFPT_WRITE_COPYFIELD
, "OFPTFPT_WRITE_COPYFIELD" },
3864 { OFPTFPT_WRITE_COPYFIELD_MISS
,"OFPTFPT_WRITE_COPYFIELD_MISS" },
3865 { OFPTFPT_APPLY_COPYFIELD
, "OFPTFPT_APPLY_COPYFIELD" },
3866 { OFPTFPT_APPLY_COPYFIELD_MISS
,"OFPTFPT_APPLY_COPYFIELD_MISS" },
3867 { OFPTFPT_PACKET_TYPES
, "OFPTFPT_PACKET_TYPES" },
3873 dissect_openflow_table_feature_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3876 proto_tree
*prop_tree
, *elem_tree
;
3878 uint32_t prop_length
;
3879 uint16_t elem_begin
;
3881 uint16_t pad_length
;
3883 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_table_feature_prop
, &ti
, "Table feature property");
3885 /* uint16_t type; */
3886 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_table_feature_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
3889 /* uint16_t length; */
3890 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_table_feature_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_length
);
3891 proto_item_set_len(ti
, prop_length
);
3894 if (prop_length
< 4) {
3898 body_end
= offset
+ prop_length
- 4;
3901 switch (prop_type
) {
3902 case OFPTFPT_INSTRUCTIONS
:
3903 case OFPTFPT_INSTRUCTIONS_MISS
:
3904 while (offset
< body_end
) {
3905 elem_begin
= offset
;
3906 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v6_table_feature_prop_instruction_id
, &ti
, "Instruction ID");
3908 offset
= dissect_openflow_instruction_header_v6(tvb
, pinfo
, elem_tree
, offset
, length
, NULL
);
3909 proto_item_set_len(ti
, offset
- elem_begin
);
3913 case OFPTFPT_NEXT_TABLES
:
3914 case OFPTFPT_NEXT_TABLES_MISS
:
3915 while (offset
< body_end
) {
3916 proto_tree_add_item(prop_tree
, hf_openflow_v6_table_feature_prop_next_tables_next_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3921 case OFPTFPT_WRITE_ACTIONS
:
3922 case OFPTFPT_WRITE_ACTIONS_MISS
:
3923 case OFPTFPT_APPLY_ACTIONS
:
3924 case OFPTFPT_APPLY_ACTIONS_MISS
:
3925 while (offset
< body_end
) {
3926 elem_begin
= offset
;
3927 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v6_table_feature_prop_action_id
, &ti
, "Action ID");
3929 offset
= dissect_openflow_action_header_v6(tvb
, pinfo
, elem_tree
, offset
, length
);
3930 proto_item_set_len(ti
, offset
- elem_begin
);
3935 case OFPTFPT_WILDCARDS
:
3936 case OFPTFPT_WRITE_SETFIELD
:
3937 case OFPTFPT_WRITE_SETFIELD_MISS
:
3938 case OFPTFPT_APPLY_SETFIELD
:
3939 case OFPTFPT_APPLY_SETFIELD_MISS
:
3940 case OFPTFPT_WRITE_COPYFIELD
:
3941 case OFPTFPT_WRITE_COPYFIELD_MISS
:
3942 case OFPTFPT_APPLY_COPYFIELD
:
3943 case OFPTFPT_APPLY_COPYFIELD_MISS
:
3944 while (offset
< body_end
) {
3945 elem_begin
= offset
;
3946 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v6_table_feature_prop_oxm_id
, &ti
, "OXM ID");
3948 offset
= dissect_openflow_oxm_header_v6(tvb
, pinfo
, elem_tree
, offset
, length
, NULL
);
3949 proto_item_set_len(ti
, offset
- elem_begin
);
3953 case OFPTFPT_TABLE_SYNC_FROM
:
3954 while (offset
< body_end
) {
3955 proto_tree_add_item(prop_tree
, hf_openflow_v6_table_feature_prop_table_sync_from_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3960 case OFPTFPT_PACKET_TYPES
:
3961 while (offset
< body_end
) {
3962 elem_begin
= offset
;
3963 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v6_table_feature_prop_oxm_id
, &ti
, "OXM ID");
3965 offset
= dissect_openflow_oxm_v6(tvb
, pinfo
, elem_tree
, offset
, length
);
3966 proto_item_set_len(ti
, offset
- elem_begin
);
3970 case OFPTFPT_EXPERIMENTER
:
3971 case OFPTFPT_EXPERIMENTER_MISS
:
3972 /* uint32_t experimenter; */
3973 proto_tree_add_item(prop_tree
, hf_openflow_v6_table_feature_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3976 /* uint32_t exp_type; */
3977 proto_tree_add_item(prop_tree
, hf_openflow_v6_table_feature_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3980 /* uint32_t experimenter_data[0]; */
3981 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_table_feature_prop_undecoded
,
3982 tvb
, offset
, body_end
- offset
, "Experimenter table property body.");
3987 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_table_feature_prop_undecoded
,
3988 tvb
, offset
, body_end
- offset
, "Unknown table property body.");
3993 pad_length
= (prop_length
+ 7)/8*8 - prop_length
;
3994 if (pad_length
> 0) {
3995 proto_tree_add_item(prop_tree
, hf_openflow_v6_table_feature_prop_pad
, tvb
, offset
, pad_length
, ENC_NA
);
4003 #define OFP_MAX_TABLE_NAME_LEN 32
4005 dissect_openflow_table_features_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
4008 proto_tree
*feat_tree
, *caps_tree
;
4009 uint32_t feat_length
;
4012 feat_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_table_features
, &ti
, "Table features");
4014 /* uint16_t length; */
4015 proto_tree_add_item_ret_uint(feat_tree
, hf_openflow_v6_table_features_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &feat_length
);
4016 feat_end
= offset
+ feat_length
;
4017 proto_item_set_len(ti
, feat_length
);
4020 /* uint8_t table_id; */
4021 proto_tree_add_item(feat_tree
, hf_openflow_v6_table_features_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4024 /* uint8_t pad[5]; */
4025 proto_tree_add_item(feat_tree
, hf_openflow_v6_table_features_pad
, tvb
, offset
, 5, ENC_NA
);
4028 /* char name[OFP_MAX_TABLE_NAME_LEN]; */
4029 proto_tree_add_item(feat_tree
, hf_openflow_v6_table_features_name
, tvb
, offset
, OFP_MAX_TABLE_NAME_LEN
, ENC_ASCII
);
4030 offset
+=OFP_MAX_TABLE_NAME_LEN
;
4032 /* uint64_t metadata_match; */
4033 proto_tree_add_item(feat_tree
, hf_openflow_v6_table_features_metadata_match
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4036 /* uint64_t metadata_write; */
4037 proto_tree_add_item(feat_tree
, hf_openflow_v6_table_features_metadata_write
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4040 /* uint32_t capabilities; */
4041 ti
= proto_tree_add_item(feat_tree
, hf_openflow_v6_table_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4042 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_table_features_capabilities
);
4044 proto_tree_add_item(caps_tree
, hf_openflow_v6_table_features_capabilities_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4045 proto_tree_add_item(caps_tree
, hf_openflow_v6_table_features_capabilities_vacancy_events
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4048 /* uint32_t max_entries; */
4049 proto_tree_add_item(feat_tree
, hf_openflow_v6_table_features_max_entries
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4052 /* struct ofp_table_feature_prop_header properties[0]; */
4053 while (offset
< feat_end
) {
4054 offset
= dissect_openflow_table_feature_prop_v6(tvb
, pinfo
, feat_tree
, offset
, length
);
4062 dissect_openflow_port_stats_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4064 /* uint32_t port_no; */
4065 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4068 /* uint8_t pad[4]; */
4069 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
4073 #define OFPQ_ALL 0xffffffff
4074 static const value_string openflow_v6_queue_reserved_values
[] = {
4075 { OFPQ_ALL
, "OFPQ_ALL" },
4080 dissect_openflow_queue_stats_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4082 /* uint32_t port_no; */
4083 proto_tree_add_item(tree
, hf_openflow_v6_queue_stats_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4086 /* uint32_t queue_id; */
4087 proto_tree_add_item(tree
, hf_openflow_v6_queue_stats_request_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4093 dissect_openflow_group_stats_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4095 /* uint32_t group_id; */
4096 proto_tree_add_item(tree
, hf_openflow_v6_group_stats_request_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4099 /* uint8_t pad[4]; */
4100 proto_tree_add_item(tree
, hf_openflow_v6_group_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
4106 dissect_openflow_meter_stats_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4108 /* uint32_t meter_id; */
4109 proto_tree_add_item(tree
, hf_openflow_v6_meter_stats_request_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4112 /* uint8_t pad[4]; */
4113 proto_tree_add_item(tree
, hf_openflow_v6_meter_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
4119 dissect_openflow_meter_desc_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4121 /* uint32_t meter_id; */
4122 proto_tree_add_item(tree
, hf_openflow_v6_meter_desc_request_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4125 /* uint8_t pad[4]; */
4126 proto_tree_add_item(tree
, hf_openflow_v6_meter_desc_request_pad
, tvb
, offset
, 4, ENC_NA
);
4133 dissect_openflow_queue_desc_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4135 /* uint32_t port_no; */
4136 proto_tree_add_item(tree
, hf_openflow_v6_queue_desc_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4139 /* uint32_t queue_id; */
4140 proto_tree_add_item(tree
, hf_openflow_v6_queue_desc_request_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4145 #define OFPFMF_INITIAL 1<<0
4146 #define OFPFMF_ADD 1<<1
4147 #define OFPFMF_REMOVED 1<<2
4148 #define OFPFMF_MODIFY 1<<3
4149 #define OFPFMF_INSTRUCTIONS 1<<4
4150 #define OFPFMF_NO_ABBREV 1<<5
4151 #define OFPFMF_ONLY_OWN 1<<6
4153 #define OFPFMC_ADD 0
4154 #define OFPFMC_MODIFY 1
4155 #define OFPFMC_DELETE 2
4156 static const value_string openflow_v6_flow_monitor_request_command_values
[] = {
4157 { OFPFMC_ADD
, "OFPFMC_ADD" },
4158 { OFPFMC_MODIFY
, "OFPFMC_MODIFY" },
4159 { OFPFMC_DELETE
, "OFPFMC_DELETE" },
4164 dissect_openflow_flow_monitor_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4167 proto_tree
*flags_tree
;
4169 /* uint32_t monitor_id; */
4170 proto_tree_add_item(tree
, hf_openflow_v6_flow_monitor_request_monitor_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4173 /* uint32_t out_port; */
4174 proto_tree_add_item(tree
, hf_openflow_v6_flow_monitor_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4178 /* uint32_t out_group; */
4179 proto_tree_add_item(tree
, hf_openflow_v6_flow_monitor_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4182 /* uint16_t flags; */
4183 ti
= proto_tree_add_item(tree
, hf_openflow_v6_flow_monitor_request_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4184 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_flow_monitor_request_flags
);
4186 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_monitor_request_flags_initial
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4187 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_monitor_request_flags_add
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4188 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_monitor_request_flags_removed
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4189 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_monitor_request_flags_modify
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4190 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_monitor_request_flags_instructions
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4191 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_monitor_request_flags_no_abbrev
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4192 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_monitor_request_flags_only_own
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4195 /* uint8_t table_id; */
4196 proto_tree_add_item(tree
, hf_openflow_v6_flow_monitor_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4199 /* uint8_t command; */
4200 proto_tree_add_item(tree
, hf_openflow_v6_flow_monitor_request_command
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4203 /* struct ofp_match match; */
4204 dissect_openflow_match_v6(tvb
, pinfo
, tree
, offset
, length
);
4208 dissect_openflow_time_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4210 /* uint64_t seconds; */
4211 proto_tree_add_item(tree
, hf_openflow_v6_time_seconds
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4214 /* uint32_t nanoseconds; */
4215 proto_tree_add_item(tree
, hf_openflow_v6_time_nanoseconds
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4218 /* uint8_t pad[4]; */
4219 proto_tree_add_item(tree
, hf_openflow_v6_time_pad
, tvb
, offset
, 4, ENC_NA
);
4225 #define OFPTMPBF_TIME_CAPABILITY 1
4226 #define OFPTMPBF_EXPERIMENTER 0xFFFF
4227 static const value_string openflow_v6_bundle_feature_prop_type_values
[] = {
4228 { OFPTMPBF_TIME_CAPABILITY
, "OFPTMPBF_TIME_CAPABILITY" },
4229 { OFPTMPBF_EXPERIMENTER
, "OFPTMPBF_EXPERIMENTER" },
4235 dissect_openflow_bundle_feature_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
4238 proto_tree
*prop_tree
;
4240 uint32_t prop_length
;
4242 uint16_t pad_length
;
4244 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_bundle_feature_prop
, &ti
, "Bundle feature property");
4246 /* uint16_t type; */
4247 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_bundle_feature_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
4250 /* uint16_t length; */
4251 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_bundle_feature_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_length
);
4252 proto_item_set_len(ti
, prop_length
);
4255 if (prop_length
< 4) {
4259 body_end
= offset
+ prop_length
- 4;
4262 switch (prop_type
) {
4263 case OFPTMPBF_TIME_CAPABILITY
:
4264 /* uint8_t pad[4]; */
4265 proto_tree_add_item(prop_tree
, hf_openflow_v6_bundle_feature_prop_time_pad
, tvb
, offset
, 4, ENC_NA
);
4268 /* struct ofp_time sched_accuracy; */
4269 offset
= dissect_openflow_time_v6(tvb
, pinfo
, tree
, offset
, length
);
4271 /* struct ofp_time sched_max_future; */
4272 offset
= dissect_openflow_time_v6(tvb
, pinfo
, tree
, offset
, length
);
4274 /* struct ofp_time sched_max_past; */
4275 offset
= dissect_openflow_time_v6(tvb
, pinfo
, tree
, offset
, length
);
4277 /* struct ofp_time timestamp; */
4278 offset
= dissect_openflow_time_v6(tvb
, pinfo
, tree
, offset
, length
);
4280 case OFPTMPBF_EXPERIMENTER
:
4281 /* uint32_t experimenter; */
4282 proto_tree_add_item(prop_tree
, hf_openflow_v6_bundle_feature_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4285 /* uint32_t exp_type; */
4286 proto_tree_add_item(prop_tree
, hf_openflow_v6_bundle_feature_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4289 /* uint32_t experimenter_data[0]; */
4290 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_bundle_feature_prop_undecoded
,
4291 tvb
, offset
, body_end
- offset
, "Experimenter bundle property body.");
4296 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_bundle_feature_prop_undecoded
,
4297 tvb
, offset
, body_end
- offset
, "Unknown bundle property body.");
4302 pad_length
= (prop_length
+ 7)/8*8 - prop_length
;
4303 if (pad_length
> 0) {
4304 proto_tree_add_item(prop_tree
, hf_openflow_v6_bundle_feature_prop_pad
, tvb
, offset
, pad_length
, ENC_NA
);
4312 dissect_openflow_bundle_features_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4314 /* uint32_t feature_request_flags; */
4315 proto_tree_add_item(tree
, hf_openflow_v6_bundle_features_request_flags
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4318 /* uint8_t pad[4]; */
4319 proto_tree_add_item(tree
, hf_openflow_v6_bundle_features_request_pad
, tvb
, offset
, 4, ENC_NA
);
4322 /* struct ofp_bundle_features_prop_header properties[0]; */
4323 while (offset
< length
) {
4324 offset
= dissect_openflow_bundle_feature_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
4328 #define OFPMP_DESC 0
4329 #define OFPMP_FLOW_DESC 1
4330 #define OFPMP_AGGREGATE_STATS 2
4331 #define OFPMP_TABLE_STATS 3
4332 #define OFPMP_PORT_STATS 4
4333 #define OFPMP_QUEUE_STATS 5
4334 #define OFPMP_GROUP_STATS 6
4335 #define OFPMP_GROUP_DESC 7
4336 #define OFPMP_GROUP_FEATURES 8
4337 #define OFPMP_METER_STATS 9
4338 #define OFPMP_METER_DESC 10
4339 #define OFPMP_METER_FEATURES 11
4340 #define OFPMP_TABLE_FEATURES 12
4341 #define OFPMP_PORT_DESC 13
4342 #define OFPMP_TABLE_DESC 14
4343 #define OFPMP_QUEUE_DESC 15
4344 #define OFPMP_FLOW_MONITOR 16
4345 #define OFPMP_FLOW_STATS 17
4346 #define OFPMP_CONTROLLER_STATUS 18
4347 #define OFPMP_BUNDLE_FEATURES 19
4348 #define OFPMP_EXPERIMENTER 0xffff
4349 static const value_string openflow_v6_multipart_type_values
[] = {
4350 { OFPMP_DESC
, "OFPMP_DESC" },
4351 { OFPMP_FLOW_DESC
, "OFPMP_FLOW_DESC" },
4352 { OFPMP_AGGREGATE_STATS
, "OFPMP_AGGREGATE_STATS" },
4353 { OFPMP_TABLE_STATS
, "OFPMP_TABLE_STATS" },
4354 { OFPMP_PORT_STATS
, "OFPMP_PORT_STATS" },
4355 { OFPMP_QUEUE_STATS
, "OFPMP_QUEUE_STATS" },
4356 { OFPMP_GROUP_STATS
, "OFPMP_GROUP_STATS" },
4357 { OFPMP_GROUP_DESC
, "OFPMP_GROUP_DESC" },
4358 { OFPMP_GROUP_FEATURES
, "OFPMP_GROUP_FEATURES" },
4359 { OFPMP_METER_STATS
, "OFPMP_METER_STATS" },
4360 { OFPMP_METER_DESC
, "OFPMP_METER_DESC" },
4361 { OFPMP_METER_FEATURES
, "OFPMP_METER_FEATURES" },
4362 { OFPMP_TABLE_FEATURES
, "OFPMP_TABLE_FEATURES" },
4363 { OFPMP_PORT_DESC
, "OFPMP_PORT_DESC" },
4364 { OFPMP_TABLE_DESC
, "OFPMP_TABLE_DESC" },
4365 { OFPMP_QUEUE_DESC
, "OFPMP_QUEUE_DESC" },
4366 { OFPMP_FLOW_MONITOR
, "OFPMP_FLOW_MONITOR" },
4367 { OFPMP_FLOW_STATS
, "OFPMP_FLOW_STATS" },
4368 { OFPMP_CONTROLLER_STATUS
, "OFPMP_CONTROLLER_STATUS" },
4369 { OFPMP_BUNDLE_FEATURES
, "OFPMP_BUNDLE_FEATURES" },
4370 { OFPMP_EXPERIMENTER
, "OFPMP_EXPERIMENTER" },
4374 #define OFPMPF_REQ_MORE 1 << 0
4376 dissect_openflow_multipart_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
4379 proto_tree
*flags_tree
;
4382 /* uint16_t type; */
4383 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_multipart_request_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &type
);
4386 /* uint16_t flags; */
4387 ti
= proto_tree_add_item(tree
, hf_openflow_v6_multipart_request_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4388 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_multipart_request_flags
);
4390 proto_tree_add_item(flags_tree
, hf_openflow_v6_multipart_request_flags_more
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4393 /* uint8_t pad[4]; */
4394 proto_tree_add_item(tree
, hf_openflow_v6_multipart_request_pad
, tvb
, offset
, 4, ENC_NA
);
4397 /* uint8_t body[0]; */
4400 /* The request body is empty. */
4402 case OFPMP_FLOW_DESC
:
4403 dissect_openflow_flow_stats_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4405 case OFPMP_AGGREGATE_STATS
:
4406 dissect_openflow_aggregate_stats_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4408 case OFPMP_TABLE_STATS
:
4409 /* The request body is empty. */
4411 case OFPMP_PORT_STATS
:
4412 dissect_openflow_port_stats_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4414 case OFPMP_QUEUE_STATS
:
4415 dissect_openflow_queue_stats_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4417 case OFPMP_GROUP_STATS
:
4418 dissect_openflow_group_stats_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4420 case OFPMP_GROUP_DESC
:
4421 /* The request body is empty. */
4423 case OFPMP_GROUP_FEATURES
:
4424 /* The request body is empty. */
4426 case OFPMP_METER_STATS
:
4427 dissect_openflow_meter_stats_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4429 case OFPMP_METER_DESC
:
4430 dissect_openflow_meter_desc_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4432 case OFPMP_METER_FEATURES
:
4433 /* The request body is empty. */
4435 case OFPMP_TABLE_FEATURES
:
4436 while (offset
< length
) {
4437 offset
= dissect_openflow_table_features_v6(tvb
, pinfo
, tree
, offset
, length
);
4440 case OFPMP_PORT_DESC
:
4441 /* The request body is empty. */
4443 case OFPMP_TABLE_DESC
:
4444 /* The request body is empty. */
4446 case OFPMP_QUEUE_DESC
:
4447 dissect_openflow_queue_desc_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4449 case OFPMP_FLOW_MONITOR
:
4450 dissect_openflow_flow_monitor_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4452 case OFPMP_FLOW_STATS
:
4453 dissect_openflow_flow_stats_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4455 case OFPMP_CONTROLLER_STATUS
:
4456 /* The request body is empty. */
4458 case OFPMP_BUNDLE_FEATURES
:
4459 dissect_openflow_bundle_features_request_v6(tvb
, pinfo
, tree
, offset
, length
);
4461 case OFPMP_EXPERIMENTER
:
4462 /* uint32_t experimenter; */
4463 proto_tree_add_item(tree
, hf_openflow_v6_multipart_request_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4466 /* uint32_t exp_type; */
4467 proto_tree_add_item(tree
, hf_openflow_v6_multipart_request_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4470 /* uint32_t experimenter_data[0]; */
4471 if (offset
< length
) {
4472 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_multipart_request_undecoded
,
4473 tvb
, offset
, length
- offset
, "Experimenter multipart request body.");
4477 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_multipart_request_undecoded
,
4478 tvb
, offset
, length
- offset
, "Unknown multipart request body.");
4484 #define DESC_STR_LEN 256
4485 #define SERIAL_NUM_LEN 32
4487 dissect_openflow_switch_description_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4489 /* char mfr_desc[DESC_STR_LEN]; */
4490 proto_tree_add_item(tree
, hf_openflow_v6_switch_description_mfr_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4491 offset
+=DESC_STR_LEN
;
4493 /* char hw_desc[DESC_STR_LEN]; */
4494 proto_tree_add_item(tree
, hf_openflow_v6_switch_description_hw_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4495 offset
+=DESC_STR_LEN
;
4497 /* char sw_desc[DESC_STR_LEN]; */
4498 proto_tree_add_item(tree
, hf_openflow_v6_switch_description_sw_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4499 offset
+=DESC_STR_LEN
;
4501 /* char serial_num[SERIAL_NUM_LEN]; */
4502 proto_tree_add_item(tree
, hf_openflow_v6_switch_description_serial_num
, tvb
, offset
, SERIAL_NUM_LEN
, ENC_ASCII
);
4503 offset
+=SERIAL_NUM_LEN
;
4505 /* char dp_desc[DESC_STR_LEN]; */
4506 proto_tree_add_item(tree
, hf_openflow_v6_switch_description_dp_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4507 /*offset+=DESC_STR_LEN;*/
4512 // NOLINTNEXTLINE(misc-no-recursion)
4513 dissect_openflow_flow_desc_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4516 proto_tree
*desc_tree
, *flags_tree
;
4520 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_flow_desc
, &ti
, "Flow desc");
4522 /* uint16_t length; */
4523 proto_tree_add_item_ret_uint(desc_tree
, hf_openflow_v6_flow_desc_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &desc_len
);
4524 desc_end
= offset
+ desc_len
;
4525 proto_item_set_len(ti
, desc_len
);
4528 /* uint8_t pad2[2]; */
4529 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_pad2
, tvb
, offset
, 2, ENC_NA
);
4532 /* uint8_t table_id; */
4533 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4537 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_pad
, tvb
, offset
, 1, ENC_NA
);
4540 /* uint16_t priority; */
4541 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4544 /* uint16_t idle_timeout; */
4545 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4548 /* uint16_t hard_timeout; */
4549 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4552 /* uint16_t flags; */
4553 ti
= proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4554 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_flow_desc_flags
);
4556 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_desc_flags_send_flow_rem
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4557 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_desc_flags_check_overlap
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4558 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_desc_flags_reset_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4559 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_desc_flags_no_packet_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4560 proto_tree_add_item(flags_tree
, hf_openflow_v6_flow_desc_flags_no_byte_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4563 /* uint16_t importance; */
4564 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_importance
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4567 /* uint64_t cookie; */
4568 proto_tree_add_item(desc_tree
, hf_openflow_v6_flow_desc_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4571 /* struct ofp_match match; */
4572 offset
= dissect_openflow_match_v6(tvb
, pinfo
, desc_tree
, offset
, length
);
4574 /* struct ofp_stats stats; */
4575 offset
= dissect_openflow_stats_v6(tvb
, pinfo
, desc_tree
, offset
, length
);
4577 /* struct ofp_instruction instructions[0]; */
4578 while (offset
< desc_end
) {
4579 offset
= dissect_openflow_instruction_v6(tvb
, pinfo
, desc_tree
, offset
, length
);
4581 if (desc_end
< length
)
4582 return dissect_openflow_flow_desc_v6(tvb
, pinfo
, tree
, offset
, length
);
4587 #define OFPFSR_STATS_REQUEST 0
4588 #define OFPFSR_STAT_TRIGGER 1
4589 static const value_string openflow_v6_flow_stats_reason_values
[] = {
4590 { OFPFSR_STATS_REQUEST
, "OFPFSR_STATS_REQUEST" },
4591 { OFPFSR_STAT_TRIGGER
, "OFPFSR_STAT_TRIGGER" },
4596 dissect_openflow_flow_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4599 proto_tree
*stats_tree
;
4602 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_flow_stats
, &ti
, "Flow stats");
4604 /* uint16_t length; */
4605 proto_tree_add_item_ret_uint(stats_tree
, hf_openflow_v6_flow_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &stats_len
);
4606 proto_item_set_len(ti
, stats_len
);
4609 /* uint8_t pad2[2]; */
4610 proto_tree_add_item(stats_tree
, hf_openflow_v6_flow_stats_pad2
, tvb
, offset
, 2, ENC_NA
);
4613 /* uint8_t table_id; */
4614 proto_tree_add_item(stats_tree
, hf_openflow_v6_flow_stats_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4617 /* uint8_t reason; */
4618 proto_tree_add_item(stats_tree
, hf_openflow_v6_flow_stats_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4621 /* uint16_t priority; */
4622 proto_tree_add_item(stats_tree
, hf_openflow_v6_flow_stats_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4625 /* struct ofp_match match; */
4626 offset
= dissect_openflow_match_v6(tvb
, pinfo
, stats_tree
, offset
, length
);
4628 /* struct ofp_stats stats; */
4629 offset
= dissect_openflow_stats_v6(tvb
, pinfo
, stats_tree
, offset
, length
);
4636 dissect_openflow_aggregate_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4638 dissect_openflow_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
4643 dissect_openflow_table_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4645 proto_tree
*stats_tree
;
4647 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 24, ett_openflow_v6_table_stats
, NULL
, "Table stats");
4649 /* uint8_t table_id; */
4650 proto_tree_add_item(stats_tree
, hf_openflow_v6_table_stats_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4653 /* uint8_t pad[3]; */
4654 proto_tree_add_item(stats_tree
, hf_openflow_v6_table_stats_pad
, tvb
, offset
, 3, ENC_NA
);
4657 /* uint32_t active_count; */
4658 proto_tree_add_item(stats_tree
, hf_openflow_v6_table_stats_active_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4661 /* uint64_t lookup_count; */
4662 proto_tree_add_item(stats_tree
, hf_openflow_v6_table_stats_lookup_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4665 /* uint64_t matched_count; */
4666 proto_tree_add_item(stats_tree
, hf_openflow_v6_table_stats_match_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4674 dissect_openflow_port_stats_prop_ethernet_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4676 /* uint8_t pad[4]; */
4677 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_ethernet_pad
, tvb
, offset
, 4, ENC_NA
);
4680 /* uint64_t rx_frame_error; */
4681 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_ethernet_rx_frame_err
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4684 /* uint64_t rx_over_error; */
4685 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_ethernet_rx_over_err
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4688 /* uint64_t rx_crc_error; */
4689 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_ethernet_rx_crc_err
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4692 /* uint64_t collisions; */
4693 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_ethernet_collisions
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4700 #define OFPOSF_RX_TUNE 1<<0
4701 #define OFPOSF_TX_TUNE 1<<1
4702 #define OFPOSF_TX_PWR 1<<2
4703 #define OFPOSF_RX_PWR 1<<4
4704 #define OFPOSF_TX_BIAS 1<<5
4705 #define OFPOSF_TX_TEMP 1<<6
4707 dissect_openflow_port_stats_prop_optical_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4710 proto_tree
*flags_tree
;
4712 /* uint8_t pad[4]; */
4713 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_pad
, tvb
, offset
, 4, ENC_NA
);
4716 /* uint32_t flags; */
4717 ti
= proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_flags
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4718 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_port_stats_prop_optical_flags
);
4720 proto_tree_add_item(flags_tree
, hf_openflow_v6_port_stats_prop_optical_flags_rx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4721 proto_tree_add_item(flags_tree
, hf_openflow_v6_port_stats_prop_optical_flags_tx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4722 proto_tree_add_item(flags_tree
, hf_openflow_v6_port_stats_prop_optical_flags_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4723 proto_tree_add_item(flags_tree
, hf_openflow_v6_port_stats_prop_optical_flags_rx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4724 proto_tree_add_item(flags_tree
, hf_openflow_v6_port_stats_prop_optical_flags_tx_bias
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4725 proto_tree_add_item(flags_tree
, hf_openflow_v6_port_stats_prop_optical_flags_tx_temp
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4728 /* uint32_t tx_freq_lmda; */
4729 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_tx_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4732 /* uint32_t tx_offset; */
4733 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_tx_offset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4736 /* uint32_t tx_grid_span; */
4737 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_tx_grid_span
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4740 /* uint32_t rx_freq_lmda; */
4741 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_rx_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4744 /* uint32_t rx_offset; */
4745 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_rx_offset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4748 /* uint32_t rx_grid_span; */
4749 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_rx_grid_span
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4752 /* uint16_t tx_pwr; */
4753 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_tx_pwr
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4756 /* uint16_t rx_pwr; */
4757 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_rx_pwr
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4760 /* uint16_t bias_current; */
4761 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_bias_current
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4764 /* uint16_t temperature; */
4765 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_optical_temperature
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4773 #define OFPPSPT_ETHERNET 0
4774 #define OFPPSPT_OPTICAL 1
4775 #define OFPPSPT_EXPERIMENTER 0xFFFF
4776 static const value_string openflow_v6_port_stats_prop_type_values
[] = {
4777 { OFPPSPT_ETHERNET
, "OFPPSPT_ETHERNET" },
4778 { OFPPSPT_OPTICAL
, "OFPPSPT_OPTICAL" },
4779 { OFPPSPT_EXPERIMENTER
, "OFPPSPT_EXPERIMENTER" },
4784 dissect_openflow_port_stats_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4786 proto_tree
*prop_tree
;
4787 proto_item
*ti
, *prop_item
;
4789 uint32_t prop_length
;
4791 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_port_stats_prop
, &ti
, "Port stats. property");
4793 /* uint16_t type; */
4794 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_port_stats_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
4798 prop_item
= proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_port_stats_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_length
);
4799 proto_item_set_len(ti
, prop_length
);
4802 switch (prop_type
) {
4803 case OFPPSPT_ETHERNET
:
4804 offset
= dissect_openflow_port_stats_prop_ethernet_v6(tvb
, pinfo
, prop_tree
, offset
, length
);
4807 case OFPPSPT_OPTICAL
:
4808 offset
= dissect_openflow_port_stats_prop_optical_v6(tvb
, pinfo
, prop_tree
, offset
, length
);
4811 case OFPPSPT_EXPERIMENTER
:
4812 if (prop_length
<= 12) {
4813 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
4817 /* uint32_t experimenter; */
4818 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4821 /* uint32_t exp_type; */
4822 proto_tree_add_item(tree
, hf_openflow_v6_port_stats_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4825 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_port_stats_prop_undecoded
,
4826 tvb
, offset
, prop_length
- 12, "Experimenter port stats. property.");
4827 offset
+= prop_length
- 12;
4831 if (prop_length
<= 4) {
4832 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
4836 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_port_stats_prop_undecoded
,
4837 tvb
, offset
, prop_length
- 4, "Unknown port stats. property.");
4838 offset
+= prop_length
- 4;
4847 dissect_openflow_port_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4849 proto_tree
*stats_tree
;
4850 uint32_t stats_length
;
4853 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 112, ett_openflow_v6_port_stats
, NULL
, "Port stats");
4855 /* uint16_t length; */
4856 proto_tree_add_item_ret_uint(stats_tree
, hf_openflow_v6_port_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &stats_length
);
4857 stats_end
= stats_length
+ offset
- 4;
4860 /* uint8_t pad[2]; */
4861 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_pad
, tvb
, offset
, 2, ENC_NA
);
4864 /* uint8_t port_no; */
4865 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4868 /* uint32_t duration_sec; */
4869 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4872 /* uint32_t duration_nsec; */
4873 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4876 /* uint64_t rx_packets; */
4877 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_rx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4880 /* uint64_t tx_packets; */
4881 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_tx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4884 /* uint64_t rx_bytes; */
4885 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_rx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4888 /* uint64_t tx_bytes; */
4889 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_tx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4892 /* uint64_t rx_dropped; */
4893 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_rx_dropped
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4896 /* uint64_t tx_dropped; */
4897 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_tx_dropped
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4900 /* uint64_t rx_errors; */
4901 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_rx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4904 /* uint64_t tx_errors; */
4905 proto_tree_add_item(stats_tree
, hf_openflow_v6_port_stats_tx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4908 /* struct ofp_port_stats_prop_header properties[0]; */
4909 while (offset
< stats_end
) {
4910 offset
= dissect_openflow_port_stats_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
4919 dissect_openflow_table_desc_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4922 proto_tree
*desc_tree
, *conf_tree
;
4923 uint32_t desc_length
;
4926 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_table_desc
, &ti
, "Table desc");
4928 /* uint16_t length; */
4929 proto_tree_add_item_ret_uint(desc_tree
, hf_openflow_v6_table_desc_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &desc_length
);
4930 proto_item_set_len(ti
, desc_length
);
4931 desc_end
= offset
+ desc_length
;
4934 /* uint8_t table_id; */
4935 proto_tree_add_item(desc_tree
, hf_openflow_v6_table_desc_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4938 /* uint8_t pad[1]; */
4939 proto_tree_add_item(desc_tree
, hf_openflow_v6_table_desc_pad
, tvb
, offset
, 1, ENC_NA
);
4942 /* uint32_t config; */
4943 ti
= proto_tree_add_item(desc_tree
, hf_openflow_v6_table_desc_config
, tvb
, offset
, 4, ENC_NA
);
4944 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_table_desc_config
);
4946 proto_tree_add_item(conf_tree
, hf_openflow_v6_table_desc_config_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4947 proto_tree_add_item(conf_tree
, hf_openflow_v6_table_desc_config_vacancy_events
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4950 /* struct ofp_table_mod_prop_header properties[0]; */
4951 while (offset
< desc_end
) {
4952 offset
= dissect_openflow_tablemod_prop_v6(tvb
, pinfo
, desc_tree
, offset
, length
);
4960 #define OFPQSPT_EXPERIMENTER 0xffff
4961 static const value_string openflow_v6_queue_stats_prop_type_values
[] = {
4962 { OFPQSPT_EXPERIMENTER
, "OFPQSPT_EXPERIMENTER" },
4967 dissect_openflow_queue_stats_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4969 proto_tree
*prop_tree
;
4970 proto_item
*prop_item
;
4972 uint16_t prop_length
;
4974 prop_length
= tvb_get_ntohs(tvb
, offset
+ 2);
4976 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_length
, ett_openflow_v6_queue_stats_prop
, NULL
, "Queue stats property");
4978 /* uint16_t type; */
4979 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_queue_stats_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
4983 prop_item
= proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_stats_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4986 switch (prop_type
) {
4987 case OFPMP_EXPERIMENTER
:
4988 if (prop_length
<= 12) {
4989 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
4993 /* uint32_t experimenter; */
4994 proto_tree_add_item(tree
, hf_openflow_v6_queue_stats_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4997 /* uint32_t exp_type; */
4998 proto_tree_add_item(tree
, hf_openflow_v6_queue_stats_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5001 /* uint32_t experimenter_data[0]; */
5002 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_queue_stats_prop_undecoded
,
5003 tvb
, offset
, length
- 12, "Experimenter queue stats prop body.");
5004 offset
+= prop_length
- 12;
5008 if (prop_length
<= 4) {
5009 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
5013 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_queue_stats_prop_undecoded
,
5014 tvb
, offset
, length
- 4, "Unknown queue stats prop body.");
5015 offset
+= prop_length
- 4;
5025 dissect_openflow_queue_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5027 proto_tree
*stats_tree
;
5031 stats_len
= tvb_get_ntohs(tvb
, offset
);
5032 stats_end
= offset
+ stats_len
;
5034 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, stats_len
, ett_openflow_v6_queue_stats
, NULL
, "Queue stats");
5036 /* uint16_t length; */
5037 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5040 /* uint8_t pad[6]; */
5041 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_pad
, tvb
, offset
, 2, ENC_NA
);
5044 /* uint32_t port_no; */
5045 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5048 /* uint32_t queue_id; */
5049 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5052 /* uint64_t tx_bytes; */
5053 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_tx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5056 /* uint64_t tx_packets; */
5057 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_tx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5060 /* uint64_t tx_errors; */
5061 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_tx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5064 /* uint32_t duration_sec; */
5065 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5068 /* uint32_t duration_nsec; */
5069 proto_tree_add_item(stats_tree
, hf_openflow_v6_queue_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5072 /* struct ofp_queue_stats_prop_header properties[0]; */
5073 while (offset
< stats_end
) {
5074 offset
= dissect_openflow_queue_stats_prop_v6(tvb
, pinfo
, stats_tree
, offset
, length
);
5083 dissect_openflow_bucket_counter_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5085 proto_tree
*counter_tree
;
5087 counter_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 16, ett_openflow_v6_bucket_counter
, NULL
, "Bucket counter");
5089 /* uint64_t packet_count; */
5090 proto_tree_add_item(counter_tree
, hf_openflow_v6_bucket_counter_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5093 /* uint64_t byte_count; */
5094 proto_tree_add_item(counter_tree
, hf_openflow_v6_bucket_counter_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5102 dissect_openflow_group_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5105 proto_tree
*stats_tree
;
5109 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_group_stats
, &ti
, "Group stats");
5111 /* uint16_t length; */
5112 stats_len
= tvb_get_ntohs(tvb
, offset
);
5113 stats_end
= offset
+ stats_len
;
5114 proto_item_set_len(ti
, stats_len
);
5115 proto_tree_add_item(stats_tree
, hf_openflow_v6_group_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5118 /* uint8_t pad[2]; */
5119 proto_tree_add_item(stats_tree
, hf_openflow_v6_group_stats_pad
, tvb
, offset
, 2, ENC_NA
);
5122 /* uint32_t group_id; */
5123 proto_tree_add_item(stats_tree
, hf_openflow_v6_group_stats_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5126 /* uint32_t ref_count; */
5127 proto_tree_add_item(stats_tree
, hf_openflow_v6_group_stats_ref_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5130 /* uint8_t pad2[4]; */
5131 proto_tree_add_item(stats_tree
, hf_openflow_v6_group_stats_pad2
, tvb
, offset
, 4, ENC_NA
);
5134 /* uint64_t packet_count; */
5135 proto_tree_add_item(stats_tree
, hf_openflow_v6_group_stats_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5138 /* uint64_t byte_count; */
5139 proto_tree_add_item(stats_tree
, hf_openflow_v6_group_stats_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5142 /* uint32_t duration_sec; */
5143 proto_tree_add_item(stats_tree
, hf_openflow_v6_flow_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5146 /* uint32_t duration_nsec; */
5147 proto_tree_add_item(stats_tree
, hf_openflow_v6_flow_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5150 /* struct ofp_bucket_counter bucket_stats[0]; */
5151 while (offset
< stats_end
) {
5152 offset
= dissect_openflow_bucket_counter_v6(tvb
, pinfo
, stats_tree
, offset
, length
);
5159 dissect_openflow_group_desc_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
5162 proto_tree
*desc_tree
;
5167 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_group_desc
, &ti
, "Group description");
5169 /* uint16_t length; */
5170 desc_len
= tvb_get_ntohs(tvb
, offset
);
5171 desc_end
= offset
+ desc_len
;
5172 proto_item_set_len(ti
, desc_len
);
5173 proto_tree_add_item(desc_tree
, hf_openflow_v6_group_desc_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5177 proto_tree_add_item(desc_tree
, hf_openflow_v6_group_desc_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5181 proto_tree_add_item(desc_tree
, hf_openflow_v6_group_desc_pad
, tvb
, offset
, 1, ENC_NA
);
5184 /* uint32_t group_id; */
5185 proto_tree_add_item(desc_tree
, hf_openflow_v6_group_desc_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5188 /* struct ofp_bucket buckets[0]; */
5189 while (offset
< desc_end
) {
5190 offset
= dissect_openflow_bucket_v6(tvb
, pinfo
, desc_tree
, offset
, length
);
5197 #define OFPGFC_SELECT_WEIGHT 1 << 0
5198 #define OFPGFC_SELECT_LIVENESS 1 << 1
5199 #define OFPGFC_CHAINING 1 << 2
5200 #define OFPGFC_CHAINING_CHECKS 1 << 3
5202 dissect_openflow_group_features_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5205 proto_tree
*types_tree
, *caps_tree
, *acts_tree
;
5207 /* uint32_t types; */
5208 ti
= proto_tree_add_item(tree
, hf_openflow_v6_group_features_types
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5209 types_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_group_features_types
);
5211 proto_tree_add_item(types_tree
, hf_openflow_v6_group_features_types_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5212 proto_tree_add_item(types_tree
, hf_openflow_v6_group_features_types_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5213 proto_tree_add_item(types_tree
, hf_openflow_v6_group_features_types_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5214 proto_tree_add_item(types_tree
, hf_openflow_v6_group_features_types_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5217 /* uint32_t capabilities; */
5218 ti
= proto_tree_add_item(tree
, hf_openflow_v6_group_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5219 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_group_features_capabilities
);
5221 proto_tree_add_item(caps_tree
, hf_openflow_v6_group_features_capabilities_select_weight
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5222 proto_tree_add_item(caps_tree
, hf_openflow_v6_group_features_capabilities_select_liveness
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5223 proto_tree_add_item(caps_tree
, hf_openflow_v6_group_features_capabilities_chaining
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5224 proto_tree_add_item(caps_tree
, hf_openflow_v6_group_features_capabilities_chaining_checks
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5227 /* max_groups[4]; */
5228 proto_tree_add_item(tree
, hf_openflow_v6_group_features_max_groups_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5230 proto_tree_add_item(tree
, hf_openflow_v6_group_features_max_groups_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5232 proto_tree_add_item(tree
, hf_openflow_v6_group_features_max_groups_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5234 proto_tree_add_item(tree
, hf_openflow_v6_group_features_max_groups_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5237 /* uint32_t actions[4]; */
5238 ti
= proto_tree_add_item(tree
, hf_openflow_v6_group_features_actions_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5239 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_group_features_actions_all
);
5241 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5242 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5243 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5244 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5245 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5246 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5247 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5248 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5249 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5250 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5251 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5252 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5253 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5254 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5255 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5256 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5257 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_copy_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5258 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_all_meter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5261 ti
= proto_tree_add_item(tree
, hf_openflow_v6_group_features_actions_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5262 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_group_features_actions_select
);
5264 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5265 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5266 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5267 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5268 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5269 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5270 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5271 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5272 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5273 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5274 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5275 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5276 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5277 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5278 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5279 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5280 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_copy_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5281 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_select_meter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5284 ti
= proto_tree_add_item(tree
, hf_openflow_v6_group_features_actions_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5285 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_group_features_actions_indirect
);
5287 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5288 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5289 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5290 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5291 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5292 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5293 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5294 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5295 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5296 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5297 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5298 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5299 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5300 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5301 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5302 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5303 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_copy_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5304 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_indirect_meter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5307 ti
= proto_tree_add_item(tree
, hf_openflow_v6_group_features_actions_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5308 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_group_features_actions_ff
);
5310 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5311 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5312 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5313 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5314 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5315 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5316 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5317 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5318 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5319 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5320 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5321 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5322 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5323 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5324 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5325 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5326 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_copy_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5327 proto_tree_add_item(acts_tree
, hf_openflow_v6_group_features_actions_ff_meter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5333 dissect_openflow_meter_band_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5335 proto_tree
*stats_tree
;
5337 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 16, ett_openflow_v6_meter_band_stats
, NULL
, "Meter band stats");
5339 /* uint64_t packet_band_count; */
5340 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_band_stats_packet_band_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5343 /* uint64_t byte_band_count; */
5344 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_band_stats_byte_band_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5352 dissect_openflow_meter_stats_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5355 proto_tree
*stats_tree
;
5359 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_meter_stats
, &ti
, "Meter stats");
5361 /* uint32_t meter_id; */
5362 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5366 stats_len
= tvb_get_ntohs(tvb
, offset
);
5367 stats_end
= offset
- 4 + stats_len
;
5368 proto_item_set_len(ti
, stats_len
);
5369 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5372 /* uint8_t pad[6]; */
5373 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_pad
, tvb
, offset
, 6, ENC_NA
);
5376 /* uint32_t flow_count; */
5377 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_flow_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5380 /* uint64_t packet_in_count; */
5381 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_packet_in_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5384 /* uint64_t byte_in_count; */
5385 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_byte_in_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5388 /* uint32_t duration_sec; */
5389 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5392 /* uint32_t duration_nsec; */
5393 proto_tree_add_item(stats_tree
, hf_openflow_v6_meter_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5396 /* struct ofp_meter_band_stats band_stats[0]; */
5397 while (offset
< stats_end
) {
5398 offset
= dissect_openflow_meter_band_stats_v6(tvb
, pinfo
, stats_tree
, offset
, length
);
5406 dissect_openflow_meter_desc_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5409 proto_tree
*conf_tree
, *flags_tree
;
5410 uint16_t config_len
;
5413 conf_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_meter_desc
, &ti
, "Meter desc");
5416 config_len
= tvb_get_ntohs(tvb
, offset
);
5417 config_end
= offset
+ config_len
;
5418 proto_item_set_len(ti
, config_len
);
5419 proto_tree_add_item(conf_tree
, hf_openflow_v6_meter_desc_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5422 /* uint16_t flags; */
5423 ti
= proto_tree_add_item(conf_tree
, hf_openflow_v6_meter_desc_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5424 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_meter_desc_flags
);
5426 proto_tree_add_item(flags_tree
, hf_openflow_v6_meter_desc_flags_kbps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5427 proto_tree_add_item(flags_tree
, hf_openflow_v6_meter_desc_flags_pktps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5428 proto_tree_add_item(flags_tree
, hf_openflow_v6_meter_desc_flags_burst
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5429 proto_tree_add_item(flags_tree
, hf_openflow_v6_meter_desc_flags_stats
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5432 /* uint32_t meter_id; */
5433 proto_tree_add_item(conf_tree
, hf_openflow_v6_meter_desc_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5436 /* struct ofp_meter_band_header bands[0]; */
5437 while (offset
< config_end
) {
5438 offset
= dissect_openflow_meter_band_v6(tvb
, pinfo
, conf_tree
, offset
, length
);
5445 #define OFPMF_KBPS 1 << 0
5446 #define OFPMF_PKTPS 1 << 1
5447 #define OFPMF_BURST 1 << 2
5448 #define OFPMF_STATS 1 << 3
5450 dissect_openflow_meter_features_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5453 proto_tree
*bands_tree
, *caps_tree
;
5455 /* uint32_t max_meter; */
5456 proto_tree_add_item(tree
, hf_openflow_v6_meter_features_max_meter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5459 /* uint32_t band_types; */
5460 ti
= proto_tree_add_item(tree
, hf_openflow_v6_meter_features_band_types
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5461 bands_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_meter_features_band_types
);
5463 proto_tree_add_item(bands_tree
, hf_openflow_v6_meter_features_band_types_drop
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5464 proto_tree_add_item(bands_tree
, hf_openflow_v6_meter_features_band_types_dscp_remark
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5467 /* uint32_t capabilities; */
5468 ti
= proto_tree_add_item(tree
, hf_openflow_v6_meter_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5469 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_meter_features_capabilities
);
5471 proto_tree_add_item(caps_tree
, hf_openflow_v6_meter_features_capabilities_kbps
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5472 proto_tree_add_item(caps_tree
, hf_openflow_v6_meter_features_capabilities_pktps
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5473 proto_tree_add_item(caps_tree
, hf_openflow_v6_meter_features_capabilities_burst
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5474 proto_tree_add_item(caps_tree
, hf_openflow_v6_meter_features_capabilities_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5477 /* uint8_t max_bands; */
5478 proto_tree_add_item(tree
, hf_openflow_v6_meter_features_max_bands
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5481 /* uint8_t max_color; */
5482 proto_tree_add_item(tree
, hf_openflow_v6_meter_features_max_color
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5485 /* uint8_t pad[2]; */
5486 proto_tree_add_item(tree
, hf_openflow_v6_meter_features_pad
, tvb
, offset
, 2, ENC_NA
);
5492 #define OFPQDP_MIN_RATE_MAX 1000
5493 static const value_string openflow_v6_queue_desc_prop_min_rate_reserved_values
[] = {
5494 { 0xffff, "OFPQDP_MIN_RATE_UNCFG" },
5498 #define OFPQDP_MAX_RATE_MAX 1000
5499 static const value_string openflow_v6_queue_desc_prop_max_rate_reserved_values
[] = {
5500 { 0xffff, "OFPQDP_MAX_RATE_UNCFG" },
5504 #define OFPQDPT_MIN_RATE 1
5505 #define OFPQDPT_MAX_RATE 2
5506 #define OFPQDPT_EXPERIMENTER 0xffff
5507 static const value_string openflow_v6_queue_desc_prop_property_values
[] = {
5508 { OFPQDPT_MIN_RATE
, "OFPQDPT_MIN_RATE" },
5509 { OFPQDPT_MAX_RATE
, "OFPQDPT_MAX_RATE" },
5510 { OFPQDPT_EXPERIMENTER
, "OFPQDPT_EXPERIMENTER" },
5515 dissect_openflow_queue_desc_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5518 proto_tree
*prop_tree
;
5522 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_queue_desc_prop
, &ti
, "Queue property");
5524 /* uint16_t property; */
5525 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_queue_desc_prop_property
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
5529 prop_len
= tvb_get_ntohs(tvb
, offset
);
5530 proto_item_set_len(ti
, prop_len
);
5531 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5534 /* uint8_t pad[4]; */
5535 proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_pad
, tvb
, offset
, 4, ENC_NA
);
5539 expert_add_info(pinfo
, ti
, &ei_openflow_v6_length_too_short
);
5543 switch (prop_type
) {
5544 case OFPQDPT_MIN_RATE
:
5545 /* uint16_t rate; */
5546 proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_min_rate_rate
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5549 /* uint8_t pad[6]; */
5550 proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_min_rate_pad
, tvb
, offset
, 6, ENC_NA
);
5554 case OFPQDPT_MAX_RATE
:
5555 /* uint16_t rate; */
5556 proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_max_rate_rate
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5559 /* uint8_t pad[6]; */
5560 proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_max_rate_pad
, tvb
, offset
, 6, ENC_NA
);
5564 case OFPQDPT_EXPERIMENTER
:
5565 if (prop_len
<= 16) {
5566 expert_add_info(pinfo
, ti
, &ei_openflow_v6_length_too_short
);
5570 /* uint32_t experimenter; */
5571 proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5574 /* uint32_t exp_type; */
5575 proto_tree_add_item(prop_tree
, hf_openflow_v6_queue_desc_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5578 /* uint8_t experimenter_data[0]; */
5579 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_queue_desc_prop_undecoded
,
5580 tvb
, offset
, prop_len
- 16, "Experimenter queue property body.");
5581 offset
+=prop_len
-16;
5585 if (prop_len
<= 8) {
5586 expert_add_info(pinfo
, ti
, &ei_openflow_v6_length_too_short
);
5590 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_queue_desc_prop_undecoded
,
5591 tvb
, offset
, prop_len
- 8, "Unknown queue property body.");
5601 #define OFPQ_ALL 0xffffffff
5603 static const value_string openflow_v6_queue_id_reserved_values
[] = {
5604 { OFPQ_ALL
, "OFPQ_ALL" },
5610 dissect_openflow_queue_desc_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5612 proto_tree
*desc_tree
;
5616 desc_len
= tvb_get_ntohs(tvb
, offset
+ 8);
5617 desc_end
= offset
+ desc_len
;
5619 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, desc_len
, ett_openflow_v6_queue_desc
, NULL
, "Queue desc");
5621 /* uint32_t port_no; */
5622 proto_tree_add_item(tree
, hf_openflow_v6_queue_desc_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5625 /* uint32_t queue_id; */
5626 proto_tree_add_item(desc_tree
, hf_openflow_v6_queue_desc_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5630 proto_tree_add_item(desc_tree
, hf_openflow_v6_queue_desc_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5632 /* uint8_t pad[6]; */
5633 proto_tree_add_item(desc_tree
, hf_openflow_v6_queue_desc_pad
, tvb
, offset
, 6, ENC_NA
);
5636 /* struct ofp_queue_desc_prop_header properties[0]; */
5637 while (offset
< desc_end
) {
5638 offset
= dissect_openflow_queue_desc_prop_v6(tvb
, pinfo
, desc_tree
, offset
, length
);
5645 #define OFPCSPT_URI 0
5646 #define OFPCSPT_EXPERIMENTER 0xFFFF
5647 static const value_string openflow_v6_controller_status_prop_type_values
[] = {
5648 { OFPCSPT_URI
, "OFPCSPT_URI" },
5649 { OFPCSPT_EXPERIMENTER
, "OFPCSPT_EXPERIMENTER" },
5655 dissect_openflow_controller_status_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5658 proto_tree
*prop_tree
;
5660 uint32_t prop_length
;
5662 uint16_t pad_length
;
5664 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_controller_status_prop
, &ti
, "Controller status property");
5666 /* uint16_t type; */
5667 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_controller_status_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
5670 /* uint16_t length; */
5671 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_controller_status_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_length
);
5672 proto_item_set_len(ti
, prop_length
);
5675 if (prop_length
< 4) {
5679 body_end
= offset
+ prop_length
- 4;
5682 switch (prop_type
) {
5684 /* uint8_t uri[0]; */
5685 proto_tree_add_item(tree
, hf_openflow_v6_controller_status_prop_uri
, tvb
, offset
, prop_length
- 4, ENC_ASCII
);
5688 case OFPCSPT_EXPERIMENTER
:
5689 /* uint32_t experimenter; */
5690 proto_tree_add_item(prop_tree
, hf_openflow_v6_controller_status_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5693 /* uint32_t exp_type; */
5694 proto_tree_add_item(prop_tree
, hf_openflow_v6_controller_status_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5697 /* uint32_t experimenter_data[0]; */
5698 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_controller_status_prop_undecoded
,
5699 tvb
, offset
, body_end
- offset
, "Experimenter controller property body.");
5704 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_controller_status_prop_undecoded
,
5705 tvb
, offset
, body_end
- offset
, "Unknown controller property body.");
5710 pad_length
= (prop_length
+ 7)/8*8 - prop_length
;
5711 if (pad_length
> 0) {
5712 proto_tree_add_item(prop_tree
, hf_openflow_v6_controller_status_prop_pad
, tvb
, offset
, pad_length
, ENC_NA
);
5719 #define OFPCSR_REQUEST 0
5720 #define OFPCSR_CHANNEL_STATUS 1
5721 #define OFPCSR_ROLE 2
5722 #define OFPCSR_CONTROLLER_ADDED 3
5723 #define OFPCSR_CONTROLLER_REMOVED 4
5724 #define OFPCSR_SHORT_ID 5
5725 #define OFPCSR_EXPERIMENTER 6
5726 static const value_string openflow_v6_controller_status_reason_values
[] = {
5727 { OFPCSR_REQUEST
, "OFPCSR_REQUEST" },
5728 { OFPCSR_CHANNEL_STATUS
, "OFPCSR_CHANNEL_STATUS" },
5729 { OFPCSR_ROLE
, "OFPCSR_ROLE" },
5730 { OFPCSR_CONTROLLER_ADDED
, "OFPCSR_CONTROLLER_ADDED" },
5731 { OFPCSR_CONTROLLER_REMOVED
, "OFPCSR_CONTROLLER_REMOVED" },
5732 { OFPCSR_SHORT_ID
, "OFPCSR_SHORT_ID" },
5733 { OFPCSR_EXPERIMENTER
, "OFPCSR_EXPERIMENTER" },
5737 #define OFPCT_STATUS_UP 0
5738 #define OFPCT_STATUS_DOWN 1
5739 static const value_string openflow_v6_controller_status_channel_status_values
[] = {
5740 { OFPCT_STATUS_UP
, "OFPCT_STATUS_UP" },
5741 { OFPCT_STATUS_DOWN
, "OFPCT_STATUS_DOWN" },
5746 dissect_openflow_controller_status_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5748 /* uint16_t length; */
5749 proto_tree_add_item(tree
, hf_openflow_v6_controller_status_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5752 /* uint16_t short_id; */
5753 proto_tree_add_item(tree
, hf_openflow_v6_controller_status_short_id
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5756 /* uint32_t role; */
5757 proto_tree_add_item(tree
, hf_openflow_v6_controller_status_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5760 /* uint8_t reason; */
5761 proto_tree_add_item(tree
, hf_openflow_v6_controller_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5764 /* uint8_t channel_status; */
5765 proto_tree_add_item(tree
, hf_openflow_v6_controller_status_channel_status
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5768 /* uint8_t pad[6]; */
5769 proto_tree_add_item(tree
, hf_openflow_v6_controller_status_pad
, tvb
, offset
, 6, ENC_NA
);
5772 /* struct ofp_controller_status_prop_header properties[0]; */
5773 // XXX Should it be a while loop?
5774 dissect_openflow_controller_status_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
5779 #define OFPFME_INITIAL 0
5780 #define OFPFME_ADDED 1
5781 #define OFPFME_REMOVED 2
5782 #define OFPFME_MODIFIED 3
5783 #define OFPFME_ABBREV 4
5784 #define OFPFME_PAUSED 5
5785 #define OFPFME_RESUMED 6
5786 static const value_string openflow_v6_flow_monitor_events
[] = {
5787 { OFPFME_INITIAL
, "OFPFME_INITIAL" },
5788 { OFPFME_ADDED
, "OFPFME_ADDED" },
5789 { OFPFME_REMOVED
, "OFPFME_REMOVED" },
5790 { OFPFME_MODIFIED
, "OFPFME_MODIFIED" },
5791 { OFPFME_ABBREV
, "OFPFME_ABBREV" },
5792 { OFPFME_PAUSED
, "OFPFME_PAUSED" },
5793 { OFPFME_RESUMED
, "OFPFME_RESUMED" },
5798 dissect_openflow_flow_update_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5800 proto_tree
*update_tree
;
5801 uint32_t update_len
;
5802 uint32_t update_event
;
5806 update_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_flow_update
, &ti
, "Flow update");
5808 /* uint16_t length; */
5809 proto_tree_add_item_ret_uint(update_tree
, hf_openflow_v6_flow_update_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &update_len
);
5810 update_end
= offset
+ update_len
;
5811 proto_item_set_len(ti
, update_len
);
5814 /* uint16_t event; */
5815 ti
= proto_tree_add_item_ret_uint(update_tree
, hf_openflow_v6_flow_update_event
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &update_event
);
5818 if (update_len
< 4) {
5819 expert_add_info(pinfo
, ti
, &ei_openflow_v6_length_too_short
);
5823 switch (update_event
) {
5824 case OFPFME_INITIAL
:
5826 case OFPFME_REMOVED
:
5827 case OFPFME_MODIFIED
:
5828 /* uint8_t table_id; */
5829 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5832 if (update_event
== OFPFME_REMOVED
) {
5833 /* uint8_t reason; */
5834 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5837 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_zero
, tvb
, offset
, 1, ENC_NA
);
5841 /* uint16_t idle_timeout; */
5842 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5845 /* uint16_t hard_timeout; */
5846 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5849 /* uint16_t priority; */
5850 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5853 /* uint8_t zeros[4]; */
5854 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_zeros
, tvb
, offset
, 4, ENC_NA
);
5857 /* uint64_t cookie; */
5858 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_full_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5861 /* struct ofp_match match; */
5862 offset
= dissect_openflow_match_v6(tvb
, pinfo
, update_tree
, offset
, length
);
5864 /* struct ofp_instruction instructions[0]; */
5865 while (offset
< update_end
) {
5866 offset
= dissect_openflow_instruction_v6(tvb
, pinfo
, update_tree
, offset
, length
);
5872 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_abbrev_xid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5877 case OFPFME_RESUMED
:
5878 /* uint8_t zeros[4]; */
5879 proto_tree_add_item(update_tree
, hf_openflow_v6_flow_update_paused_zeros
, tvb
, offset
, 4, ENC_NA
);
5884 proto_tree_add_expert_format(update_tree
, pinfo
, &ei_openflow_v6_flow_update_undecoded
,
5885 tvb
, offset
, update_len
- 4, "Unknown flow update body.");
5886 offset
+=update_len
-4;
5895 #define OFPMPF_REPLY_MORE 1 << 0
5897 dissect_openflow_multipart_reply_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
5900 proto_tree
*flags_tree
;
5903 /* uint16_t type; */
5904 proto_tree_add_item_ret_uint(tree
, hf_openflow_v6_multipart_reply_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &type
);
5907 /* uint16_t flags; */
5908 ti
= proto_tree_add_item(tree
, hf_openflow_v6_multipart_reply_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5909 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_multipart_reply_flags
);
5911 proto_tree_add_item(flags_tree
, hf_openflow_v6_multipart_reply_flags_more
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5914 /* uint8_t pad[4]; */
5915 proto_tree_add_item(tree
, hf_openflow_v6_multipart_reply_pad
, tvb
, offset
, 4, ENC_NA
);
5920 dissect_openflow_switch_description_v6(tvb
, pinfo
, tree
, offset
, length
);
5922 case OFPMP_FLOW_DESC
:
5923 dissect_openflow_flow_desc_v6(tvb
, pinfo
, tree
, offset
, length
);
5925 case OFPMP_AGGREGATE_STATS
:
5926 dissect_openflow_aggregate_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
5928 case OFPMP_TABLE_STATS
:
5929 while (offset
< length
) {
5930 offset
= dissect_openflow_table_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
5933 case OFPMP_PORT_STATS
:
5934 while (offset
< length
) {
5935 offset
= dissect_openflow_port_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
5938 case OFPMP_QUEUE_STATS
:
5939 while (offset
< length
) {
5940 offset
= dissect_openflow_queue_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
5943 case OFPMP_GROUP_STATS
:
5944 while (offset
< length
) {
5945 offset
= dissect_openflow_group_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
5948 case OFPMP_GROUP_DESC
:
5949 while (offset
< length
) {
5950 offset
= dissect_openflow_group_desc_v6(tvb
, pinfo
, tree
, offset
, length
);
5953 case OFPMP_GROUP_FEATURES
:
5954 dissect_openflow_group_features_v6(tvb
, pinfo
, tree
, offset
, length
);
5956 case OFPMP_METER_STATS
:
5957 while (offset
< length
) {
5958 offset
= dissect_openflow_meter_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
5961 case OFPMP_METER_DESC
:
5962 while (offset
< length
) {
5963 offset
= dissect_openflow_meter_desc_v6(tvb
, pinfo
, tree
, offset
, length
);
5966 case OFPMP_METER_FEATURES
:
5967 dissect_openflow_meter_features_v6(tvb
, pinfo
, tree
, offset
, length
);
5969 case OFPMP_TABLE_FEATURES
:
5970 while (offset
< length
) {
5971 offset
= dissect_openflow_table_features_v6(tvb
, pinfo
, tree
, offset
, length
);
5974 case OFPMP_PORT_DESC
:
5975 while (offset
< length
) {
5976 offset
= dissect_openflow_port_v6(tvb
, pinfo
, tree
, offset
, length
);
5979 case OFPMP_TABLE_DESC
:
5980 while (offset
< length
) {
5981 offset
= dissect_openflow_table_desc_v6(tvb
, pinfo
, tree
, offset
, length
);
5984 case OFPMP_QUEUE_DESC
:
5985 while (offset
< length
) {
5986 offset
= dissect_openflow_queue_desc_v6(tvb
, pinfo
, tree
, offset
, length
);
5989 case OFPMP_FLOW_MONITOR
:
5990 while (offset
< length
) {
5991 offset
= dissect_openflow_flow_update_v6(tvb
, pinfo
, tree
, offset
, length
);
5994 case OFPMP_FLOW_STATS
:
5995 while (offset
< length
) {
5996 offset
= dissect_openflow_flow_stats_v6(tvb
, pinfo
, tree
, offset
, length
);
5999 case OFPMP_CONTROLLER_STATUS
:
6000 dissect_openflow_controller_status_v6(tvb
, pinfo
, tree
, offset
, length
);
6003 case OFPMP_EXPERIMENTER
:
6004 /* uint32_t experimenter; */
6005 proto_tree_add_item(tree
, hf_openflow_v6_multipart_reply_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6008 /* uint32_t exp_type; */
6009 proto_tree_add_item(tree
, hf_openflow_v6_multipart_reply_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6012 /* uint32_t experimenter_data[0]; */
6013 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_multipart_reply_undecoded
,
6014 tvb
, offset
, length
- 16, "Experimenter multipart reply body.");
6018 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_multipart_reply_undecoded
,
6019 tvb
, offset
, length
- 8, "Unknown multipart reply body.");
6027 dissect_openflow_queue_get_config_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6029 /* uint32_t port; */
6030 proto_tree_add_item(tree
, hf_openflow_v6_queue_get_config_request_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6033 /* uint8_t pad[4]; */
6034 proto_tree_add_item(tree
, hf_openflow_v6_queue_get_config_request_pad
, tvb
, offset
, 4, ENC_NA
);
6041 static const value_string openflow_v6_controller_role_values
[] = {
6042 { 0, "OFPCR_ROLE_NOCHANGE" },
6043 { 1, "OFPCR_ROLE_EQUAL" },
6044 { 2, "OFPCR_ROLE_MASTER" },
6045 { 3, "OFPCR_ROLE_SLAVE" },
6050 dissect_openflow_role_request_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6052 /* uint32_t role; */
6053 proto_tree_add_item(tree
, hf_openflow_v6_role_request_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6056 /* uint8_t pad[4]; */
6057 proto_tree_add_item(tree
, hf_openflow_v6_role_request_pad
, tvb
, offset
, 4, ENC_NA
);
6060 /* uint64_t generation_id; */
6061 proto_tree_add_item(tree
, hf_openflow_v6_role_request_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
6067 dissect_openflow_role_reply_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6069 /* uint32_t role; */
6070 proto_tree_add_item(tree
, hf_openflow_v6_role_reply_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6073 /* uint8_t pad[4]; */
6074 proto_tree_add_item(tree
, hf_openflow_v6_role_reply_pad
, tvb
, offset
, 4, ENC_NA
);
6077 /* uint64_t generation_id; */
6078 proto_tree_add_item(tree
, hf_openflow_v6_role_reply_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
6084 #define OFPACPT_PACKET_IN_SLAVE 0
6085 #define OFPACPT_PACKET_IN_MASTER 1
6086 #define OFPACPT_PORT_STATUS_SLAVE 2
6087 #define OFPACPT_PORT_STATUS_MASTER 3
6088 #define OFPACPT_FLOW_REMOVED_SLAVE 4
6089 #define OFPACPT_FLOW_REMOVED_MASTER 5
6090 #define OFPACPT_ROLE_STATUS_SLAVE 6
6091 #define OFPACPT_ROLE_STATUS_MASTER 7
6092 #define OFPACPT_TABLE_STATUS_SLAVE 8
6093 #define OFPACPT_TABLE_STATUS_MASTER 9
6094 #define OFPACPT_REQUESTFORWARD_SLAVE 10
6095 #define OFPACPT_REQUESTFORWARD_MASTER 11
6096 #define OFPACPT_EXPERIMENTER_SLAVE 0xFFFE
6097 #define OFPACPT_EXPERIMENTER_MASTER 0xFFFF
6098 static const value_string openflow_v6_async_config_prop_type_values
[] = {
6099 { OFPACPT_PACKET_IN_SLAVE
, "OFPACPT_PACKET_IN_SLAVE" },
6100 { OFPACPT_PACKET_IN_MASTER
, "OFPACPT_PACKET_IN_MASTER" },
6101 { OFPACPT_PORT_STATUS_SLAVE
, "OFPACPT_PORT_STATUS_SLAVE" },
6102 { OFPACPT_PORT_STATUS_MASTER
, "OFPACPT_PORT_STATUS_MASTER" },
6103 { OFPACPT_FLOW_REMOVED_SLAVE
, "OFPACPT_FLOW_REMOVED_SLAVE" },
6104 { OFPACPT_FLOW_REMOVED_MASTER
, "OFPACPT_FLOW_REMOVED_MASTER" },
6105 { OFPACPT_ROLE_STATUS_SLAVE
, "OFPACPT_ROLE_STATUS_SLAVE" },
6106 { OFPACPT_ROLE_STATUS_MASTER
, "OFPACPT_ROLE_STATUS_MASTER" },
6107 { OFPACPT_TABLE_STATUS_SLAVE
, "OFPACPT_TABLE_STATUS_SLAVE" },
6108 { OFPACPT_TABLE_STATUS_MASTER
, "OFPACPT_TABLE_STATUS_MASTER" },
6109 { OFPACPT_REQUESTFORWARD_SLAVE
, "OFPACPT_REQUESTFORWARD_SLAVE" },
6110 { OFPACPT_REQUESTFORWARD_MASTER
, "OFPACPT_REQUESTFORWARD_MASTER" },
6111 { OFPACPT_EXPERIMENTER_SLAVE
, "OFPACPT_EXPERIMENTER_SLAVE" },
6112 { OFPACPT_EXPERIMENTER_MASTER
, "OFPACPT_EXPERIMENTER_MASTER" },
6116 #define OFPRFR_GROUP_MOD 0
6117 #define OFPRFR_METER_MOD 1
6119 dissect_openflow_async_config_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6121 proto_item
*ti
, *prop_item
;
6122 proto_tree
*prop_tree
, *pi_tree
, *ps_tree
, *fr_tree
, *rs_tree
, *ts_tree
, *rf_tree
;
6126 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_async_config_prop
, &ti
, "Async config prop");
6128 /* uint16_t type; */
6129 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_async_config_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
6132 /* uint16_t length; */
6133 prop_item
= proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_async_config_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_len
);
6134 proto_item_set_len(ti
, prop_len
);
6137 switch (prop_type
) {
6138 case OFPACPT_PACKET_IN_SLAVE
:
6139 case OFPACPT_PACKET_IN_MASTER
:
6140 /* uint32_t mask; */
6141 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_reason_packet_in_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6142 pi_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_async_config_prop_reason_packet_in_mask
);
6144 proto_tree_add_item(pi_tree
, hf_openflow_v6_async_config_prop_reason_packet_in_mask_table_miss
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6145 proto_tree_add_item(pi_tree
, hf_openflow_v6_async_config_prop_reason_packet_in_mask_apply_action
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6146 proto_tree_add_item(pi_tree
, hf_openflow_v6_async_config_prop_reason_packet_in_mask_invalid_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6147 proto_tree_add_item(pi_tree
, hf_openflow_v6_async_config_prop_reason_packet_in_mask_action_set
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6148 proto_tree_add_item(pi_tree
, hf_openflow_v6_async_config_prop_reason_packet_in_mask_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6149 proto_tree_add_item(pi_tree
, hf_openflow_v6_async_config_prop_reason_packet_in_mask_packet_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6153 case OFPACPT_PORT_STATUS_SLAVE
:
6154 case OFPACPT_PORT_STATUS_MASTER
:
6155 /* uint32_t mask; */
6156 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_reason_port_status_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6157 ps_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_async_config_prop_reason_port_status_mask
);
6159 proto_tree_add_item(ps_tree
, hf_openflow_v6_async_config_prop_reason_port_status_mask_add
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6160 proto_tree_add_item(ps_tree
, hf_openflow_v6_async_config_prop_reason_port_status_mask_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6161 proto_tree_add_item(ps_tree
, hf_openflow_v6_async_config_prop_reason_port_status_mask_modify
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6165 case OFPACPT_FLOW_REMOVED_SLAVE
:
6166 case OFPACPT_FLOW_REMOVED_MASTER
:
6167 /* uint32_t mask; */
6168 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_reason_flow_removed_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6169 fr_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_async_config_prop_reason_flow_removed_mask
);
6171 proto_tree_add_item(fr_tree
, hf_openflow_v6_async_config_prop_reason_flow_removed_mask_idle_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6172 proto_tree_add_item(fr_tree
, hf_openflow_v6_async_config_prop_reason_flow_removed_mask_hard_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6173 proto_tree_add_item(fr_tree
, hf_openflow_v6_async_config_prop_reason_flow_removed_mask_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6174 proto_tree_add_item(fr_tree
, hf_openflow_v6_async_config_prop_reason_flow_removed_mask_group_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6175 proto_tree_add_item(fr_tree
, hf_openflow_v6_async_config_prop_reason_flow_removed_mask_meter_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6176 proto_tree_add_item(fr_tree
, hf_openflow_v6_async_config_prop_reason_flow_removed_mask_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6180 case OFPACPT_ROLE_STATUS_SLAVE
:
6181 case OFPACPT_ROLE_STATUS_MASTER
:
6182 /* uint32_t mask; */
6183 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_reason_role_status_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6184 rs_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_async_config_prop_reason_role_status_mask
);
6186 proto_tree_add_item(rs_tree
, hf_openflow_v6_async_config_prop_reason_role_status_mask_master_request
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6187 proto_tree_add_item(rs_tree
, hf_openflow_v6_async_config_prop_reason_role_status_mask_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6188 proto_tree_add_item(rs_tree
, hf_openflow_v6_async_config_prop_reason_role_status_mask_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6192 case OFPACPT_TABLE_STATUS_SLAVE
:
6193 case OFPACPT_TABLE_STATUS_MASTER
:
6194 /* uint32_t mask; */
6195 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_reason_table_status_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6196 ts_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_async_config_prop_reason_table_status_mask
);
6198 proto_tree_add_item(ts_tree
, hf_openflow_v6_async_config_prop_reason_table_status_mask_vacancy_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6199 proto_tree_add_item(ts_tree
, hf_openflow_v6_async_config_prop_reason_table_status_mask_vacancy_up
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6203 case OFPACPT_REQUESTFORWARD_SLAVE
:
6204 case OFPACPT_REQUESTFORWARD_MASTER
:
6205 /* uint32_t mask; */
6206 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_reason_requestforward_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6207 rf_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_async_config_prop_reason_requestforward_mask
);
6209 proto_tree_add_item(rf_tree
, hf_openflow_v6_async_config_prop_reason_requestforward_mask_group_mod
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6210 proto_tree_add_item(rf_tree
, hf_openflow_v6_async_config_prop_reason_requestforward_mask_meter_mod
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6214 case OFPACPT_EXPERIMENTER_SLAVE
:
6215 case OFPACPT_EXPERIMENTER_MASTER
:
6216 if (prop_len
<= 12) {
6217 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
6221 /* uint32_t experimenter; */
6222 proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6225 /* uint32_t exp_type; */
6226 proto_tree_add_item(prop_tree
, hf_openflow_v6_async_config_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6229 /* uint32_t experimenter_data[0]; */
6230 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_async_config_prop_undecoded
,
6231 tvb
, offset
, prop_len
- 12, "Experimenter async config prop body.");
6232 offset
+= prop_len
- 12;
6236 if (prop_len
<= 4) {
6237 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
6241 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v6_async_config_prop_undecoded
,
6242 tvb
, offset
, prop_len
- 4, "Unknown async config prop body.");
6243 offset
+= prop_len
- 4;
6252 dissect_openflow_async_config_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6254 /* struct ofp_async_config_prop_header properties[0]; */
6255 while (offset
< length
) {
6256 offset
= dissect_openflow_async_config_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
6262 static const value_string openflow_v6_metermod_command_values
[] = {
6264 { 1, "OFPMC_MODIFY" },
6265 { 2, "OFPMC_DELETE" },
6270 dissect_openflow_metermod_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6273 proto_tree
*flags_tree
;
6275 /* uint16_t command; */
6276 proto_tree_add_item(tree
, hf_openflow_v6_metermod_command
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6279 /* uint16_t flags; */
6280 ti
= proto_tree_add_item(tree
, hf_openflow_v6_metermod_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6281 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_metermod_flags
);
6283 proto_tree_add_item(flags_tree
, hf_openflow_v6_metermod_flags_kbps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6284 proto_tree_add_item(flags_tree
, hf_openflow_v6_metermod_flags_pktps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6285 proto_tree_add_item(flags_tree
, hf_openflow_v6_metermod_flags_burst
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6286 proto_tree_add_item(flags_tree
, hf_openflow_v6_metermod_flags_stats
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6289 /* uint32_t meter_id; */
6290 proto_tree_add_item(tree
, hf_openflow_v6_metermod_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6293 /* struct ofp_meter_band_header bands[0]; */
6294 while (offset
< length
) {
6295 offset
= dissect_openflow_meter_band_v6(tvb
, pinfo
, tree
, offset
, length
);
6299 #define OFPCRR_MASTER_REQUEST 0
6300 #define OFPCRR_CONFIG 1
6301 #define OFPCRR_EXPERIMENTER 2
6302 static const value_string openflow_v6_role_status_reason_values
[] = {
6303 { OFPCRR_MASTER_REQUEST
, "OFPCRR_MASTER_REQUEST" },
6304 { OFPCRR_CONFIG
, "OFPCRR_CONFIG" },
6305 { OFPCRR_EXPERIMENTER
, "OFPCRR_EXPERIMENTER" },
6310 dissect_openflow_role_status_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6312 /* uint32_t role; */
6313 proto_tree_add_item(tree
, hf_openflow_v6_role_status_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6316 /* uint8_t reason; */
6317 proto_tree_add_item(tree
, hf_openflow_v6_role_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
6320 /* uint8_t pad[3]; */
6321 proto_tree_add_item(tree
, hf_openflow_v6_role_status_pad
, tvb
, offset
, 3, ENC_NA
);
6324 /* uint64_t generation_id; */
6325 proto_tree_add_item(tree
, hf_openflow_v6_role_status_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
6331 #define OFPTR_VACANCY_DOWN 3
6332 #define OFPTR_VACANCY_UP 4
6333 static const value_string openflow_v6_table_status_reason_values
[] = {
6334 { OFPTR_VACANCY_DOWN
, "OFPTR_VACANCY_DOWN" },
6335 { OFPTR_VACANCY_UP
, "OFPTR_VACANCY_UP" },
6340 dissect_openflow_table_status_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6342 /* uint8_t reason; */
6343 proto_tree_add_item(tree
, hf_openflow_v6_table_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
6346 /* uint8_t pad[7]; */
6347 proto_tree_add_item(tree
, hf_openflow_v6_table_status_pad
, tvb
, offset
, 7, ENC_NA
);
6350 /* struct ofp_table_desc table; */
6351 dissect_openflow_table_desc_v6(tvb
, pinfo
, tree
, offset
, length
);
6355 // NOLINTNEXTLINE(misc-no-recursion)
6356 dissect_openflow_requestforward_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6359 proto_tree
*req_tree
;
6362 /* struct ofp_header request; */
6363 req_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_requestforward_request
, &ti
, "Request");
6366 offset
= dissect_openflow_message_v6(tvb
, pinfo
, req_tree
, offset
);
6368 proto_item_set_len(ti
, offset
- req_begin
);
6372 #define OFPBPT_TIME 0x0001
6373 #define OFPBPT_EXPERIMENTER 0xFFFF
6374 static const value_string openflow_v6_bundle_prop_type_values
[] = {
6375 { OFPBPT_TIME
, "OFPBPT_TIME" },
6376 { OFPBPT_EXPERIMENTER
, "OFPBPT_EXPERIMENTER" },
6381 dissect_openflow_bundle_prop_v6(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
, uint16_t length
)
6383 proto_tree
*prop_tree
;
6384 proto_item
*prop_item
, *ti
;
6388 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_bundle_prop
, &ti
, "Bundle prop");
6390 /* uint16_t type; */
6391 proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_bundle_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_type
);
6394 /* uint16_t length; */
6395 prop_item
= proto_tree_add_item_ret_uint(prop_tree
, hf_openflow_v6_bundle_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &prop_len
);
6396 proto_item_set_len(ti
, prop_len
);
6399 switch (prop_type
) {
6401 dissect_openflow_time_v6(tvb
, pinfo
, tree
, offset
, length
);
6402 offset
+= prop_len
- 4;
6404 case OFPBPT_EXPERIMENTER
:
6405 if (prop_len
<= 12) {
6406 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
6410 /* uint32_t experimenter; */
6411 proto_tree_add_item(tree
, hf_openflow_v6_bundle_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6414 /* uint32_t exp_type; */
6415 proto_tree_add_item(tree
, hf_openflow_v6_bundle_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6418 /* uint32_t experimenter_data[0]; */
6419 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_bundle_prop_undecoded
,
6420 tvb
, offset
, prop_len
- 12, "Experimenter bundle prop body.");
6421 offset
+= prop_len
- 12;
6425 if (prop_len
<= 4) {
6426 expert_add_info(pinfo
, prop_item
, &ei_openflow_v6_length_too_short
);
6430 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_bundle_prop_undecoded
,
6431 tvb
, offset
, prop_len
- 4, "Unknown bundle prop body.");
6432 offset
+= prop_len
- 4;
6441 static const value_string openflow_v6_bundle_control_type_values
[] = {
6442 { 0, "OFPBCT_OPEN_REQUEST" },
6443 { 1, "OFPBCT_OPEN_REPLY" },
6444 { 2, "OFPBCT_CLOSE_REQUEST" },
6445 { 3, "OFPBCT_CLOSE_REPLY" },
6446 { 4, "OFPBCT_COMMIT_REQUEST" },
6447 { 5, "OFPBCT_COMMIT_REPLY" },
6448 { 6, "OFPBCT_DISCARD_REQUEST" },
6449 { 7, "OFPBCT_DISCARD_REPLY" },
6454 #define OFPBF_ATOMIC 1<<0
6455 #define OFPBF_ORDERED 1<<1
6457 static const value_string openflow_v6_bundle_control_flags
[] = {
6458 { OFPBF_ATOMIC
, "OFPBF_ATOMIC" },
6459 { OFPBF_ORDERED
, "OFPBF_ORDERED" },
6465 dissect_openflow_bundle_control_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6468 proto_tree
*flags_tree
;
6470 /* uint32_t bundle_id; */
6471 proto_tree_add_item(tree
, hf_openflow_v6_bundle_control_bundle_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6474 /* uint16_t type; */
6475 proto_tree_add_item(tree
, hf_openflow_v6_bundle_control_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6478 /* uint16_t flags; */
6479 ti
= proto_tree_add_item(tree
, hf_openflow_v6_bundle_control_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6480 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_bundle_control_flags
);
6482 proto_tree_add_item(flags_tree
, hf_openflow_v6_bundle_control_flags_atomic
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6483 proto_tree_add_item(flags_tree
, hf_openflow_v6_bundle_control_flags_ordered
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6486 /* struct ofp_bundle_prop_header properties[0]; */
6487 while (offset
< length
) {
6488 offset
= dissect_openflow_bundle_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
6495 // NOLINTNEXTLINE(misc-no-recursion)
6496 dissect_openflow_bundle_add_v6(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
6499 proto_tree
*flags_tree
, *msg_tree
;
6502 /* uint32_t bundle_id; */
6503 proto_tree_add_item(tree
, hf_openflow_v6_bundle_add_bundle_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
6507 proto_tree_add_item(tree
, hf_openflow_v6_bundle_add_pad
, tvb
, offset
, 2, ENC_NA
);
6510 /* uint16_t flags; */
6511 ti
= proto_tree_add_item(tree
, hf_openflow_v6_bundle_add_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6512 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v6_bundle_add_flags
);
6514 proto_tree_add_item(flags_tree
, hf_openflow_v6_bundle_add_flags_atomic
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6515 proto_tree_add_item(flags_tree
, hf_openflow_v6_bundle_add_flags_ordered
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
6518 /* struct ofp_header message; */
6519 msg_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v6_bundle_add_message
, &ti
, "Message");
6522 offset
= dissect_openflow_message_v6(tvb
, pinfo
, msg_tree
, offset
);
6523 proto_item_set_len(ti
, offset
- msg_begin
);
6525 /* struct ofp_bundle_prop_header properties[0]; */
6526 while (offset
< length
) {
6527 offset
= dissect_openflow_bundle_prop_v6(tvb
, pinfo
, tree
, offset
, length
);
6534 // NOLINTNEXTLINE(misc-no-recursion)
6535 dissect_openflow_message_v6(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
)
6541 type
= tvb_get_uint8(tvb
, offset
+ 1);
6542 length
= tvb_get_ntohs(tvb
, offset
+ 2);
6543 msg_end
= offset
+ length
;
6545 offset
= dissect_openflow_header_v6(tvb
, pinfo
, tree
, offset
, length
);
6549 dissect_openflow_hello_v6(tvb
, pinfo
, tree
, offset
, length
);
6552 dissect_openflow_error_v6(tvb
, pinfo
, tree
, offset
, length
);
6554 case OFPT_ECHO_REQUEST
:
6555 case OFPT_ECHO_REPLY
:
6556 dissect_openflow_echo_v6(tvb
, pinfo
, tree
, offset
, length
);
6558 case OFPT_EXPERIMENTER
:
6559 dissect_openflow_experimenter_v6(tvb
, pinfo
, tree
, offset
, length
);
6561 case OFPT_FEATURES_REQUEST
:
6562 /* message has no body */
6564 case OFPT_FEATURES_REPLY
:
6565 dissect_openflow_switch_features_v6(tvb
, pinfo
, tree
, offset
, length
);
6567 case OFPT_GET_CONFIG_REQUEST
:
6568 /* message has no body */
6570 case OFPT_GET_CONFIG_REPLY
:
6571 case OFPT_SET_CONFIG
:
6572 dissect_openflow_switch_config_v6(tvb
, pinfo
, tree
, offset
, length
);
6574 case OFPT_PACKET_IN
:
6575 dissect_openflow_packet_in_v6(tvb
, pinfo
, tree
, offset
, length
);
6577 case OFPT_FLOW_REMOVED
:
6578 dissect_openflow_flow_removed_v6(tvb
, pinfo
, tree
, offset
, length
);
6580 case OFPT_PORT_STATUS
:
6581 dissect_openflow_port_status_v6(tvb
, pinfo
, tree
, offset
, length
);
6583 case OFPT_PACKET_OUT
:
6584 dissect_openflow_packet_out_v6(tvb
, pinfo
, tree
, offset
, length
);
6587 dissect_openflow_flowmod_v6(tvb
, pinfo
, tree
, offset
, length
);
6589 case OFPT_GROUP_MOD
:
6590 dissect_openflow_groupmod_v6(tvb
, pinfo
, tree
, offset
, length
);
6593 dissect_openflow_portmod_v6(tvb
, pinfo
, tree
, offset
, length
);
6595 case OFPT_TABLE_MOD
:
6596 dissect_openflow_tablemod_v6(tvb
, pinfo
, tree
, offset
, length
);
6598 case OFPT_MULTIPART_REQUEST
:
6599 dissect_openflow_multipart_request_v6(tvb
, pinfo
, tree
, offset
, length
);
6601 case OFPT_MULTIPART_REPLY
:
6602 dissect_openflow_multipart_reply_v6(tvb
, pinfo
, tree
, offset
, length
);
6604 case OFPT_BARRIER_REQUEST
:
6605 case OFPT_BARRIER_REPLY
:
6606 /* message has no body */
6608 case OFPT_ROLE_REQUEST
:
6609 dissect_openflow_role_request_v6(tvb
, pinfo
, tree
, offset
, length
);
6611 case OFPT_ROLE_REPLY
:
6612 dissect_openflow_role_reply_v6(tvb
, pinfo
, tree
, offset
, length
);
6614 case OFPT_GET_ASYNC_REQUEST
:
6615 /* message has no body */
6617 case OFPT_GET_ASYNC_REPLY
:
6618 case OFPT_SET_ASYNC
:
6619 dissect_openflow_async_config_v6(tvb
, pinfo
, tree
, offset
, length
);
6621 case OFPT_METER_MOD
:
6622 dissect_openflow_metermod_v6(tvb
, pinfo
, tree
, offset
, length
);
6624 case OFPT_ROLE_STATUS
:
6625 dissect_openflow_role_status_v6(tvb
, pinfo
, tree
, offset
, length
);
6627 case OFPT_TABLE_STATUS
:
6628 dissect_openflow_table_status_v6(tvb
, pinfo
, tree
, offset
, length
);
6630 case OFPT_REQUESTFORWARD
:
6631 dissect_openflow_requestforward_v6(tvb
, pinfo
, tree
, offset
, length
);
6633 case OFPT_BUNDLE_CONTROL
:
6634 dissect_openflow_bundle_control_v6(tvb
, pinfo
, tree
, offset
, length
);
6636 case OFPT_BUNDLE_ADD_MESSAGE
:
6637 dissect_openflow_bundle_add_v6(tvb
, pinfo
, tree
, offset
, length
);
6639 case OFPT_CONTROLLER_STATUS
:
6640 dissect_openflow_controller_status_v6(tvb
, pinfo
, tree
, offset
, length
);
6645 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v6_message_undecoded
,
6646 tvb
, offset
, length
- 8, "Unknown message body.");
6657 dissect_openflow_v6(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
6660 proto_tree
*openflow_tree
;
6663 type
= tvb_get_uint8(tvb
, 1);
6665 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "Type: %s",
6666 val_to_str_ext_const(type
, &openflow_v6_type_values_ext
, "Unknown message type"));
6668 ti
= proto_tree_add_item(tree
, proto_openflow_v6
, tvb
, 0, -1, ENC_NA
);
6669 openflow_tree
= proto_item_add_subtree(ti
, ett_openflow_v6
);
6671 dissect_openflow_message_v6(tvb
, pinfo
, openflow_tree
, 0);
6673 return tvb_reported_length(tvb
);
6679 * Register the protocol with Wireshark.
6682 proto_register_openflow_v6(void)
6684 static hf_register_info hf
[] = {
6685 { &hf_openflow_v6_version
,
6686 { "Version", "openflow_v6.version",
6687 FT_UINT8
, BASE_HEX
, VALS(openflow_v6_version_values
), 0x0,
6690 { &hf_openflow_v6_type
,
6691 { "Type", "openflow_v6.type",
6692 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &openflow_v6_type_values_ext
, 0x0,
6695 { &hf_openflow_v6_xid
,
6696 { "Transaction ID", "openflow_v6.xid",
6697 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6700 { &hf_openflow_v6_length
,
6701 { "Length", "openflow_v6.length",
6702 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6705 { &hf_openflow_v6_oxm_class
,
6706 { "Class", "openflow_v6.oxm.class",
6707 FT_UINT16
, BASE_HEX
, VALS(openflow_v6_oxm_class_values
), 0x0,
6710 { &hf_openflow_v6_oxm_field
,
6711 { "Field", "openflow_v6.oxm.field",
6712 FT_UINT8
, BASE_DEC
, NULL
, OXM_FIELD_MASK
,
6715 { &hf_openflow_v6_oxm_field_basic
,
6716 { "Field", "openflow_v6.oxm.field",
6717 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &openflow_v6_oxm_basic_field_values_ext
, OXM_FIELD_MASK
,
6720 { &hf_openflow_v6_oxm_hm
,
6721 { "Has mask", "openflow_v6.oxm.hm",
6722 FT_BOOLEAN
, 8, NULL
, OXM_HM_MASK
,
6725 { &hf_openflow_v6_oxm_length
,
6726 { "Length", "openflow_v6.oxm.length",
6727 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6730 { &hf_openflow_v6_oxm_experimenter_experimenter
,
6731 { "Experimenter", "openflow_v6.oxm_experimenter.experimenter",
6732 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6735 { &hf_openflow_v6_oxm_experimenter_value
,
6736 { "Experimenter Value", "openflow_v6.oxm_experimenter.value",
6737 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6740 { &hf_openflow_v6_oxm_value
,
6741 { "Value", "openflow_v6.oxm.value",
6742 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6745 { &hf_openflow_v6_oxm_value_etheraddr
,
6746 { "Value", "openflow_v6.oxm.value_etheraddr",
6747 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
6750 { &hf_openflow_v6_oxm_value_ethertype
,
6751 { "Value", "openflow_v6.oxm.value_ethertype",
6752 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6755 { &hf_openflow_v6_oxm_value_vlan_present
,
6756 { "OFPVID_PRESENT", "openflow_v6.oxm.value_vlan_present",
6757 FT_BOOLEAN
, 16, NULL
, OFPVID_PRESENT
,
6760 { &hf_openflow_v6_oxm_value_vlan_vid
,
6761 { "Value", "openflow_v6.oxm.value_vlan_vid",
6762 FT_UINT16
, BASE_DEC
, NULL
, 0x0fff,
6765 { &hf_openflow_v6_oxm_value_ipv4addr
,
6766 { "Value", "openflow_v6.oxm.value_ipv4addr",
6767 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
6770 { &hf_openflow_v6_oxm_value_ipv6addr
,
6771 { "Value", "openflow_v6.oxm.value_ipv6addr",
6772 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
6775 { &hf_openflow_v6_oxm_value_ipproto
,
6776 { "Value", "openflow_v6.oxm.value_ipproto",
6777 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &ipproto_val_ext
, 0x0,
6780 { &hf_openflow_v6_oxm_value_uint16
,
6781 { "Value", "openflow_v6.oxm.value_uint16",
6782 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6785 { &hf_openflow_v6_oxm_value_uint24
,
6786 { "Value", "openflow_v6.oxm.value_uint24",
6787 FT_UINT24
, BASE_DEC
, NULL
, 0x0,
6790 { &hf_openflow_v6_oxm_value_uint32
,
6791 { "Value", "openflow_v6.oxm.value_uint32",
6792 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6795 { &hf_openflow_v6_oxm_mask
,
6796 { "Mask", "openflow_v6.oxm.mask",
6797 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6800 { &hf_openflow_v6_oxm_mask_etheraddr
,
6801 { "Mask", "openflow_v6.oxm.ether_mask",
6802 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
6805 { &hf_openflow_v6_oxm_mask_ipv4addr
,
6806 { "Mask", "openflow_v6.oxm.ipv4_mask",
6807 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
6810 { &hf_openflow_v6_oxm_mask_ipv6addr
,
6811 { "Mask", "openflow_v6.oxm.ipv6_mask",
6812 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
6815 { &hf_openflow_v6_oxm_mask_vlan
,
6816 { "Mask", "openflow_v6.oxm.vlan_mask",
6817 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
6820 { &hf_openflow_v6_match_type
,
6821 { "Type", "openflow_v6.match.type",
6822 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_match_type_values
), 0x0,
6825 { &hf_openflow_v6_match_length
,
6826 { "Length", "openflow_v6.match.length",
6827 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6830 { &hf_openflow_v6_match_pad
,
6831 { "Pad", "openflow_v6.match.pad",
6832 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6835 { &hf_openflow_v6_action_type
,
6836 { "Type", "openflow_v6.action.type",
6837 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_action_type_values
), 0x0,
6840 { &hf_openflow_v6_action_length
,
6841 { "Length", "openflow_v6.action.length",
6842 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6845 { &hf_openflow_v6_action_experimenter_experimenter
,
6846 { "Experimenter", "openflow_v6.action_experimenter.experimenter",
6847 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6850 { &hf_openflow_v6_action_output_port
,
6851 { "Port", "openflow_v6.action.output.port",
6852 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
6855 { &hf_openflow_v6_action_output_max_len
,
6856 { "Max length", "openflow_v6.action.output.max_len",
6857 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_controller_max_len_reserved_values
), 0x0,
6860 { &hf_openflow_v6_action_output_pad
,
6861 { "Pad", "openflow_v6.action.output.pad",
6862 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6865 { &hf_openflow_v6_action_copy_ttl_out_pad
,
6866 { "Pad", "openflow_v6.action.copy_ttl_out.pad",
6867 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6870 { &hf_openflow_v6_action_copy_ttl_in_pad
,
6871 { "Pad", "openflow_v6.action.copy_ttl_in.pad",
6872 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6875 { &hf_openflow_v6_action_set_mpls_ttl_ttl
,
6876 { "TTL", "openflow_v6.action.set_mpls_ttl.ttl",
6877 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6880 { &hf_openflow_v6_action_set_mpls_ttl_pad
,
6881 { "Pad", "openflow_v6.action.set_mpls_ttl.pad",
6882 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6885 { &hf_openflow_v6_action_dec_mpls_ttl_pad
,
6886 { "Pad", "openflow_v6.action.dec_mpls_ttl.pad",
6887 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6890 { &hf_openflow_v6_action_push_vlan_ethertype
,
6891 { "Ethertype", "openflow_v6.action.push_vlan.ethertype",
6892 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6895 { &hf_openflow_v6_action_push_vlan_pad
,
6896 { "Pad", "openflow_v6.action.push_vlan.pad",
6897 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6900 { &hf_openflow_v6_action_pop_vlan_pad
,
6901 { "Pad", "openflow_v6.action.pop_vlan.pad",
6902 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6905 { &hf_openflow_v6_action_push_mpls_ethertype
,
6906 { "Ethertype", "openflow_v6.action.push_mpls.ethertype",
6907 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6910 { &hf_openflow_v6_action_push_mpls_pad
,
6911 { "Pad", "openflow_v6.action.push_mpls.pad",
6912 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6915 { &hf_openflow_v6_action_pop_mpls_ethertype
,
6916 { "Ethertype", "openflow_v6.action.pop_mpls.ethertype",
6917 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6920 { &hf_openflow_v6_action_pop_mpls_pad
,
6921 { "Pad", "openflow_v6.action.pop_mpls.pad",
6922 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6925 { &hf_openflow_v6_action_set_queue_queue_id
,
6926 { "Queue ID", "openflow_v6.action.set_queue.queue_id",
6927 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6930 { &hf_openflow_v6_action_group_group_id
,
6931 { "Group ID", "openflow_v6.action.group.group_id",
6932 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
6935 { &hf_openflow_v6_action_set_nw_ttl_ttl
,
6936 { "TTL", "openflow_v6.action.set_nw_ttl.ttl",
6937 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6940 { &hf_openflow_v6_action_set_nw_ttl_pad
,
6941 { "Pad", "openflow_v6.action.set_nw_ttl.pad",
6942 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6945 { &hf_openflow_v6_action_dec_nw_ttl_pad
,
6946 { "Pad", "openflow_v6.action.dec_nw_ttl.pad",
6947 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6950 { &hf_openflow_v6_action_set_field_pad
,
6951 { "Pad", "openflow_v6.action.set_field.pad",
6952 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6955 { &hf_openflow_v6_action_push_pbb_ethertype
,
6956 { "Ethertype", "openflow_v6.action.push_pbb.ethertype",
6957 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6960 { &hf_openflow_v6_action_push_pbb_pad
,
6961 { "Pad", "openflow_v6.action.push_pbb.pad",
6962 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6965 { &hf_openflow_v6_action_pop_pbb_pad
,
6966 { "Pad", "openflow_v6.action.pop_pbb.pad",
6967 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6970 { &hf_openflow_v6_action_copy_field_n_bits
,
6971 { "Number of bits", "openflow_v6.action.copy_field.n_bits",
6972 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6975 { &hf_openflow_v6_action_copy_field_src_offset
,
6976 { "Source Offset", "openflow_v6.action.copy_field.src_offset",
6977 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6980 { &hf_openflow_v6_action_copy_field_dst_offset
,
6981 { "Destination Offset", "openflow_v6.action.copy_field.dst_offset",
6982 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6985 { &hf_openflow_v6_action_copy_field_pad
,
6986 { "Pad", "openflow_v6.action.copy_field.pad",
6987 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6990 { &hf_openflow_v6_action_meter_id
,
6991 { "Meter instance", "openflow_v6.action.meter.id",
6992 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6995 { &hf_openflow_v6_instruction_type
,
6996 { "Type", "openflow_v6.instruction.type",
6997 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_instruction_type_values
), 0x0,
7000 { &hf_openflow_v6_instruction_length
,
7001 { "Length", "openflow_v6.instruction.length",
7002 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7005 { &hf_openflow_v6_instruction_experimenter_experimenter
,
7006 { "Experimenter", "openflow_v6.instruction_experimenter.experimenter",
7007 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7010 { &hf_openflow_v6_instruction_goto_table_table_id
,
7011 { "Table ID", "openflow_v6.instruction.goto_table.table_id",
7012 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7015 { &hf_openflow_v6_instruction_goto_table_pad
,
7016 { "Pad", "openflow_v6.instruction.goto_table.pad",
7017 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7020 { &hf_openflow_v6_instruction_write_metadata_pad
,
7021 { "Pad", "openflow_v6.instruction.write_metadata.pad",
7022 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7025 { &hf_openflow_v6_instruction_write_metadata_value
,
7026 { "Value", "openflow_v6.instruction.write_metadata.value",
7027 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7030 { &hf_openflow_v6_instruction_write_metadata_mask
,
7031 { "Mask", "openflow_v6.instruction.write_metadata.mask",
7032 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7035 { &hf_openflow_v6_instruction_actions_pad
,
7036 { "Pad", "openflow_v6.instruction.actions.pad",
7037 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7040 { &hf_openflow_v6_port_desc_prop_type
,
7041 { "Type", "openflow_v6.port.desc_prop.type",
7042 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_port_desc_prop_type_values
), 0x0,
7045 { &hf_openflow_v6_port_desc_prop_length
,
7046 { "Length", "openflow_v6.port.desc_prop.length",
7047 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7050 { &hf_openflow_v6_port_desc_prop_ethernet_pad
,
7051 { "Pad", "openflow_v6.port.desc_prop.ethernet.pad",
7052 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7055 { &hf_openflow_v6_port_desc_prop_ethernet_current
,
7056 { "Current", "openflow_v6.port.desc_prop.ethernet.current",
7057 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7060 { &hf_openflow_v6_port_desc_prop_ethernet_current_10mb_hd
,
7061 { "OFPPF_10MB_HD", "openflow_v6.port.desc_prop.ethernet.current.10mb_hd",
7062 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
7065 { &hf_openflow_v6_port_desc_prop_ethernet_current_10mb_fd
,
7066 { "OFPPF_10MB_FD", "openflow_v6.port.desc_prop.ethernet.current.10mb_fd",
7067 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
7070 { &hf_openflow_v6_port_desc_prop_ethernet_current_100mb_hd
,
7071 { "OFPPF_100MB_HD", "openflow_v6.port.desc_prop.ethernet.current.100mb_hd",
7072 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
7075 { &hf_openflow_v6_port_desc_prop_ethernet_current_100mb_fd
,
7076 { "OFPPF_100MB_FD", "openflow_v6.port.desc_prop.ethernet.current.100mb_fd",
7077 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
7080 { &hf_openflow_v6_port_desc_prop_ethernet_current_1gb_hd
,
7081 { "OFPPF_1GB_HD", "openflow_v6.port.desc_prop.ethernet.current.1gb_hd",
7082 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
7085 { &hf_openflow_v6_port_desc_prop_ethernet_current_1gb_fd
,
7086 { "OFPPF_1GB_FD", "openflow_v6.port.desc_prop.ethernet.current.1gb_fd",
7087 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
7090 { &hf_openflow_v6_port_desc_prop_ethernet_current_10gb_fd
,
7091 { "OFPPF_10_GB_FD", "openflow_v6.port.desc_prop.ethernet.current.10gb_fd",
7092 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
7095 { &hf_openflow_v6_port_desc_prop_ethernet_current_40gb_fd
,
7096 { "OFPPF_40GB_FD", "openflow_v6.port.desc_prop.ethernet.current.40gb_fd",
7097 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
7100 { &hf_openflow_v6_port_desc_prop_ethernet_current_100gb_fd
,
7101 { "OFPPF_100_GB_FD", "openflow_v6.port.desc_prop.ethernet.current.100_gb_fd",
7102 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
7105 { &hf_openflow_v6_port_desc_prop_ethernet_current_1tb_fd
,
7106 { "OFPPF_1TB_FD", "openflow_v6.port.desc_prop.ethernet.current.1tb_fd",
7107 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
7110 { &hf_openflow_v6_port_desc_prop_ethernet_current_other
,
7111 { "OFPPF_OTHER", "openflow_v6.port.desc_prop.ethernet.current.other",
7112 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
7115 { &hf_openflow_v6_port_desc_prop_ethernet_current_copper
,
7116 { "OFPPF_COPPER", "openflow_v6.port.desc_prop.ethernet.current.copper",
7117 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
7120 { &hf_openflow_v6_port_desc_prop_ethernet_current_fiber
,
7121 { "OFPPF_FIBER", "openflow_v6.port.desc_prop.ethernet.current.fiber",
7122 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
7125 { &hf_openflow_v6_port_desc_prop_ethernet_current_autoneg
,
7126 { "OFPPF_AUTONEG", "openflow_v6.port.desc_prop.ethernet.current.autoneg",
7127 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
7130 { &hf_openflow_v6_port_desc_prop_ethernet_current_pause
,
7131 { "OFPPF_PAUSE", "openflow_v6.port.desc_prop.ethernet.current.pause",
7132 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
7135 { &hf_openflow_v6_port_desc_prop_ethernet_current_pause_asym
,
7136 { "OFPPF_PAUSE_ASYM", "openflow_v6.port.desc_prop.ethernet.current.pause_asym",
7137 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
7140 { &hf_openflow_v6_port_desc_prop_ethernet_current_reserved
,
7141 { "Reserved", "openflow_v6.port.desc_prop.ethernet.current.reserved",
7142 FT_UINT32
, BASE_HEX
, NULL
, OFPPF_RESERVED
,
7145 { &hf_openflow_v6_port_desc_prop_ethernet_advertised
,
7146 { "Advertised", "openflow_v6.port.desc_prop.ethernet.advertised",
7147 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7150 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_10mb_hd
,
7151 { "OFPPF_10MB_HD", "openflow_v6.port.desc_prop.ethernet.advertised.10mb_hd",
7152 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
7155 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_10mb_fd
,
7156 { "OFPPF_10MB_FD", "openflow_v6.port.desc_prop.ethernet.advertised.10mb_fd",
7157 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
7160 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_100mb_hd
,
7161 { "OFPPF_100MB_HD", "openflow_v6.port.desc_prop.ethernet.advertised.100mb_hd",
7162 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
7165 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_100mb_fd
,
7166 { "OFPPF_100MB_FD", "openflow_v6.port.desc_prop.ethernet.advertised.100mb_fd",
7167 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
7170 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_1gb_hd
,
7171 { "OFPPF_1GB_HD", "openflow_v6.port.desc_prop.ethernet.advertised.1gb_hd",
7172 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
7175 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_1gb_fd
,
7176 { "OFPPF_1GB_FD", "openflow_v6.port.desc_prop.ethernet.advertised.1gb_fd",
7177 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
7180 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_10gb_fd
,
7181 { "OFPPF_10_GB_FD", "openflow_v6.port.desc_prop.ethernet.advertised.10gb_fd",
7182 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
7185 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_40gb_fd
,
7186 { "OFPPF_40GB_FD", "openflow_v6.port.desc_prop.ethernet.advertised.40gb_fd",
7187 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
7190 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_100gb_fd
,
7191 { "OFPPF_100GB_FD", "openflow_v6.port.desc_prop.ethernet.advertised.100gb_fd",
7192 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
7195 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_1tb_fd
,
7196 { "OFPPF_1TB_FD", "openflow_v6.port.desc_prop.ethernet.advertised.1tb_fd",
7197 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
7200 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_other
,
7201 { "OFPPF_OTHER", "openflow_v6.port.desc_prop.ethernet.advertised.other",
7202 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
7205 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_copper
,
7206 { "OFPPF_COPPER", "openflow_v6.port.desc_prop.ethernet.advertised.copper",
7207 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
7210 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_fiber
,
7211 { "OFPPF_FIBER", "openflow_v6.port.desc_prop.ethernet.advertised.fiber",
7212 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
7215 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_autoneg
,
7216 { "OFPPF_AUTONEG", "openflow_v6.port.desc_prop.ethernet.advertised.autoneg",
7217 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
7220 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_pause
,
7221 { "OFPPF_PAUSE", "openflow_v6.port.desc_prop.ethernet.advertised.pause",
7222 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
7225 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_pause_asym
,
7226 { "OFPPF_PAUSE_ASYM", "openflow_v6.port.desc_prop.ethernet.advertised.pause_asym",
7227 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
7230 { &hf_openflow_v6_port_desc_prop_ethernet_advertised_reserved
,
7231 { "Reserved", "openflow_v6.port.desc_prop.ethernet.advertised.reserved",
7232 FT_UINT32
, BASE_HEX
, NULL
, OFPPF_RESERVED
,
7235 { &hf_openflow_v6_port_desc_prop_ethernet_supported
,
7236 { "Supported", "openflow_v6.port.desc_prop.ethernet.supported",
7237 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7240 { &hf_openflow_v6_port_desc_prop_ethernet_supported_10mb_hd
,
7241 { "OFPPF_10MB_HD", "openflow_v6.port.desc_prop.ethernet.supported.10mb_hd",
7242 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
7245 { &hf_openflow_v6_port_desc_prop_ethernet_supported_10mb_fd
,
7246 { "OFPPF_10MB_FD", "openflow_v6.port.desc_prop.ethernet.supported.10mb_fd",
7247 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
7250 { &hf_openflow_v6_port_desc_prop_ethernet_supported_100mb_hd
,
7251 { "OFPPF_100MB_HD", "openflow_v6.port.desc_prop.ethernet.supported.100mb_hd",
7252 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
7255 { &hf_openflow_v6_port_desc_prop_ethernet_supported_100mb_fd
,
7256 { "OFPPF_100MB_FD", "openflow_v6.port.desc_prop.ethernet.supported.100mb_fd",
7257 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
7260 { &hf_openflow_v6_port_desc_prop_ethernet_supported_1gb_hd
,
7261 { "OFPPF_1GB_HD", "openflow_v6.port.desc_prop.ethernet.supported.1gb_hd",
7262 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
7265 { &hf_openflow_v6_port_desc_prop_ethernet_supported_1gb_fd
,
7266 { "OFPPF_1GB_FD", "openflow_v6.port.desc_prop.ethernet.supported.1gb_fd",
7267 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
7270 { &hf_openflow_v6_port_desc_prop_ethernet_supported_10gb_fd
,
7271 { "OFPPF_10_GB_FD", "openflow_v6.port.desc_prop.ethernet.supported.10gb_fd",
7272 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
7275 { &hf_openflow_v6_port_desc_prop_ethernet_supported_40gb_fd
,
7276 { "OFPPF_40GB_FD", "openflow_v6.port.desc_prop.ethernet.supported.40gb_fd",
7277 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
7280 { &hf_openflow_v6_port_desc_prop_ethernet_supported_100gb_fd
,
7281 { "OFPPF_100GB_FD", "openflow_v6.port.desc_prop.ethernet.supported.100gb_fd",
7282 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
7285 { &hf_openflow_v6_port_desc_prop_ethernet_supported_1tb_fd
,
7286 { "OFPPF_1TB_FD", "openflow_v6.port.desc_prop.ethernet.supported.1tb_fd",
7287 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
7290 { &hf_openflow_v6_port_desc_prop_ethernet_supported_other
,
7291 { "OFPPF_OTHER", "openflow_v6.port.desc_prop.ethernet.supported.other",
7292 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
7295 { &hf_openflow_v6_port_desc_prop_ethernet_supported_copper
,
7296 { "OFPPF_COPPER", "openflow_v6.port.desc_prop.ethernet.supported.copper",
7297 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
7300 { &hf_openflow_v6_port_desc_prop_ethernet_supported_fiber
,
7301 { "OFPPF_FIBER", "openflow_v6.port.desc_prop.ethernet.supported.fiber",
7302 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
7305 { &hf_openflow_v6_port_desc_prop_ethernet_supported_autoneg
,
7306 { "OFPPF_AUTONEG", "openflow_v6.port.desc_prop.ethernet.supported.autoneg",
7307 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
7310 { &hf_openflow_v6_port_desc_prop_ethernet_supported_pause
,
7311 { "OFPPF_PAUSE", "openflow_v6.port.desc_prop.ethernet.supported.pause",
7312 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
7315 { &hf_openflow_v6_port_desc_prop_ethernet_supported_pause_asym
,
7316 { "OFPPF_PAUSE_ASYM", "openflow_v6.port.desc_prop.ethernet.supported.pause_asym",
7317 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
7320 { &hf_openflow_v6_port_desc_prop_ethernet_supported_reserved
,
7321 { "Reserved", "openflow_v6.port.desc_prop.ethernet.supported.reserved",
7322 FT_UINT32
, BASE_HEX
, NULL
, OFPPF_RESERVED
,
7325 { &hf_openflow_v6_port_desc_prop_ethernet_peer
,
7326 { "Peer", "openflow_v6.port.desc_prop.ethernet.peer",
7327 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7330 { &hf_openflow_v6_port_desc_prop_ethernet_peer_10mb_hd
,
7331 { "OFPPF_10MB_HD", "openflow_v6.port.desc_prop.ethernet.peer.10mb_hd",
7332 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
7335 { &hf_openflow_v6_port_desc_prop_ethernet_peer_10mb_fd
,
7336 { "OFPPF_10MB_FD", "openflow_v6.port.desc_prop.ethernet.peer.10mb_fd",
7337 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
7340 { &hf_openflow_v6_port_desc_prop_ethernet_peer_100mb_hd
,
7341 { "OFPPF_100MB_HD", "openflow_v6.port.desc_prop.ethernet.peer.100mb_hd",
7342 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
7345 { &hf_openflow_v6_port_desc_prop_ethernet_peer_100mb_fd
,
7346 { "OFPPF_100MB_FD", "openflow_v6.port.desc_prop.ethernet.peer.100mb_fd",
7347 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
7350 { &hf_openflow_v6_port_desc_prop_ethernet_peer_1gb_hd
,
7351 { "OFPPF_1GB_HD", "openflow_v6.port.desc_prop.ethernet.peer.1gb_hd",
7352 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
7355 { &hf_openflow_v6_port_desc_prop_ethernet_peer_1gb_fd
,
7356 { "OFPPF_1GB_FD", "openflow_v6.port.desc_prop.ethernet.peer.1gb_fd",
7357 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
7360 { &hf_openflow_v6_port_desc_prop_ethernet_peer_10gb_fd
,
7361 { "OFPPF_10_GB_FD", "openflow_v6.port.desc_prop.ethernet.peer.10gb_fd",
7362 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
7365 { &hf_openflow_v6_port_desc_prop_ethernet_peer_40gb_fd
,
7366 { "OFPPF_40GB_FD", "openflow_v6.port.desc_prop.ethernet.peer.40gb_fd",
7367 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
7370 { &hf_openflow_v6_port_desc_prop_ethernet_peer_100gb_fd
,
7371 { "OFPPF_100GB_FD", "openflow_v6.port.desc_prop.ethernet.peer.100gb_fd",
7372 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
7375 { &hf_openflow_v6_port_desc_prop_ethernet_peer_1tb_fd
,
7376 { "OFPPF_1TB_FD", "openflow_v6.port.desc_prop.ethernet.peer.1tb_fd",
7377 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
7380 { &hf_openflow_v6_port_desc_prop_ethernet_peer_other
,
7381 { "OFPPF_OTHER", "openflow_v6.port.desc_prop.ethernet.peer.other",
7382 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
7385 { &hf_openflow_v6_port_desc_prop_ethernet_peer_copper
,
7386 { "OFPPF_COPPER", "openflow_v6.port.desc_prop.ethernet.peer.copper",
7387 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
7390 { &hf_openflow_v6_port_desc_prop_ethernet_peer_fiber
,
7391 { "OFPPF_FIBER", "openflow_v6.port.desc_prop.ethernet.peer.fiber",
7392 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
7395 { &hf_openflow_v6_port_desc_prop_ethernet_peer_autoneg
,
7396 { "OFPPF_AUTONEG", "openflow_v6.port.desc_prop.ethernet.peer.autoneg",
7397 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
7400 { &hf_openflow_v6_port_desc_prop_ethernet_peer_pause
,
7401 { "OFPPF_PAUSE", "openflow_v6.port.desc_prop.ethernet.peer.pause",
7402 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
7405 { &hf_openflow_v6_port_desc_prop_ethernet_peer_pause_asym
,
7406 { "OFPPF_PAUSE_ASYM", "openflow_v6.port.desc_prop.ethernet.peer.pause_asym",
7407 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
7410 { &hf_openflow_v6_port_desc_prop_ethernet_peer_reserved
,
7411 { "Reserved", "openflow_v6.port.desc_prop.ethernet.peer.reserved",
7412 FT_UINT32
, BASE_HEX
, NULL
, OFPPF_RESERVED
,
7415 { &hf_openflow_v6_port_desc_prop_ethernet_curr_speed
,
7416 { "Curr speed", "openflow_v6.port.desc_prop.ethernet.curr_speed",
7417 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7420 { &hf_openflow_v6_port_desc_prop_ethernet_max_speed
,
7421 { "Max speed", "openflow_v6.port.desc_prop.ethernet.max_speed",
7422 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7425 { &hf_openflow_v6_port_desc_prop_optical_pad
,
7426 { "Pad", "openflow_v6.port.desc_prop.optical.pad",
7427 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7430 { &hf_openflow_v6_port_desc_prop_optical_supported
,
7431 { "Supported", "openflow_v6.port.desc_prop.optical.supported",
7432 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7435 { &hf_openflow_v6_port_desc_prop_optical_supported_rx_tune
,
7436 { "OFPOPF_RX_TUNE", "openflow_v6.port.desc_prop.optical.supported.rx_tune",
7437 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_RX_TUNE
,
7440 { &hf_openflow_v6_port_desc_prop_optical_supported_tx_tune
,
7441 { "OFPOPF_TX_TUNE", "openflow_v6.port.desc_prop.optical.supported.tx_tune",
7442 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_TUNE
,
7445 { &hf_openflow_v6_port_desc_prop_optical_supported_tx_pwr
,
7446 { "OFPOPF_TX_PWR", "openflow_v6.port.desc_prop.optical.supported.tx_pwr",
7447 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_PWR
,
7450 { &hf_openflow_v6_port_desc_prop_optical_supported_use_freq
,
7451 { "OFPOPF_USE_FREQ", "openflow_v6.port.desc_prop.optical.supported.use_freq",
7452 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_USE_FREQ
,
7455 { &hf_openflow_v6_port_desc_prop_optical_tx_min_freq_lmda
,
7456 { "Tx. Min. Freq. Lambda", "openflow_v6.port.desc_prop.optical.tx_min_freq_lmda",
7457 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7460 { &hf_openflow_v6_port_desc_prop_optical_tx_max_freq_lmda
,
7461 { "Tx. Max. Freq. Lambda", "openflow_v6.port.desc_prop.optical.tx_max_freq_lmda",
7462 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7465 { &hf_openflow_v6_port_desc_prop_optical_tx_grid_freq_lmda
,
7466 { "Tx. Grid Freq. Lambda", "openflow_v6.port.desc_prop.optical.tx_grid_freq_lmda",
7467 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7470 { &hf_openflow_v6_port_desc_prop_optical_rx_min_freq_lmda
,
7471 { "Rx. Min. Freq. Lambda", "openflow_v6.port.desc_prop.optical.rx_min_freq_lmda",
7472 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7475 { &hf_openflow_v6_port_desc_prop_optical_rx_max_freq_lmda
,
7476 { "Rx. Max. Freq Lambda", "openflow_v6.port.desc_prop.optical.rx_max_freq_lmda",
7477 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7480 { &hf_openflow_v6_port_desc_prop_optical_rx_grid_freq_lmda
,
7481 { "Rx. Grid Freq. Lambda", "openflow_v6.port.desc_prop.optical.rx_grid_freq_lambda",
7482 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7485 { &hf_openflow_v6_port_desc_prop_optical_tx_pwr_min
,
7486 { "Tx. Power Min.", "openflow_v6.port.desc_prop.optical.tx_pwr_min",
7487 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7490 { &hf_openflow_v6_port_desc_prop_optical_tx_pwr_max
,
7491 { "Tx. Power Max.", "openflow_v6.port.desc_prop.optical.tx_pwr_max",
7492 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7495 { &hf_openflow_v6_port_desc_prop_experimenter_experimenter
,
7496 { "Experimenter", "openflow_v6.port_desc_prop.experimenter.experimenter",
7497 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7500 { &hf_openflow_v6_port_desc_prop_experimenter_exp_type
,
7501 { "Exp. type", "openflow_v6.port_desc_prop.experimenter.exp_type",
7502 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7505 { &hf_openflow_v6_port_stats_prop_type
,
7506 { "Type", "openflow_v6.port.stats_prop.type",
7507 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_port_stats_prop_type_values
), 0x0,
7510 { &hf_openflow_v6_port_stats_prop_length
,
7511 { "Length", "openflow_v6.port.stats_prop.length",
7512 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7515 { &hf_openflow_v6_port_stats_prop_ethernet_pad
,
7516 { "Pad", "openflow_v6.port.stats_prop.ethernet.pad",
7517 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7520 { &hf_openflow_v6_port_stats_prop_ethernet_rx_frame_err
,
7521 { "Rx. Frame Error", "openflow_v6.port.stats_prop.ethernet.rx_frame_err",
7522 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
7525 { &hf_openflow_v6_port_stats_prop_ethernet_rx_over_err
,
7526 { "Rx. Over Error", "openflow_v6.port.stats_prop.ethernet.rx_over_err",
7527 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
7530 { &hf_openflow_v6_port_stats_prop_ethernet_rx_crc_err
,
7531 { "Rx. CRC Error", "openflow_v6.port.stats_prop.ethernet.rx_crc_err",
7532 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
7535 { &hf_openflow_v6_port_stats_prop_ethernet_collisions
,
7536 { "Collisions", "openflow_v6.port.stats_prop.ethernet.collisions",
7537 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
7540 { &hf_openflow_v6_port_stats_prop_optical_pad
,
7541 { "Pad", "openflow_v6.port.stats_prop.optical.pad",
7542 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7545 { &hf_openflow_v6_port_stats_prop_optical_flags
,
7546 { "Flags", "openflow_v6.port.desc_prop.optical.supported",
7547 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7550 { &hf_openflow_v6_port_stats_prop_optical_flags_rx_tune
,
7551 { "OFPOSF_RX_TUNE", "openflow_v6.port.stats_prop.optical.flags.rx_tune",
7552 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_RX_TUNE
,
7555 { &hf_openflow_v6_port_stats_prop_optical_flags_tx_tune
,
7556 { "OFPOSF_TX_TUNE", "openflow_v6.port.stats_prop.optical.flags.tx_tune",
7557 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_TUNE
,
7560 { &hf_openflow_v6_port_stats_prop_optical_flags_tx_pwr
,
7561 { "OFPOSF_TX_PWR", "openflow_v6.port.stats_prop.optical.flags.tx_pwr",
7562 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_PWR
,
7565 { &hf_openflow_v6_port_stats_prop_optical_flags_rx_pwr
,
7566 { "OFPOSF_RX_PWR", "openflow_v6.port.stats_prop.optical.flags.rx_pwr",
7567 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_RX_PWR
,
7570 { &hf_openflow_v6_port_stats_prop_optical_flags_tx_bias
,
7571 { "OFPOSF_TX_BIAS", "openflow_v6.port.stats_prop.optical.flags.tx_bias",
7572 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_BIAS
,
7575 { &hf_openflow_v6_port_stats_prop_optical_flags_tx_temp
,
7576 { "OFPOSF_TX_TEMP", "openflow_v6.port.stats_prop.optical.flags.tx_temp",
7577 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_TEMP
,
7580 { &hf_openflow_v6_port_stats_prop_optical_tx_freq_lmda
,
7581 { "Tx. Freq. Lambda", "openflow_v6.port.stats_prop.optical.tx_freq_lmda",
7582 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7585 { &hf_openflow_v6_port_stats_prop_optical_tx_offset
,
7586 { "Tx. Offset", "openflow_v6.port.stats_prop.optical.tx_offset",
7587 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7590 { &hf_openflow_v6_port_stats_prop_optical_tx_grid_span
,
7591 { "Tx. Grid Spacing", "openflow_v6.port.stats_prop.optical.tx_grid_span",
7592 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7595 { &hf_openflow_v6_port_stats_prop_optical_rx_freq_lmda
,
7596 { "Rx. Freq. Lambda", "openflow_v6.port.stats_prop.optical.rx_freq_lmda",
7597 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7600 { &hf_openflow_v6_port_stats_prop_optical_rx_offset
,
7601 { "Rx. Offset", "openflow_v6.port.stats_prop.optical.rx_offset",
7602 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7605 { &hf_openflow_v6_port_stats_prop_optical_rx_grid_span
,
7606 { "Rx. Grid Spacing", "openflow_v6.port.stats_prop.optical.rx_grid_span",
7607 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7610 { &hf_openflow_v6_port_stats_prop_optical_tx_pwr
,
7611 { "Tx. Power", "openflow_v6.port.stats_prop.optical.tx_pwr",
7612 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7615 { &hf_openflow_v6_port_stats_prop_optical_rx_pwr
,
7616 { "Rx. Power", "openflow_v6.port.stats_prop.optical.rx_pwr",
7617 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7620 { &hf_openflow_v6_port_stats_prop_optical_bias_current
,
7621 { "Tx. Bias Current", "openflow_v6.port.stats_prop.optical.bias_current",
7622 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7625 { &hf_openflow_v6_port_stats_prop_optical_temperature
,
7626 { "Tx. Laser Temperature", "openflow_v6.port.stats_prop.optical.temperature",
7627 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7630 { &hf_openflow_v6_port_stats_prop_experimenter_experimenter
,
7631 { "Experimenter", "openflow_v6.port_stats_prop.experimenter.experimenter",
7632 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7635 { &hf_openflow_v6_port_stats_prop_experimenter_exp_type
,
7636 { "Exp. type", "openflow_v6.port_stats_prop.experimenter.exp_type",
7637 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7640 { &hf_openflow_v6_port_port_no
,
7641 { "Port no", "openflow_v6.port.port_no",
7642 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
7645 { &hf_openflow_v6_port_pad
,
7646 { "Pad", "openflow_v6.port.pad",
7647 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7650 { &hf_openflow_v6_port_length
,
7651 { "Length", "openflow_v6.port.length",
7652 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7655 { &hf_openflow_v6_port_hw_addr
,
7656 { "Hw addr", "openflow_v6.port.hw_addr",
7657 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
7660 { &hf_openflow_v6_port_pad2
,
7661 { "Pad2", "openflow_v6.port.pad2",
7662 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7665 { &hf_openflow_v6_port_name
,
7666 { "Name", "openflow_v6.port.name",
7667 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7670 { &hf_openflow_v6_port_config
,
7671 { "Config", "openflow_v6.port.config",
7672 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7675 { &hf_openflow_v6_port_config_port_down
,
7676 { "OFPPC_PORT_DOWN", "openflow_v6.port.config.port_down",
7677 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
7680 { &hf_openflow_v6_port_config_no_recv
,
7681 { "OFPPC_NO_RECV", "openflow_v6.port.config.no_recv",
7682 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
7685 { &hf_openflow_v6_port_config_no_fwd
,
7686 { "OFPPC_NO_FWD", "openflow_v6.port.config.no_fwd",
7687 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
7690 { &hf_openflow_v6_port_config_no_packet_in
,
7691 { "OFPPC_NO_PACKET_IN", "openflow_v6.port.config.no_packet_in",
7692 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
7695 { &hf_openflow_v6_port_state
,
7696 { "State", "openflow_v6.port.sate",
7697 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7700 { &hf_openflow_v6_port_state_link_down
,
7701 { "OFPPS_LINK_DOWN", "openflow_v6.port.state.link_down",
7702 FT_BOOLEAN
, 32, NULL
, OFPPS_LINK_DOWN
,
7705 { &hf_openflow_v6_port_state_blocked
,
7706 { "OFPPS_BLOCKED", "openflow_v6.port.state.blocked",
7707 FT_BOOLEAN
, 32, NULL
, OFPPS_BLOCKED
,
7710 { &hf_openflow_v6_port_state_live
,
7711 { "OFPPS_LIVE", "openflow_v6.port.state.live",
7712 FT_BOOLEAN
, 32, NULL
, OFPPS_LIVE
,
7715 { &hf_openflow_v6_meter_band_type
,
7716 { "Type", "openflow_v6.meter_band.type",
7717 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_meter_band_type_values
), 0x0,
7720 { &hf_openflow_v6_meter_band_len
,
7721 { "Length", "openflow_v6.meter_band.length",
7722 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7725 { &hf_openflow_v6_meter_band_rate
,
7726 { "Rate", "openflow_v6.meter_band.rate",
7727 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7730 { &hf_openflow_v6_meter_band_burst_size
,
7731 { "Burst size", "openflow_v6.meter_band.burst_size",
7732 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7735 { &hf_openflow_v6_meter_band_drop_pad
,
7736 { "Pad", "openflow_v6.meter_band.drop.pad",
7737 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7740 { &hf_openflow_v6_meter_band_dscp_remark_prec_level
,
7741 { "Precedence level", "openflow_v6.meter_band.dscp_remark.prec_level",
7742 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7745 { &hf_openflow_v6_meter_band_dscp_remark_pad
,
7746 { "Pad", "openflow_v6.meter_band.dscp_remark.pad",
7747 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7750 { &hf_openflow_v6_meter_band_experimenter_experimenter
,
7751 { "Experimenter", "openflow_v6.meter_band.experimenter.experimenter",
7752 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7755 { &hf_openflow_v6_hello_element_type
,
7756 { "Type", "openflow_v6.hello_element.type",
7757 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_hello_element_type_values
), 0x0,
7760 { &hf_openflow_v6_hello_element_length
,
7761 { "Length", "openflow_v6.hello_element.length",
7762 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7765 { &hf_openflow_v6_hello_element_version_bitmap
,
7766 { "Bitmap", "openflow_v6.hello_element.version.bitmap",
7767 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7770 { &hf_openflow_v6_hello_element_pad
,
7771 { "Pad", "openflow_v6.hello_element.pad",
7772 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7775 { &hf_openflow_v6_error_type
,
7776 { "Type", "openflow_v6.error.type",
7777 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_type_values
), 0x0,
7780 { &hf_openflow_v6_error_hello_failed_code
,
7781 { "Code", "openflow_v6.error.code",
7782 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_hello_failed_code_values
), 0x0,
7785 { &hf_openflow_v6_error_bad_request_code
,
7786 { "Code", "openflow_v6.error.code",
7787 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_bad_request_code_values
), 0x0,
7790 { &hf_openflow_v6_error_bad_action_code
,
7791 { "Code", "openflow_v6.error.code",
7792 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_bad_action_code_values
), 0x0,
7795 { &hf_openflow_v6_error_bad_instruction_code
,
7796 { "Code", "openflow_v6.error.code",
7797 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_bad_instruction_code_values
), 0x0,
7800 { &hf_openflow_v6_error_bad_match_code
,
7801 { "Code", "openflow_v6.error.code",
7802 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_bad_match_code_values
), 0x0,
7805 { &hf_openflow_v6_error_flow_mod_failed_code
,
7806 { "Code", "openflow_v6.error.code",
7807 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_flow_mod_failed_code_values
), 0x0,
7810 { &hf_openflow_v6_error_group_mod_failed_code
,
7811 { "Code", "openflow_v6.error.code",
7812 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_group_mod_failed_code_values
), 0x0,
7815 { &hf_openflow_v6_error_port_mod_failed_code
,
7816 { "Code", "openflow_v6.error.code",
7817 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_port_mod_failed_code_values
), 0x0,
7820 { &hf_openflow_v6_error_table_mod_failed_code
,
7821 { "Code", "openflow_v6.error.code",
7822 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_table_mod_failed_code_values
), 0x0,
7825 { &hf_openflow_v6_error_queue_op_failed_code
,
7826 { "Code", "openflow_v6.error.code",
7827 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_queue_op_failed_code_values
), 0x0,
7830 { &hf_openflow_v6_error_switch_config_failed_code
,
7831 { "Code", "openflow_v6.error.code",
7832 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_switch_config_failed_code_values
), 0x0,
7835 { &hf_openflow_v6_error_role_request_failed_code
,
7836 { "Code", "openflow_v6.error.code",
7837 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_role_request_failed_code_values
), 0x0,
7840 { &hf_openflow_v6_error_meter_mod_failed_code
,
7841 { "Code", "openflow_v6.error.code",
7842 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_meter_mod_failed_code_values
), 0x0,
7845 { &hf_openflow_v6_error_table_features_failed_code
,
7846 { "Code", "openflow_v6.error.code",
7847 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_table_features_failed_code_values
), 0x0,
7850 { &hf_openflow_v6_error_bad_property_code
,
7851 { "Code", "openflow_v6.error.code",
7852 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_bad_property_code_values
), 0x0,
7855 { &hf_openflow_v6_error_async_config_failed_code
,
7856 { "Code", "openflow_v6.error.code",
7857 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_async_config_failed_code_values
), 0x0,
7860 { &hf_openflow_v6_error_flow_monitor_failed_code
,
7861 { "Code", "openflow_v6.error.code",
7862 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_flow_monitor_failed_code_values
), 0x0,
7865 { &hf_openflow_v6_error_bundle_failed_code
,
7866 { "Code", "openflow_v6.error.code",
7867 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_error_bundle_failed_code_values
), 0x0,
7870 { &hf_openflow_v6_error_code
,
7871 { "Code", "openflow_v6.error.code",
7872 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7875 { &hf_openflow_v6_error_data_text
,
7876 { "Data", "openflow_v6.error.data",
7877 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7880 { &hf_openflow_v6_echo_data
,
7881 { "Data", "openflow_v6.echo.data",
7882 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7885 { &hf_openflow_v6_error_data_body
,
7886 { "Body", "openflow_v6.error.data.body",
7887 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7890 { &hf_openflow_v6_error_experimenter
,
7891 { "Experimenter", "openflow_v6.error.experimenter",
7892 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7895 { &hf_openflow_v6_experimenter_experimenter
,
7896 { "Experimenter", "openflow_v6.experimenter.experimenter",
7897 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7900 { &hf_openflow_v6_experimenter_exp_type
,
7901 { "Experimenter type", "openflow_v6.experimenter.exp_type",
7902 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7905 { &hf_openflow_v6_switch_features_datapath_id
,
7906 { "datapath_id", "openflow_v6.switch_features.datapath_id",
7907 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7910 { &hf_openflow_v6_switch_features_n_buffers
,
7911 { "n_buffers", "openflow_v6.switch_features.n_buffers",
7912 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7915 { &hf_openflow_v6_switch_features_n_tables
,
7916 { "n_tables", "openflow_v6.switch_features.n_tables",
7917 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7920 { &hf_openflow_v6_switch_features_auxiliary_id
,
7921 { "auxiliary_id", "openflow_v6.switch_features.auxiliary_id",
7922 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7925 { &hf_openflow_v6_switch_features_pad
,
7926 { "Pad", "openflow_v6.switch_features.pad",
7927 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7930 { &hf_openflow_v6_switch_features_capabilities
,
7931 { "capabilities", "openflow_v6.switch_features.capabilities",
7932 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7935 { &hf_openflow_v6_switch_features_capabilities_flow_stats
,
7936 { "OFPC_FLOW_STATS", "openflow_v6.switch_features.capabilities.flow_stats",
7937 FT_BOOLEAN
, 32, NULL
, OFPC_FLOW_STATS
,
7940 { &hf_openflow_v6_switch_features_capabilities_table_stats
,
7941 { "OFPC_TABLE_STATS", "openflow_v6.switch_features.capabilities.table_stats",
7942 FT_BOOLEAN
, 32, NULL
, OFPC_TABLE_STATS
,
7945 { &hf_openflow_v6_switch_features_capabilities_port_stats
,
7946 { "OFPC_PORT_STATS", "openflow_v6.switch_features.capabilities.port_stats",
7947 FT_BOOLEAN
, 32, NULL
, OFPC_PORT_STATS
,
7950 { &hf_openflow_v6_switch_features_capabilities_group_stats
,
7951 { "OFPC_GROUP_STATS", "openflow_v6.switch_features.capabilities.group_stats",
7952 FT_BOOLEAN
, 32, NULL
, OFPC_GROUP_STATS
,
7955 { &hf_openflow_v6_switch_features_capabilities_ip_reasm
,
7956 { "OFPC_IP_REASM", "openflow_v6.switch_features.capabilities.ip_reasm",
7957 FT_BOOLEAN
, 32, NULL
, OFPC_IP_REASM
,
7960 { &hf_openflow_v6_switch_features_capabilities_queue_stats
,
7961 { "OFPC_QUEUE_STATS", "openflow_v6.switch_features.capabilities.queue_stats",
7962 FT_BOOLEAN
, 32, NULL
, OFPC_QUEUE_STATS
,
7965 { &hf_openflow_v6_switch_features_capabilities_port_blocked
,
7966 { "OFPC_PORT_BLOCKED", "openflow_v6.switch_features.capabilities.port_blocked",
7967 FT_BOOLEAN
, 32, NULL
, OFPC_PORT_BLOCKED
,
7970 { &hf_openflow_v6_switch_features_capabilities_bundles
,
7971 { "OFPC_BUNDLES", "openflow_v6.switch_features.capabilities.bundles",
7972 FT_BOOLEAN
, 32, NULL
, OFPC_BUNDLES
,
7975 { &hf_openflow_v6_switch_features_capabilities_flow_monitoring
,
7976 { "OFPC_FLOW_MONITORING", "openflow_v6.switch_features.capabilities.flow_monitoring",
7977 FT_BOOLEAN
, 32, NULL
, OFPC_FLOW_MONITORING
,
7980 { &hf_openflow_v6_switch_features_reserved
,
7981 { "Reserved", "openflow_v6.switch_features_reserved",
7982 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7985 { &hf_openflow_v6_switch_config_flags
,
7986 { "Flags", "openflow_v6.switch_config.flags",
7987 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
7990 { &hf_openflow_v6_switch_config_flags_fragments
,
7991 { "IP Fragments", "openflow_v6.switch_config.flags.fragments",
7992 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_switch_config_fragments_values
), 0x0,
7995 { &hf_openflow_v6_switch_config_miss_send_len
,
7996 { "Miss send length", "openflow_v6.switch_config.miss_send_len",
7997 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_controller_max_len_reserved_values
), 0x0,
8000 { &hf_openflow_v6_packet_in_buffer_id
,
8001 { "Buffer ID", "openflow_v6.packet_in.buffer_id",
8002 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_buffer_reserved_values
), 0x0,
8005 { &hf_openflow_v6_packet_in_total_len
,
8006 { "Total length", "openflow_v6.packet_in.total_len",
8007 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8010 { &hf_openflow_v6_packet_in_reason
,
8011 { "Reason", "openflow_v6.packet_in.reason",
8012 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_packet_in_reason_values
), 0x0,
8015 { &hf_openflow_v6_packet_in_table_id
,
8016 { "Table ID", "openflow_v6.packet_in.table_id",
8017 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8020 { &hf_openflow_v6_packet_in_cookie
,
8021 { "Cookie", "openflow_v6.packet_in.cookie",
8022 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8025 { &hf_openflow_v6_packet_in_pad
,
8026 { "Pad", "openflow_v6.packet_in.pad",
8027 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8030 { &hf_openflow_v6_flow_removed_cookie
,
8031 { "Cookie", "openflow_v6.flow_removed.cookie",
8032 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8035 { &hf_openflow_v6_flow_removed_priority
,
8036 { "Priority", "openflow_v6.flow_removed.priority",
8037 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8040 { &hf_openflow_v6_flow_removed_reason
,
8041 { "Reason", "openflow_v6.flow_removed.reason",
8042 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_flow_removed_reason_values
), 0x0,
8045 { &hf_openflow_v6_flow_removed_table_id
,
8046 { "Table ID", "openflow_v6.flow_removed.table_id",
8047 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8050 { &hf_openflow_v6_flow_removed_idle_timeout
,
8051 { "Idle timeout", "openflow_v6.flow_removed.idle_timeout",
8052 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8055 { &hf_openflow_v6_flow_removed_hard_timeout
,
8056 { "Hard timeout", "openflow_v6.flow_removed.hard_timeout",
8057 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8060 { &hf_openflow_v6_port_status_reason
,
8061 { "Reason", "openflow_v6.port_status.reason",
8062 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_port_status_reason_values
), 0x0,
8065 { &hf_openflow_v6_port_status_pad
,
8066 { "Pad", "openflow_v6.port_status.pad",
8067 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8070 { &hf_openflow_v6_packet_out_buffer_id
,
8071 { "Buffer ID", "openflow_v6.packet_out.buffer_id",
8072 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_buffer_reserved_values
), 0x0,
8075 { &hf_openflow_v6_packet_out_acts_len
,
8076 { "Actions length", "openflow_v6.packet_out.acts_len",
8077 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8080 { &hf_openflow_v6_packet_out_pad
,
8081 { "Pad", "openflow_v6.packet_out.pad",
8082 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8085 { &hf_openflow_v6_flowmod_cookie
,
8086 { "Cookie", "openflow_v6.flowmod.cookie",
8087 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8090 { &hf_openflow_v6_flowmod_cookie_mask
,
8091 { "Cookie mask", "openflow_v6.flowmod.cookie_mask",
8092 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8095 { &hf_openflow_v6_flowmod_table_id
,
8096 { "Table ID", "openflow_v6.flowmod.table_id",
8097 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
8100 { &hf_openflow_v6_flowmod_command
,
8101 { "Command", "openflow_v6.flowmod.command",
8102 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_flowmod_command_values
), 0x0,
8105 { &hf_openflow_v6_flowmod_idle_timeout
,
8106 { "Idle timeout", "openflow_v6.flowmod.idle_timeout",
8107 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8110 { &hf_openflow_v6_flowmod_hard_timeout
,
8111 { "Hard timeout", "openflow_v6.flowmod.hard_timeout",
8112 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8115 { &hf_openflow_v6_flowmod_priority
,
8116 { "Priority", "openflow_v6.flowmod.priority",
8117 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8120 { &hf_openflow_v6_flowmod_buffer_id
,
8121 { "Buffer ID", "openflow_v6.flowmod.buffer_id",
8122 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_buffer_reserved_values
), 0x0,
8125 { &hf_openflow_v6_flowmod_out_port
,
8126 { "Out port", "openflow_v6.flowmod.out_port",
8127 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8130 { &hf_openflow_v6_flowmod_out_group
,
8131 { "Out group", "openflow_v6.flowmod.out_group",
8132 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
8135 { &hf_openflow_v6_flowmod_flags
,
8136 { "Flags", "openflow_v6.flowmod.flags",
8137 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8140 { &hf_openflow_v6_flowmod_flags_send_flow_rem
,
8141 { "Send flow removed", "openflow_v6.flowmod.flags.send_flow_rem",
8142 FT_BOOLEAN
, 16, NULL
, OFPFF_SEND_FLOW_REM
,
8145 { &hf_openflow_v6_flowmod_flags_check_overlap
,
8146 { "Check overlap", "openflow_v6.flowmod.flags.check_overlap",
8147 FT_BOOLEAN
, 16, NULL
, OFPFF_CHECK_OVERLAP
,
8150 { &hf_openflow_v6_flowmod_flags_reset_counts
,
8151 { "Reset counts", "openflow_v6.flowmod.flags.reset_counts",
8152 FT_BOOLEAN
, 16, NULL
, OFPFF_RESET_COUNTS
,
8155 { &hf_openflow_v6_flowmod_flags_no_packet_counts
,
8156 { "Don't count packets", "openflow_v6.flowmod.flags.no_packet_counts",
8157 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_PKT_COUNTS
,
8160 { &hf_openflow_v6_flowmod_flags_no_byte_counts
,
8161 { "Don't count bytes", "openflow_v6.flowmod.flags.no_byte_counts",
8162 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_BYT_COUNTS
,
8165 { &hf_openflow_v6_flowmod_importance
,
8166 { "Importance", "openflow_v6.flowmod.importance",
8167 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8170 { &hf_openflow_v6_bucket_length
,
8171 { "Length", "openflow_v6.bucket.length",
8172 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8175 { &hf_openflow_v6_bucket_weight
,
8176 { "Weight", "openflow_v6.bucket.weight",
8177 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8180 { &hf_openflow_v6_bucket_watch_port
,
8181 { "Watch port", "openflow_v6.bucket.watch_port",
8182 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8185 { &hf_openflow_v6_bucket_watch_group
,
8186 { "Watch group", "openflow_v6.bucket.watch_group",
8187 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
8190 { &hf_openflow_v6_bucket_pad
,
8191 { "Pad", "openflow_v6.bucket.pad",
8192 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8195 { &hf_openflow_v6_groupmod_command
,
8196 { "Command", "openflow_v6.groupmod.command",
8197 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_groupmod_command_values
), 0x0,
8200 { &hf_openflow_v6_groupmod_type
,
8201 { "Type", "openflow_v6.groupmod.type",
8202 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_group_type_values
), 0x0,
8205 { &hf_openflow_v6_groupmod_pad
,
8206 { "Pad", "openflow_v6.groupmod.pad",
8207 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8210 { &hf_openflow_v6_groupmod_group_id
,
8211 { "Group ID", "openflow_v6.groupmod.group_id",
8212 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
8215 { &hf_openflow_v6_groupmod_bucket_array_len
,
8216 { "Bucket Array Len", "openflow_v6.groupmod.bucket_array_len",
8217 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8220 { &hf_openflow_v6_groupmod_command_bucket_id
,
8221 { "Command Bucket id", "openflow_v6.groupmod.command_bucket_id",
8222 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8225 { &hf_openflow_v6_portmod_prop_type
,
8226 { "Type", "openflow_v6.portmod.prop.type",
8227 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_portmod_prop_type_values
), 0x0,
8230 { &hf_openflow_v6_portmod_prop_length
,
8231 { "Length", "openflow_v6.portmod.prop.length",
8232 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8235 { &hf_openflow_v6_portmod_prop_ethernet_advertise
,
8236 { "Advertise", "openflow_v6.portmod.prop_ethernet.advertise",
8237 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8240 { &hf_openflow_v6_portmod_prop_ethernet_advertise_10mb_hd
,
8241 { "OFPPF_10MB_HD", "openflow_v6.portmod.prop_ethernet.advertise.10mb_hd",
8242 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
8245 { &hf_openflow_v6_portmod_prop_ethernet_advertise_10mb_fd
,
8246 { "OFPPF_10MB_FD", "openflow_v6.portmod.prop_ethernet.advertise.10mb_fd",
8247 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
8250 { &hf_openflow_v6_portmod_prop_ethernet_advertise_100mb_hd
,
8251 { "OFPPF_100MB_HD", "openflow_v6.portmod.prop_ethernet.advertise.100mb_hd",
8252 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
8255 { &hf_openflow_v6_portmod_prop_ethernet_advertise_100mb_fd
,
8256 { "OFPPF_100MB_FD", "openflow_v6.portmod.prop_ethernet.advertise.100mb_fd",
8257 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
8260 { &hf_openflow_v6_portmod_prop_ethernet_advertise_1gb_hd
,
8261 { "OFPPF_1GB_HD", "openflow_v6.portmod.prop_ethernet.advertise.1gb_hd",
8262 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
8265 { &hf_openflow_v6_portmod_prop_ethernet_advertise_1gb_fd
,
8266 { "OFPPF_1GB_FD", "openflow_v6.portmod.prop_ethernet.advertise.1gb_fd",
8267 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
8270 { &hf_openflow_v6_portmod_prop_ethernet_advertise_10gb_fd
,
8271 { "OFPPF_10_GB_FD", "openflow_v6.portmod.prop_ethernet.advertise.10gb_fd",
8272 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
8275 { &hf_openflow_v6_portmod_prop_ethernet_advertise_40gb_fd
,
8276 { "OFPPF_40GB_FD", "openflow_v6.portmod.prop_ethernet.advertise.40gb_fd",
8277 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
8280 { &hf_openflow_v6_portmod_prop_ethernet_advertise_100gb_fd
,
8281 { "OFPPF_100_GB_FD", "openflow_v6.portmod.prop_ethernet.advertise.100_gb_fd",
8282 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
8285 { &hf_openflow_v6_portmod_prop_ethernet_advertise_1tb_fd
,
8286 { "OFPPF_1TB_FD", "openflow_v6.portmod.prop_ethernet.advertise.1tb_fd",
8287 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
8290 { &hf_openflow_v6_portmod_prop_ethernet_advertise_other
,
8291 { "OFPPF_OTHER", "openflow_v6.portmod.prop_ethernet.advertise.other",
8292 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
8295 { &hf_openflow_v6_portmod_prop_ethernet_advertise_copper
,
8296 { "OFPPF_COPPER", "openflow_v6.portmod.prop_ethernet.advertise.copper",
8297 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
8300 { &hf_openflow_v6_portmod_prop_ethernet_advertise_fiber
,
8301 { "OFPPF_FIBER", "openflow_v6.portmod.prop_ethernet.advertise.fiber",
8302 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
8305 { &hf_openflow_v6_portmod_prop_ethernet_advertise_autoneg
,
8306 { "OFPPF_AUTONEG", "openflow_v6.portmod.prop_ethernet.advertise.autoneg",
8307 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
8310 { &hf_openflow_v6_portmod_prop_ethernet_advertise_pause
,
8311 { "OFPPF_PAUSE", "openflow_v6.portmod.prop_ethernet.advertise.pause",
8312 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
8315 { &hf_openflow_v6_portmod_prop_ethernet_advertise_pause_asym
,
8316 { "OFPPF_PAUSE_ASYM", "openflow_v6.portmod.prop_ethernet.advertise.pause_asym",
8317 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
8320 { &hf_openflow_v6_portmod_prop_optical_configure
,
8321 { "Configure", "openflow_v6.portmod.prop.optical.configure",
8322 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8325 { &hf_openflow_v6_portmod_prop_optical_configure_rx_tune
,
8326 { "OFPOPF_RX_TUNE", "openflow_v6.portmod.prop.optical.configure.rx_tune",
8327 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_RX_TUNE
,
8330 { &hf_openflow_v6_portmod_prop_optical_configure_tx_tune
,
8331 { "OFPOPF_TX_TUNE", "openflow_v6.portmod.prop.optical.configure.tx_tune",
8332 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_TUNE
,
8335 { &hf_openflow_v6_portmod_prop_optical_configure_tx_pwr
,
8336 { "OFPOPF_TX_PWR", "openflow_v6.portmod.prop.optical.configure.tx_pwr",
8337 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_PWR
,
8340 { &hf_openflow_v6_portmod_prop_optical_configure_use_freq
,
8341 { "OFPOPF_USE_FREQ", "openflow_v6.portmod.prop.optical.configure.use_freq",
8342 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_USE_FREQ
,
8345 { &hf_openflow_v6_portmod_prop_optical_freq_lmda
,
8346 { "Freq. lambda", "openflow_v6.portmod.prop.optical.freq_lmda",
8347 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8350 { &hf_openflow_v6_portmod_prop_optical_fl_offset
,
8351 { "Freq. offset", "openflow_v6.portmod.prop.optical.fl_offset",
8352 FT_INT32
, BASE_DEC
, NULL
, 0x0,
8355 { &hf_openflow_v6_portmod_prop_optical_grid_span
,
8356 { "Grid span", "openflow_v6.portmod.prop.optical.grid_span",
8357 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8360 { &hf_openflow_v6_portmod_prop_optical_tx_pwr
,
8361 { "Tx power", "openflow_v6.portmod.prop.optical.tx_pwr",
8362 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8365 { &hf_openflow_v6_portmod_prop_experimenter_experimenter
,
8366 { "Experimenter", "openflow_v6.portmod.prop.experimenter.experimenter",
8367 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8370 { &hf_openflow_v6_portmod_prop_experimenter_exp_type
,
8371 { "Exp. type", "openflow_v6.portmod.prop.experimenter.exp_type",
8372 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8375 { &hf_openflow_v6_portmod_port_no
,
8376 { "Port no", "openflow_v6.portmod.port_no",
8377 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8380 { &hf_openflow_v6_portmod_pad
,
8381 { "Pad", "openflow_v6.portmod.pad",
8382 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8385 { &hf_openflow_v6_portmod_hw_addr
,
8386 { "Hw addr", "openflow_v6.portmod.hw_addr",
8387 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
8390 { &hf_openflow_v6_portmod_pad2
,
8391 { "Pad", "openflow_v6.portmod.pad2",
8392 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8395 { &hf_openflow_v6_portmod_config
,
8396 { "Config", "openflow_v6.portmod.config",
8397 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8400 { &hf_openflow_v6_portmod_config_port_down
,
8401 { "OFPPC_PORT_DOWN", "openflow_v6.portmod.config.port_down",
8402 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
8405 { &hf_openflow_v6_portmod_config_no_recv
,
8406 { "OFPPC_NO_RECV", "openflow_v6.portmod.config.no_recv",
8407 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
8410 { &hf_openflow_v6_portmod_config_no_fwd
,
8411 { "OFPPC_NO_FWD", "openflow_v6.portmod.config.no_fwd",
8412 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
8415 { &hf_openflow_v6_portmod_config_no_packet_in
,
8416 { "OFPPC_NO_PACKET_IN", "openflow_v6.portmod.config.no_packet_in",
8417 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
8420 { &hf_openflow_v6_portmod_mask
,
8421 { "Mask", "openflow_v6.portmod.mask",
8422 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8425 { &hf_openflow_v6_portmod_mask_port_down
,
8426 { "OFPPC_PORT_DOWN", "openflow_v6.portmod.mask.port_down",
8427 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
8430 { &hf_openflow_v6_portmod_mask_no_recv
,
8431 { "OFPPC_NO_RECV", "openflow_v6.portmod.mask.no_recv",
8432 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
8435 { &hf_openflow_v6_portmod_mask_no_fwd
,
8436 { "OFPPC_NO_FWD", "openflow_v6.portmod.mask.no_fwd",
8437 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
8440 { &hf_openflow_v6_portmod_mask_no_packet_in
,
8441 { "OFPPC_NO_PACKET_IN", "openflow_v6.portmod.mask.no_packet_in",
8442 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
8445 { &hf_openflow_v6_tablemod_table_id
,
8446 { "Table ID", "openflow_v6.tablemod.table_id",
8447 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
8450 { &hf_openflow_v6_tablemod_pad
,
8451 { "Pad", "openflow_v6.tablemod.pad",
8452 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8455 { &hf_openflow_v6_tablemod_config
,
8456 { "Config", "openflow_v6.tablemod.config",
8457 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8460 { &hf_openflow_v6_tablemod_config_eviction
,
8461 { "OFPTC_EVICTION", "openflow_v6.tablemod.config.eviction",
8462 FT_BOOLEAN
, 32, NULL
, OFPTC_EVICTION
,
8465 { &hf_openflow_v6_tablemod_config_vacancy_events
,
8466 { "OFPTC_VACANCY_EVENTS", "openflow_v6.tablemod.config.vacancy_events",
8467 FT_BOOLEAN
, 32, NULL
, OFPTC_VACANCY_EVENTS
,
8470 { &hf_openflow_v6_tablemod_prop_type
,
8471 { "Type", "openflow_v6.tablemod_prop.type",
8472 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_tablemod_prop_type_values
), 0x0,
8475 { &hf_openflow_v6_tablemod_prop_length
,
8476 { "Length", "openflow_v6.tablemod_prop.length",
8477 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8480 { &hf_openflow_v6_tablemod_prop_eviction_flags
,
8481 { "Flags", "openflow_v6.tablemod.prop.eviction.flags",
8482 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8485 { &hf_openflow_v6_tablemod_prop_eviction_flags_other
,
8486 { "OFPTMPEF_OTHER", "openflow_v6.tablemod.prop.eviction.flags.other",
8487 FT_BOOLEAN
, 32, NULL
, OFPTMPEF_OTHER
,
8490 { &hf_openflow_v6_tablemod_prop_eviction_flags_importance
,
8491 { "OFPTMPEF_IMPORTANCE", "openflow_v6.tablemod.prop.eviction.flags.importance",
8492 FT_BOOLEAN
, 32, NULL
, OFPTMPEF_IMPORTANCE
,
8495 { &hf_openflow_v6_tablemod_prop_eviction_flags_lifetime
,
8496 { "OFPTMPEF_LIFETIME", "openflow_v6.tablemod.prop.eviction.flags.lifetime",
8497 FT_BOOLEAN
, 32, NULL
, OFPTMPEF_LIFETIME
,
8500 { &hf_openflow_v6_tablemod_prop_vacancy_vacancy_down
,
8501 { "Vacancy down", "openflow_v6.tablemod.prop.vacancy.vacancy_down",
8502 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8505 { &hf_openflow_v6_tablemod_prop_vacancy_vacancy_up
,
8506 { "Vacancy up", "openflow_v6.tablemod.prop.vacancy.vacancy_up",
8507 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8510 { &hf_openflow_v6_tablemod_prop_vacancy_vacancy
,
8511 { "Vacancy", "openflow_v6.tablemod.prop.vacancy.vacancy",
8512 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8515 { &hf_openflow_v6_tablemod_prop_vacancy_pad
,
8516 { "Pad", "openflow_v6.tablemod.prop.vacancy.pad",
8517 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8520 { &hf_openflow_v6_tablemod_prop_experimenter_experimenter
,
8521 { "Experimenter", "openflow_v6.tablemod.prop.experimenter.experimenter",
8522 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8525 { &hf_openflow_v6_tablemod_prop_experimenter_exp_type
,
8526 { "Exp. type", "openflow_v6.tablemod.prop.experimenter.exp_type",
8527 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8530 { &hf_openflow_v6_flow_stats_request_table_id
,
8531 { "Table ID", "openflow_v6.flow_stats_request.table_id",
8532 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
8535 { &hf_openflow_v6_flow_stats_request_pad
,
8536 { "Pad", "openflow_v6.flow_stats_request.pad",
8537 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8540 { &hf_openflow_v6_flow_stats_request_out_port
,
8541 { "Out port", "openflow_v6.flow_stats_request.out_port",
8542 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8545 { &hf_openflow_v6_flow_stats_request_out_group
,
8546 { "Out group", "openflow_v6.flow_stats_request.out_group",
8547 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
8550 { &hf_openflow_v6_flow_stats_request_pad2
,
8551 { "Pad", "openflow_v6.flow_stats_request.pad2",
8552 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8555 { &hf_openflow_v6_flow_stats_request_cookie
,
8556 { "Cookie", "openflow_v6.flow_stats_request.cookie",
8557 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8560 { &hf_openflow_v6_flow_stats_request_cookie_mask
,
8561 { "Cookie mask", "openflow_v6.flow_stats_request.cookie_mask",
8562 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8565 { &hf_openflow_v6_aggregate_stats_request_table_id
,
8566 { "Table ID", "openflow_v6.aggregate_stats_request.table_id",
8567 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
8570 { &hf_openflow_v6_aggregate_stats_request_pad
,
8571 { "Pad", "openflow_v6.aggregate_stats_request.pad",
8572 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8575 { &hf_openflow_v6_aggregate_stats_request_out_port
,
8576 { "Out port", "openflow_v6.aggregate_stats_request.out_port",
8577 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8580 { &hf_openflow_v6_aggregate_stats_request_out_group
,
8581 { "Out group", "openflow_v6.aggregate_stats_request.out_group",
8582 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
8585 { &hf_openflow_v6_aggregate_stats_request_pad2
,
8586 { "Pad", "openflow_v6.aggregate_stats_request.pad2",
8587 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8590 { &hf_openflow_v6_aggregate_stats_request_cookie
,
8591 { "Cookie", "openflow_v6.aggregate_stats_request.cookie",
8592 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8595 { &hf_openflow_v6_aggregate_stats_request_cookie_mask
,
8596 { "Cookie mask", "openflow_v6.aggregate_stats_request.cookie_mask",
8597 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8600 { &hf_openflow_v6_table_feature_prop_type
,
8601 { "Type", "openflow_v6.table_feature_prop.type",
8602 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_table_feature_prop_type_values
), 0x0,
8605 { &hf_openflow_v6_table_feature_prop_length
,
8606 { "Length", "openflow_v6.table_feature_prop.length",
8607 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8610 { &hf_openflow_v6_table_feature_prop_next_tables_next_table_id
,
8611 { "Next table ID", "openflow_v6.table_feature_prop.next_tables.next_table_id",
8612 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8615 { &hf_openflow_v6_table_feature_prop_table_sync_from_table_id
,
8616 { "Sync table ID", "openflow_v6.table_feature_prop.table_sync_from.table_id",
8617 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8620 { &hf_openflow_v6_table_feature_prop_experimenter_experimenter
,
8621 { "Experimenter", "openflow_v6.table_feature_prop.experimenter.experimenter",
8622 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8625 { &hf_openflow_v6_table_feature_prop_experimenter_exp_type
,
8626 { "Experimenter type", "openflow_v6.table_feature_prop.experimenter.exp_type",
8627 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8630 { &hf_openflow_v6_table_feature_prop_pad
,
8631 { "Pad", "openflow_v6.table_feature_prop.pad",
8632 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8635 { &hf_openflow_v6_table_features_length
,
8636 { "Length", "openflow_v6.table_features.length",
8637 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8640 { &hf_openflow_v6_table_features_table_id
,
8641 { "Table ID", "openflow_v6.table_features.table_id",
8642 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8645 { &hf_openflow_v6_table_features_pad
,
8646 { "Pad", "openflow_v6.table_features.pad",
8647 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8650 { &hf_openflow_v6_table_features_name
,
8651 { "Name", "openflow_v6.table_features.name",
8652 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8655 { &hf_openflow_v6_table_features_metadata_match
,
8656 { "Metadata match", "openflow_v6.table_features.metadata_match",
8657 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8660 { &hf_openflow_v6_table_features_metadata_write
,
8661 { "Metadata write", "openflow_v6.table_features.metadata_write",
8662 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8665 { &hf_openflow_v6_table_features_capabilities
,
8666 { "Capabilities", "openflow_v6.table_features.capabilities",
8667 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8670 { &hf_openflow_v6_table_features_capabilities_eviction
,
8671 { "OFPTC_EVICTION", "openflow_v6.table_features.capabilities.eviction",
8672 FT_UINT32
, BASE_HEX
, NULL
, OFPTC_EVICTION
,
8675 { &hf_openflow_v6_table_features_capabilities_vacancy_events
,
8676 { "OFPTC_VACANCY_EVENTS", "openflow_v6.table_features.capabilities.vacancy_events",
8677 FT_UINT32
, BASE_HEX
, NULL
, OFPTC_VACANCY_EVENTS
,
8680 { &hf_openflow_v6_table_features_max_entries
,
8681 { "Max entries", "openflow_v6.table_features.max_entries",
8682 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8685 { &hf_openflow_v6_port_stats_request_port_no
,
8686 { "Port number", "openflow_v6.port_stats_request.port_no",
8687 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8690 { &hf_openflow_v6_port_stats_request_pad
,
8691 { "Pad", "openflow_v6.port_stats_request.pad",
8692 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8695 { &hf_openflow_v6_queue_stats_request_port_no
,
8696 { "Port number", "openflow_v6.queue_stats_request.port_no",
8697 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8700 { &hf_openflow_v6_queue_stats_request_queue_id
,
8701 { "Queue ID", "openflow_v6.queue_stats_request.queue_id",
8702 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_queue_reserved_values
), 0x0,
8705 { &hf_openflow_v6_group_stats_request_group_id
,
8706 { "Group ID", "openflow_v6.group_stats_request.group_id",
8707 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
8710 { &hf_openflow_v6_group_stats_request_pad
,
8711 { "Pad", "openflow_v6.group_stats_request.pad",
8712 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8715 { &hf_openflow_v6_meter_stats_request_meter_id
,
8716 { "Meter ID", "openflow_v6.meter_stats_request.meter_id",
8717 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_meter_id_reserved_values
), 0x0,
8720 { &hf_openflow_v6_meter_stats_request_pad
,
8721 { "Pad", "openflow_v6.meter_stats_request.pad",
8722 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8725 { &hf_openflow_v6_meter_desc_request_meter_id
,
8726 { "Meter ID", "openflow_v6.meter_desc_request.meter_id",
8727 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_meter_id_reserved_values
), 0x0,
8730 { &hf_openflow_v6_meter_desc_request_pad
,
8731 { "Pad", "openflow_v6.meter_desc.request.pad",
8732 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8735 { &hf_openflow_v6_queue_desc_request_port_no
,
8736 { "Port number", "openflow_v6.queue_desc_request.port_no",
8737 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8740 { &hf_openflow_v6_queue_desc_request_queue_id
,
8741 { "Queue ID", "openflow_v6.queue_desc_request.queue_id",
8742 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_queue_reserved_values
), 0x0,
8745 { &hf_openflow_v6_flow_monitor_request_monitor_id
,
8746 { "Monitor ID", "openflow_v6.flow_monitor_request.monitor_id",
8747 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8750 { &hf_openflow_v6_flow_monitor_request_out_port
,
8751 { "Out port", "openflow_v6.flow_monitor_request.out_port",
8752 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8755 { &hf_openflow_v6_flow_monitor_request_out_group
,
8756 { "Out group", "openflow_v6.flow_monitor_request.out_group",
8757 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
8760 { &hf_openflow_v6_flow_monitor_request_flags
,
8761 { "Flags", "openflow_v6.flow_monitor_request.flags",
8762 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8765 { &hf_openflow_v6_flow_monitor_request_flags_initial
,
8766 { "OFPFMF_INITIAL", "openflow_v6.flow_monitor_request.flags.initial",
8767 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_INITIAL
,
8770 { &hf_openflow_v6_flow_monitor_request_flags_add
,
8771 { "OFPFMF_ADD", "openflow_v6.flow_monitor_request.flags.add",
8772 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_ADD
,
8775 { &hf_openflow_v6_flow_monitor_request_flags_removed
,
8776 { "OFPFMF_REMOVED", "openflow_v6.flow_monitor_request.flags.removed",
8777 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_REMOVED
,
8780 { &hf_openflow_v6_flow_monitor_request_flags_modify
,
8781 { "OFPFMF_MODIFY", "openflow_v6.flow_monitor_request.flags.modify",
8782 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_MODIFY
,
8785 { &hf_openflow_v6_flow_monitor_request_flags_instructions
,
8786 { "OFPFMF_INSTRUCTIONS", "openflow_v6.flow_monitor_request.flags.instructions",
8787 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_INSTRUCTIONS
,
8790 { &hf_openflow_v6_flow_monitor_request_flags_no_abbrev
,
8791 { "OFPFMF_NO_ABBREV", "openflow_v6.flow_monitor_request.flags.no_abbrev",
8792 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_NO_ABBREV
,
8795 { &hf_openflow_v6_flow_monitor_request_flags_only_own
,
8796 { "OFPFMF_ONLY_OWN", "openflow_v6.flow_monitor_request.flags.only_own",
8797 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_ONLY_OWN
,
8800 { &hf_openflow_v6_flow_monitor_request_table_id
,
8801 { "Table ID", "openflow_v6.flow_monitor_request.table_id",
8802 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
8805 { &hf_openflow_v6_flow_monitor_request_command
,
8806 { "Command", "openflow_v6.flow_monitor_request.command",
8807 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_flow_monitor_request_command_values
), 0x0,
8810 { &hf_openflow_v6_multipart_request_type
,
8811 { "Type", "openflow_v6.multipart_request.type",
8812 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_multipart_type_values
), 0x0,
8815 { &hf_openflow_v6_multipart_request_flags
,
8816 { "Flags", "openflow_v6.multipart_request.flags",
8817 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8820 { &hf_openflow_v6_multipart_request_flags_more
,
8821 { "OFPMPF_REQ_MORE", "openflow_v6.multipart_request.flags.more",
8822 FT_UINT16
, BASE_HEX
, NULL
, OFPMPF_REQ_MORE
,
8825 { &hf_openflow_v6_multipart_request_pad
,
8826 { "Pad", "openflow_v6.multipart_request.pad",
8827 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8830 { &hf_openflow_v6_multipart_request_experimenter_experimenter
,
8831 { "Experimenter", "openflow_v6.multipart_request.experimenter.experimenter",
8832 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8835 { &hf_openflow_v6_multipart_request_experimenter_exp_type
,
8836 { "Experimenter type", "openflow_v6.multipart_request.experimenter.exp_type",
8837 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8840 { &hf_openflow_v6_switch_description_mfr_desc
,
8841 { "Manufacturer desc.", "openflow_v6.switch_description.mfr_desc",
8842 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8845 { &hf_openflow_v6_switch_description_hw_desc
,
8846 { "Hardware desc.", "openflow_v6.switch_description.hw_desc",
8847 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8850 { &hf_openflow_v6_switch_description_sw_desc
,
8851 { "Software desc.", "openflow_v6.switch_description.sw_desc",
8852 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8855 { &hf_openflow_v6_switch_description_serial_num
,
8856 { "Serial no.", "openflow_v6.switch_description.serial_num",
8857 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8860 { &hf_openflow_v6_switch_description_dp_desc
,
8861 { "Datapath desc.", "openflow_v6.switch_description.dp_desc",
8862 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8865 { &hf_openflow_v6_flow_desc_length
,
8866 { "Length", "openflow_v6.flow_desc.length",
8867 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8870 { &hf_openflow_v6_flow_desc_table_id
,
8871 { "Table ID", "openflow_v6.flow_desc.table_id",
8872 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8875 { &hf_openflow_v6_flow_desc_pad
,
8876 { "Pad", "openflow_v6.flow_desc.pad",
8877 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8880 { &hf_openflow_v6_flow_desc_priority
,
8881 { "Priority", "openflow_v6.flow_desc.priority",
8882 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8885 { &hf_openflow_v6_flow_desc_idle_timeout
,
8886 { "Idle timeout", "openflow_v6.flow_desc.idle_timeout",
8887 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8890 { &hf_openflow_v6_flow_desc_hard_timeout
,
8891 { "Hard timeout", "openflow_v6.flow_desc.hard_timeout",
8892 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8895 { &hf_openflow_v6_flow_desc_flags
,
8896 { "Flags", "openflow_v6.flow_desc.flags",
8897 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8900 { &hf_openflow_v6_flow_desc_flags_send_flow_rem
,
8901 { "Send flow removed", "openflow_v6.flow_desc.flags.send_flow_rem",
8902 FT_BOOLEAN
, 16, NULL
, OFPFF_SEND_FLOW_REM
,
8905 { &hf_openflow_v6_flow_desc_flags_check_overlap
,
8906 { "Check overlap", "openflow_v6.flow_desc.flags.check_overlap",
8907 FT_BOOLEAN
, 16, NULL
, OFPFF_CHECK_OVERLAP
,
8910 { &hf_openflow_v6_flow_desc_flags_reset_counts
,
8911 { "Reset counts", "openflow_v6.flow_desc.flags.reset_counts",
8912 FT_BOOLEAN
, 16, NULL
, OFPFF_RESET_COUNTS
,
8915 { &hf_openflow_v6_flow_desc_flags_no_packet_counts
,
8916 { "Don't count packets", "openflow_v6.flow_desc.flags.no_packet_counts",
8917 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_PKT_COUNTS
,
8920 { &hf_openflow_v6_flow_desc_flags_no_byte_counts
,
8921 { "Don't count bytes", "openflow_v6.flow_desc.flags.no_byte_counts",
8922 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_BYT_COUNTS
,
8925 { &hf_openflow_v6_flow_desc_importance
,
8926 { "Importance", "openflow_v6.flow_desc.importance",
8927 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8930 { &hf_openflow_v6_flow_desc_pad2
,
8931 { "Pad", "openflow_v6.flow_desc.pad2",
8932 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8935 { &hf_openflow_v6_flow_desc_cookie
,
8936 { "Cookie", "openflow_v6.flow_desc.cookie",
8937 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8940 { &hf_openflow_v6_table_stats_table_id
,
8941 { "Table ID", "openflow_v6.table_stats.table_id",
8942 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
8945 { &hf_openflow_v6_table_stats_pad
,
8946 { "Pad", "openflow_v6.table_stats.pad",
8947 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8950 { &hf_openflow_v6_table_stats_active_count
,
8951 { "Active count", "openflow_v6.table_stats.active_count",
8952 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8955 { &hf_openflow_v6_table_stats_lookup_count
,
8956 { "Lookup count", "openflow_v6.table_stats.lookup_count",
8957 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8960 { &hf_openflow_v6_table_stats_match_count
,
8961 { "Match count", "openflow_v6.table_stats.match_count",
8962 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8965 { &hf_openflow_v6_port_stats_length
,
8966 { "Length", "openflow_v6.port_stats.length",
8967 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8970 { &hf_openflow_v6_port_stats_pad
,
8971 { "Pad", "openflow_v6.port_stats.pad",
8972 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8975 { &hf_openflow_v6_port_stats_port_no
,
8976 { "Port number", "openflow_v6.port_stats.port_no",
8977 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
8980 { &hf_openflow_v6_port_stats_duration_sec
,
8981 { "Duration sec", "openflow_v6.port_stats.duration_sec",
8982 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8985 { &hf_openflow_v6_port_stats_duration_nsec
,
8986 { "Duration nsec", "openflow_v6.port_stats.duration_nsec",
8987 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8990 { &hf_openflow_v6_port_stats_rx_packets
,
8991 { "Rx packets", "openflow_v6.port_stats.rx_packets",
8992 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8995 { &hf_openflow_v6_port_stats_tx_packets
,
8996 { "Tx packets", "openflow_v6.port_stats.tx_packets",
8997 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9000 { &hf_openflow_v6_port_stats_rx_bytes
,
9001 { "Rx bytes", "openflow_v6.port_stats.rx_bytes",
9002 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9005 { &hf_openflow_v6_port_stats_tx_bytes
,
9006 { "Tx bytes", "openflow_v6.port_stats.tx_bytes",
9007 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9010 { &hf_openflow_v6_port_stats_rx_dropped
,
9011 { "Rx dropped", "openflow_v6.port_stats.rx_dropped",
9012 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9015 { &hf_openflow_v6_port_stats_tx_dropped
,
9016 { "Tx dropped", "openflow_v6.port_stats.tx_dropped",
9017 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9020 { &hf_openflow_v6_port_stats_rx_errors
,
9021 { "Rx errors", "openflow_v6.port_stats.rx_errors",
9022 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9025 { &hf_openflow_v6_port_stats_tx_errors
,
9026 { "Tx errors", "openflow_v6.port_stats.tx_errors",
9027 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9030 { &hf_openflow_v6_queue_stats_length
,
9031 { "Length", "openflow_v6.queue_stats.length",
9032 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9035 { &hf_openflow_v6_queue_stats_pad
,
9036 { "Pad", "openflow_v6.queue_stats.pad",
9037 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9040 { &hf_openflow_v6_queue_stats_port_no
,
9041 { "Port number", "openflow_v6.queue_stats.port_no",
9042 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
9045 { &hf_openflow_v6_queue_stats_queue_id
,
9046 { "Queue ID", "openflow_v6.queue_stats.queue_id",
9047 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_queue_reserved_values
), 0x0,
9050 { &hf_openflow_v6_queue_stats_tx_bytes
,
9051 { "Tx bytes", "openflow_v6.queue_stats.tx_bytes",
9052 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9055 { &hf_openflow_v6_queue_stats_tx_packets
,
9056 { "Tx packets", "openflow_v6.quee_stats.tx_packets",
9057 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9060 { &hf_openflow_v6_queue_stats_tx_errors
,
9061 { "Tx errors", "openflow_v6.port_stats.tx_errors",
9062 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9065 { &hf_openflow_v6_queue_stats_duration_sec
,
9066 { "Duration sec", "openflow_v6.queue_stats.duration_sec",
9067 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9070 { &hf_openflow_v6_queue_stats_duration_nsec
,
9071 { "Duration nsec", "openflow_v6.queue_stats.duration_nsec",
9072 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9075 { &hf_openflow_v6_queue_stats_prop_type
,
9076 { "Type", "openflow_v6.queue_stats_prop.type",
9077 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_queue_stats_prop_type_values
), 0x0,
9080 { &hf_openflow_v6_queue_stats_prop_length
,
9081 { "Length", "openflow_v6.queue_stats_prop.length",
9082 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9085 { &hf_openflow_v6_queue_stats_prop_experimenter_experimenter
,
9086 { "Experimenter", "openflow_v6.queue_stats_prop.experimenter.experimenter",
9087 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9090 { &hf_openflow_v6_queue_stats_prop_experimenter_exp_type
,
9091 { "Experimenter type", "openflow_v6.queue_stats_prop.experimenter.exp_type",
9092 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9095 { &hf_openflow_v6_bucket_counter_packet_count
,
9096 { "Packet count", "openflow_v6.bucket_counter.packet_count",
9097 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9100 { &hf_openflow_v6_bucket_counter_byte_count
,
9101 { "Byte count", "openflow_v6.bucket_counter.byte_count",
9102 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9105 { &hf_openflow_v6_group_stats_length
,
9106 { "Length", "openflow_v6.group_stats.length",
9107 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9110 { &hf_openflow_v6_group_stats_pad
,
9111 { "Pad", "openflow_v6.group_stats.pad",
9112 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9115 { &hf_openflow_v6_group_stats_group_id
,
9116 { "Group ID", "openflow_v6.group_stats.group_id",
9117 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
9120 { &hf_openflow_v6_group_stats_ref_count
,
9121 { "Ref. count", "openflow_v6.group_stats.ref_count",
9122 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9125 { &hf_openflow_v6_group_stats_pad2
,
9126 { "Pad", "openflow_v6.group_stats.pad2",
9127 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9130 { &hf_openflow_v6_group_stats_packet_count
,
9131 { "Packet count", "openflow_v6.group_stats.packet_count",
9132 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9135 { &hf_openflow_v6_group_stats_byte_count
,
9136 { "Byte count", "openflow_v6.group_stats.byte_count",
9137 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9140 { &hf_openflow_v6_group_desc_length
,
9141 { "Length", "openflow_v6.group_desc.length",
9142 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9145 { &hf_openflow_v6_group_desc_type
,
9146 { "Type", "openflow_v6.group_desc.type",
9147 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_group_type_values
), 0x0,
9150 { &hf_openflow_v6_group_desc_pad
,
9151 { "Pad", "openflow_v6.group_desc.pad2",
9152 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9155 { &hf_openflow_v6_group_desc_group_id
,
9156 { "Group ID", "openflow_v6.group_desc.group_id",
9157 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_group_reserved_values
), 0x0,
9160 { &hf_openflow_v6_group_features_types
,
9161 { "Types", "openflow_v6.group_features.types",
9162 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9165 { &hf_openflow_v6_group_features_types_all
,
9166 { "OFPGT_ALL", "openflow_v6.group_features.types.all",
9167 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_ALL
,
9170 { &hf_openflow_v6_group_features_types_select
,
9171 { "OFPGT_SELECT", "openflow_v6.group_features.types.select",
9172 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_SELECT
,
9175 { &hf_openflow_v6_group_features_types_indirect
,
9176 { "OFPGT_INDIRECT", "openflow_v6.group_features.types.indirect",
9177 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_INDIRECT
,
9180 { &hf_openflow_v6_group_features_types_ff
,
9181 { "OFPGT_FF", "openflow_v6.group_features.types.ff",
9182 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_FF
,
9185 { &hf_openflow_v6_group_features_capabilities
,
9186 { "Capabilities", "openflow_v6.group_features.capabilities",
9187 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9190 { &hf_openflow_v6_group_features_capabilities_select_weight
,
9191 { "OFPGFC_SELECT_WEIGHT", "openflow_v6.group_features.capabilities.select_weight",
9192 FT_BOOLEAN
, 32, NULL
, OFPGFC_SELECT_WEIGHT
,
9195 { &hf_openflow_v6_group_features_capabilities_select_liveness
,
9196 { "OFPGFC_SELECT_LIVENESS", "openflow_v6.group_features.capabilities.select_liveness",
9197 FT_BOOLEAN
, 32, NULL
, OFPGFC_SELECT_LIVENESS
,
9200 { &hf_openflow_v6_group_features_capabilities_chaining
,
9201 { "OFPGFC_CHAINING", "openflow_v6.group_features.capabilities.chaining",
9202 FT_BOOLEAN
, 32, NULL
, OFPGFC_CHAINING
,
9205 { &hf_openflow_v6_group_features_capabilities_chaining_checks
,
9206 { "OFPGFC_CHAINING_CHECKS", "openflow_v6.group_features.capabilities.chaining_checks",
9207 FT_BOOLEAN
, 32, NULL
, OFPGFC_CHAINING_CHECKS
,
9210 { &hf_openflow_v6_group_features_max_groups_all
,
9211 { "Max groups (all)", "openflow_v6.group_stats.max_groups.all",
9212 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9215 { &hf_openflow_v6_group_features_max_groups_select
,
9216 { "Max groups (select)", "openflow_v6.group_stats.max_groups.select",
9217 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9220 { &hf_openflow_v6_group_features_max_groups_indirect
,
9221 { "Max groups (indirect)", "openflow_v6.group_stats.max_groups.indirect",
9222 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9225 { &hf_openflow_v6_group_features_max_groups_ff
,
9226 { "Max groups (ff)", "openflow_v6.group_stats.max_groups.ff",
9227 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9230 { &hf_openflow_v6_group_features_actions_all
,
9231 { "Actions (all)", "openflow_v6.group_features.actions.all",
9232 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9235 { &hf_openflow_v6_group_features_actions_all_output
,
9236 { "OFPAT_OUTPUT", "openflow_v6.group_features.actions.all.output",
9237 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
9240 { &hf_openflow_v6_group_features_actions_all_copy_ttl_out
,
9241 { "OFPAT_COPY_TTL_OUT", "openflow_v6.group_features.actions.all.copy_ttl_out",
9242 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
9245 { &hf_openflow_v6_group_features_actions_all_copy_ttl_in
,
9246 { "OFPAT_COPY_TTL_IN", "openflow_v6.group_features.actions.all.copy_ttl_in",
9247 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
9250 { &hf_openflow_v6_group_features_actions_all_set_mpls_ttl
,
9251 { "OFPAT_SET_MPLS_TTL", "openflow_v6.group_features.actions.all.set_mpls_ttl",
9252 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
9255 { &hf_openflow_v6_group_features_actions_all_dec_mpls_ttl
,
9256 { "OFPAT_DEC_MPLS_TTL", "openflow_v6.group_features.actions.all.dec_mpls_ttl",
9257 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
9260 { &hf_openflow_v6_group_features_actions_all_push_vlan
,
9261 { "OFPAT_PUSH_VLAN", "openflow_v6.group_features.actions.all.push_vlan",
9262 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
9265 { &hf_openflow_v6_group_features_actions_all_pop_vlan
,
9266 { "OFPAT_POP_VLAN", "openflow_v6.group_features.actions.all.pop_vlan",
9267 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
9270 { &hf_openflow_v6_group_features_actions_all_push_mpls
,
9271 { "OFPAT_PUSH_MPLS", "openflow_v6.group_features.actions.all.push_mpls",
9272 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
9275 { &hf_openflow_v6_group_features_actions_all_pop_mpls
,
9276 { "OFPAT_POP_MPLS", "openflow_v6.group_features.actions.all.pop_mpls",
9277 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
9280 { &hf_openflow_v6_group_features_actions_all_set_queue
,
9281 { "OFPAT_SET_QUEUE", "openflow_v6.group_features.actions.all.set_queue",
9282 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
9285 { &hf_openflow_v6_group_features_actions_all_group
,
9286 { "OFPAT_GROUP", "openflow_v6.group_features.actions.all.group",
9287 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
9290 { &hf_openflow_v6_group_features_actions_all_set_nw_ttl
,
9291 { "OFPAT_SET_NW_TTL", "openflow_v6.group_features.actions.all.set_nw_ttl",
9292 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
9295 { &hf_openflow_v6_group_features_actions_all_dec_nw_ttl
,
9296 { "OFPAT_DEC_NW_TTL", "openflow_v6.group_features.actions.all.dec_nw_ttl",
9297 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
9300 { &hf_openflow_v6_group_features_actions_all_set_field
,
9301 { "OFPAT_SET_FIELD", "openflow_v6.group_features.actions.all.set_field",
9302 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
9305 { &hf_openflow_v6_group_features_actions_all_push_pbb
,
9306 { "OFPAT_PUSH_PBB", "openflow_v6.group_features.actions.all.push_pbb",
9307 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
9310 { &hf_openflow_v6_group_features_actions_all_pop_pbb
,
9311 { "OFPAT_POP_PBB", "openflow_v6.group_features.actions.all.pop_pbb",
9312 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
9315 { &hf_openflow_v6_group_features_actions_all_copy_field
,
9316 { "OFPAT_COPY_FIELD", "openflow_v6.group_features.actions.all.copy_field",
9317 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_FIELD
,
9320 { &hf_openflow_v6_group_features_actions_all_meter
,
9321 { "OFPAT_METER", "openflow_v6.group_features.actions.all.meter",
9322 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_METER
,
9325 { &hf_openflow_v6_group_features_actions_select
,
9326 { "Actions (select)", "openflow_v6.group_features.actions.select",
9327 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9330 { &hf_openflow_v6_group_features_actions_select_output
,
9331 { "OFPAT_OUTPUT", "openflow_v6.group_features.actions.select.output",
9332 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
9335 { &hf_openflow_v6_group_features_actions_select_copy_ttl_out
,
9336 { "OFPAT_COPY_TTL_OUT", "openflow_v6.group_features.actions.select.copy_ttl_out",
9337 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
9340 { &hf_openflow_v6_group_features_actions_select_copy_ttl_in
,
9341 { "OFPAT_COPY_TTL_IN", "openflow_v6.group_features.actions.select.copy_ttl_in",
9342 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
9345 { &hf_openflow_v6_group_features_actions_select_set_mpls_ttl
,
9346 { "OFPAT_SET_MPLS_TTL", "openflow_v6.group_features.actions.select.set_mpls_ttl",
9347 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
9350 { &hf_openflow_v6_group_features_actions_select_dec_mpls_ttl
,
9351 { "OFPAT_DEC_MPLS_TTL", "openflow_v6.group_features.actions.select.dec_mpls_ttl",
9352 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
9355 { &hf_openflow_v6_group_features_actions_select_push_vlan
,
9356 { "OFPAT_PUSH_VLAN", "openflow_v6.group_features.actions.select.push_vlan",
9357 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
9360 { &hf_openflow_v6_group_features_actions_select_pop_vlan
,
9361 { "OFPAT_POP_VLAN", "openflow_v6.group_features.actions.select.pop_vlan",
9362 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
9365 { &hf_openflow_v6_group_features_actions_select_push_mpls
,
9366 { "OFPAT_PUSH_MPLS", "openflow_v6.group_features.actions.select.push_mpls",
9367 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
9370 { &hf_openflow_v6_group_features_actions_select_pop_mpls
,
9371 { "OFPAT_POP_MPLS", "openflow_v6.group_features.actions.select.pop_mpls",
9372 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
9375 { &hf_openflow_v6_group_features_actions_select_set_queue
,
9376 { "OFPAT_SET_QUEUE", "openflow_v6.group_features.actions.select.set_queue",
9377 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
9380 { &hf_openflow_v6_group_features_actions_select_group
,
9381 { "OFPAT_GROUP", "openflow_v6.group_features.actions.select.group",
9382 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
9385 { &hf_openflow_v6_group_features_actions_select_set_nw_ttl
,
9386 { "OFPAT_SET_NW_TTL", "openflow_v6.group_features.actions.select.set_nw_ttl",
9387 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
9390 { &hf_openflow_v6_group_features_actions_select_dec_nw_ttl
,
9391 { "OFPAT_DEC_NW_TTL", "openflow_v6.group_features.actions.select.dec_nw_ttl",
9392 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
9395 { &hf_openflow_v6_group_features_actions_select_set_field
,
9396 { "OFPAT_SET_FIELD", "openflow_v6.group_features.actions.select.set_field",
9397 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
9400 { &hf_openflow_v6_group_features_actions_select_push_pbb
,
9401 { "OFPAT_PUSH_PBB", "openflow_v6.group_features.actions.select.push_pbb",
9402 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
9405 { &hf_openflow_v6_group_features_actions_select_pop_pbb
,
9406 { "OFPAT_POP_PBB", "openflow_v6.group_features.actions.select.pop_pbb",
9407 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
9410 { &hf_openflow_v6_group_features_actions_select_copy_field
,
9411 { "OFPAT_COPY_FIELD", "openflow_v6.group_features.actions.select.copy_field",
9412 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_FIELD
,
9415 { &hf_openflow_v6_group_features_actions_select_meter
,
9416 { "OFPAT_METER", "openflow_v6.group_features.actions.select.meter",
9417 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_METER
,
9420 { &hf_openflow_v6_group_features_actions_indirect
,
9421 { "Actions (indirect)", "openflow_v6.group_features.actions.indirect",
9422 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9425 { &hf_openflow_v6_group_features_actions_indirect_output
,
9426 { "OFPAT_OUTPUT", "openflow_v6.group_features.actions.indirect.output",
9427 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
9430 { &hf_openflow_v6_group_features_actions_indirect_copy_ttl_out
,
9431 { "OFPAT_COPY_TTL_OUT", "openflow_v6.group_features.actions.indirect.copy_ttl_out",
9432 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
9435 { &hf_openflow_v6_group_features_actions_indirect_copy_ttl_in
,
9436 { "OFPAT_COPY_TTL_IN", "openflow_v6.group_features.actions.indirect.copy_ttl_in",
9437 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
9440 { &hf_openflow_v6_group_features_actions_indirect_set_mpls_ttl
,
9441 { "OFPAT_SET_MPLS_TTL", "openflow_v6.group_features.actions.indirect.set_mpls_ttl",
9442 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
9445 { &hf_openflow_v6_group_features_actions_indirect_dec_mpls_ttl
,
9446 { "OFPAT_DEC_MPLS_TTL", "openflow_v6.group_features.actions.indirect.dec_mpls_ttl",
9447 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
9450 { &hf_openflow_v6_group_features_actions_indirect_push_vlan
,
9451 { "OFPAT_PUSH_VLAN", "openflow_v6.group_features.actions.indirect.push_vlan",
9452 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
9455 { &hf_openflow_v6_group_features_actions_indirect_pop_vlan
,
9456 { "OFPAT_POP_VLAN", "openflow_v6.group_features.actions.indirect.pop_vlan",
9457 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
9460 { &hf_openflow_v6_group_features_actions_indirect_push_mpls
,
9461 { "OFPAT_PUSH_MPLS", "openflow_v6.group_features.actions.indirect.push_mpls",
9462 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
9465 { &hf_openflow_v6_group_features_actions_indirect_pop_mpls
,
9466 { "OFPAT_POP_MPLS", "openflow_v6.group_features.actions.indirect.pop_mpls",
9467 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
9470 { &hf_openflow_v6_group_features_actions_indirect_set_queue
,
9471 { "OFPAT_SET_QUEUE", "openflow_v6.group_features.actions.indirect.set_queue",
9472 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
9475 { &hf_openflow_v6_group_features_actions_indirect_group
,
9476 { "OFPAT_GROUP", "openflow_v6.group_features.actions.indirect.group",
9477 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
9480 { &hf_openflow_v6_group_features_actions_indirect_set_nw_ttl
,
9481 { "OFPAT_SET_NW_TTL", "openflow_v6.group_features.actions.indirect.set_nw_ttl",
9482 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
9485 { &hf_openflow_v6_group_features_actions_indirect_dec_nw_ttl
,
9486 { "OFPAT_DEC_NW_TTL", "openflow_v6.group_features.actions.indirect.dec_nw_ttl",
9487 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
9490 { &hf_openflow_v6_group_features_actions_indirect_set_field
,
9491 { "OFPAT_SET_FIELD", "openflow_v6.group_features.actions.indirect.set_field",
9492 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
9495 { &hf_openflow_v6_group_features_actions_indirect_push_pbb
,
9496 { "OFPAT_PUSH_PBB", "openflow_v6.group_features.actions.indirect.push_pbb",
9497 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
9500 { &hf_openflow_v6_group_features_actions_indirect_pop_pbb
,
9501 { "OFPAT_POP_PBB", "openflow_v6.group_features.actions.indirect.pop_pbb",
9502 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
9505 { &hf_openflow_v6_group_features_actions_indirect_copy_field
,
9506 { "OFPAT_COPY_FIELD", "openflow_v6.group_features.actions.indirect.copy_field",
9507 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_FIELD
,
9510 { &hf_openflow_v6_group_features_actions_indirect_meter
,
9511 { "OFPAT_METER", "openflow_v6.group_features.actions.indirect.meter",
9512 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_METER
,
9515 { &hf_openflow_v6_group_features_actions_ff
,
9516 { "Actions (ff)", "openflow_v6.group_features.actions.ff",
9517 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9520 { &hf_openflow_v6_group_features_actions_ff_output
,
9521 { "OFPAT_OUTPUT", "openflow_v6.group_features.actions.ff.output",
9522 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
9525 { &hf_openflow_v6_group_features_actions_ff_copy_ttl_out
,
9526 { "OFPAT_COPY_TTL_OUT", "openflow_v6.group_features.actions.ff.copy_ttl_out",
9527 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
9530 { &hf_openflow_v6_group_features_actions_ff_copy_ttl_in
,
9531 { "OFPAT_COPY_TTL_IN", "openflow_v6.group_features.actions.ff.copy_ttl_in",
9532 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
9535 { &hf_openflow_v6_group_features_actions_ff_set_mpls_ttl
,
9536 { "OFPAT_SET_MPLS_TTL", "openflow_v6.group_features.actions.ff.set_mpls_ttl",
9537 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
9540 { &hf_openflow_v6_group_features_actions_ff_dec_mpls_ttl
,
9541 { "OFPAT_DEC_MPLS_TTL", "openflow_v6.group_features.actions.ff.dec_mpls_ttl",
9542 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
9545 { &hf_openflow_v6_group_features_actions_ff_push_vlan
,
9546 { "OFPAT_PUSH_VLAN", "openflow_v6.group_features.actions.ff.push_vlan",
9547 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
9550 { &hf_openflow_v6_group_features_actions_ff_pop_vlan
,
9551 { "OFPAT_POP_VLAN", "openflow_v6.group_features.actions.ff.pop_vlan",
9552 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
9555 { &hf_openflow_v6_group_features_actions_ff_push_mpls
,
9556 { "OFPAT_PUSH_MPLS", "openflow_v6.group_features.actions.ff.push_mpls",
9557 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
9560 { &hf_openflow_v6_group_features_actions_ff_pop_mpls
,
9561 { "OFPAT_POP_MPLS", "openflow_v6.group_features.actions.ff.pop_mpls",
9562 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
9565 { &hf_openflow_v6_group_features_actions_ff_set_queue
,
9566 { "OFPAT_SET_QUEUE", "openflow_v6.group_features.actions.ff.set_queue",
9567 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
9570 { &hf_openflow_v6_group_features_actions_ff_group
,
9571 { "OFPAT_GROUP", "openflow_v6.group_features.actions.ff.group",
9572 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
9575 { &hf_openflow_v6_group_features_actions_ff_set_nw_ttl
,
9576 { "OFPAT_SET_NW_TTL", "openflow_v6.group_features.actions.ff.set_nw_ttl",
9577 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
9580 { &hf_openflow_v6_group_features_actions_ff_dec_nw_ttl
,
9581 { "OFPAT_DEC_NW_TTL", "openflow_v6.group_features.actions.ff.dec_nw_ttl",
9582 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
9585 { &hf_openflow_v6_group_features_actions_ff_set_field
,
9586 { "OFPAT_SET_FIELD", "openflow_v6.group_features.actions.ff.set_field",
9587 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
9590 { &hf_openflow_v6_group_features_actions_ff_push_pbb
,
9591 { "OFPAT_PUSH_PBB", "openflow_v6.group_features.actions.ff.push_pbb",
9592 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
9595 { &hf_openflow_v6_group_features_actions_ff_pop_pbb
,
9596 { "OFPAT_POP_PBB", "openflow_v6.group_features.actions.ff.pop_pbb",
9597 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
9600 { &hf_openflow_v6_group_features_actions_ff_copy_field
,
9601 { "OFPAT_COPY_FIELD", "openflow_v6.group_features.actions.ff.copy_field",
9602 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_FIELD
,
9605 { &hf_openflow_v6_group_features_actions_ff_meter
,
9606 { "OFPAT_METER", "openflow_v6.group_features.actions.ff.meter",
9607 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_METER
,
9610 { &hf_openflow_v6_meter_band_stats_packet_band_count
,
9611 { "Packet count", "openflow_v6.meter_band_stats.packet_band_count",
9612 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9615 { &hf_openflow_v6_meter_band_stats_byte_band_count
,
9616 { "Byte count", "openflow_v6.meter_band_stats.byte_band_count",
9617 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9620 { &hf_openflow_v6_meter_stats_meter_id
,
9621 { "Meter ID", "openflow_v6.meter_stats.meter_id",
9622 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_meter_id_reserved_values
), 0x0,
9625 { &hf_openflow_v6_meter_stats_len
,
9626 { "Length", "openflow_v6.meter_stats.length",
9627 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9630 { &hf_openflow_v6_meter_stats_pad
,
9631 { "Pad", "openflow_v6.meter_stats.pad",
9632 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9635 { &hf_openflow_v6_meter_stats_flow_count
,
9636 { "Flow count", "openflow_v6.meter_stats.flow_count",
9637 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9640 { &hf_openflow_v6_meter_stats_packet_in_count
,
9641 { "Packet in count", "openflow_v6.meter_stats.packet_in_count",
9642 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9645 { &hf_openflow_v6_meter_stats_byte_in_count
,
9646 { "Byte in count", "openflow_v6.meter_stats.byte_in_count",
9647 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9650 { &hf_openflow_v6_meter_stats_duration_sec
,
9651 { "Duration sec", "openflow_v6.meter_stats.duration_sec",
9652 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9655 { &hf_openflow_v6_meter_stats_duration_nsec
,
9656 { "Duration nsec", "openflow_v6.meter_stats.duration_nsec",
9657 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9660 { &hf_openflow_v6_meter_desc_len
,
9661 { "Length", "openflow_v6.meter_desc.len",
9662 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9665 { &hf_openflow_v6_meter_desc_flags
,
9666 { "Flags", "openflow_v6.meter_desc.flags",
9667 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9670 { &hf_openflow_v6_meter_desc_flags_kbps
,
9671 { "OFPMF_KBPS", "openflow_v6.meter_desc.flags.kbps",
9672 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
9675 { &hf_openflow_v6_meter_desc_flags_pktps
,
9676 { "OFPMF_PKTPS", "openflow_v6.meter_desc.flags.ptkps",
9677 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
9680 { &hf_openflow_v6_meter_desc_flags_burst
,
9681 { "OFPMF_BURST", "openflow_v6.meter_desc.flags.burst",
9682 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
9685 { &hf_openflow_v6_meter_desc_flags_stats
,
9686 { "OFPMF_STATS", "openflow_v6.meter_desc.flags.stats",
9687 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
9690 { &hf_openflow_v6_meter_desc_meter_id
,
9691 { "Meter ID", "openflow_v6.meter_desc.meter_id",
9692 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_meter_id_reserved_values
), 0x0,
9695 { &hf_openflow_v6_meter_features_max_meter
,
9696 { "Max meters", "openflow_v6.meter_features.max_meter",
9697 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9700 { &hf_openflow_v6_meter_features_band_types
,
9701 { "Band types", "openflow_v6.features.band_types",
9702 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9705 { &hf_openflow_v6_meter_features_band_types_drop
,
9706 { "OFPMBT_DROP", "openflow_v6.meter_features.band_types.drop",
9707 FT_BOOLEAN
, 32, NULL
, 1 << OFPMBT_DROP
,
9710 { &hf_openflow_v6_meter_features_band_types_dscp_remark
,
9711 { "OFPMBT_DSCP_REMARK", "openflow_v6.meter_features.band_types.dscp_remark",
9712 FT_BOOLEAN
, 32, NULL
, 1 << OFPMBT_DSCP_REMARK
,
9715 { &hf_openflow_v6_meter_features_capabilities
,
9716 { "Capabilities", "openflow_v6.meter_features.capabilities",
9717 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9720 { &hf_openflow_v6_meter_features_capabilities_kbps
,
9721 { "OFPMF_KBPS", "openflow_v6.meter_features.capabilities.kbps",
9722 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
9725 { &hf_openflow_v6_meter_features_capabilities_pktps
,
9726 { "OFPMF_PKTPS", "openflow_v6.meter_features.capabilities.ptkps",
9727 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
9730 { &hf_openflow_v6_meter_features_capabilities_burst
,
9731 { "OFPMF_BURST", "openflow_v6.meter_features.capabilities.burst",
9732 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
9735 { &hf_openflow_v6_meter_features_capabilities_stats
,
9736 { "OFPMF_STATS", "openflow_v6.meter_features.capabilities.stats",
9737 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
9740 { &hf_openflow_v6_meter_features_max_bands
,
9741 { "Max bands", "openflow_v6.meter_features.max_bands",
9742 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9745 { &hf_openflow_v6_meter_features_max_color
,
9746 { "Max colors", "openflow_v6.meter_features.max_color",
9747 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9750 { &hf_openflow_v6_meter_features_pad
,
9751 { "Pad", "openflow_v6.meter_features.pad",
9752 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9755 { &hf_openflow_v6_flow_update_length
,
9756 { "Length", "openflow_v6.flow_update.length",
9757 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9760 { &hf_openflow_v6_flow_update_event
,
9761 { "Length", "openflow_v6.flow_update.event",
9762 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_flow_monitor_events
), 0x0,
9765 { &hf_openflow_v6_flow_update_full_table_id
,
9766 { "Table ID", "openflow_v6.flow_update.full.table_id",
9767 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
9770 { &hf_openflow_v6_flow_update_full_reason
,
9771 { "Reason", "openflow_v6.flow_update.full.reason",
9772 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_flow_removed_reason_values
), 0x0,
9775 { &hf_openflow_v6_flow_update_full_zero
,
9776 { "Zero", "openflow_v6.flow_update.full.zero",
9777 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9780 { &hf_openflow_v6_flow_update_full_idle_timeout
,
9781 { "Idle timeout", "openflow_v6.flow_update.full.idle_timeout",
9782 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9785 { &hf_openflow_v6_flow_update_full_hard_timeout
,
9786 { "Hard timeout", "openflow_v6.flow_update.full.hard_timeout",
9787 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9790 { &hf_openflow_v6_flow_update_full_priority
,
9791 { "Priority", "openflow_v6.flow_update.full.priority",
9792 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9795 { &hf_openflow_v6_flow_update_full_zeros
,
9796 { "Zeros", "openflow_v6.flow_update.full.zeros",
9797 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9800 { &hf_openflow_v6_flow_update_full_cookie
,
9801 { "Cookie", "openflow_v6.flow_update.full.cookie",
9802 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
9805 { &hf_openflow_v6_flow_update_abbrev_xid
,
9806 { "Transaction ID", "openflow_v6.flow_update.abbrev.xid",
9807 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9810 { &hf_openflow_v6_flow_update_paused_zeros
,
9811 { "Zeros", "openflow_v6.flow_update.paused.zeros",
9812 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9815 { &hf_openflow_v6_multipart_reply_type
,
9816 { "Type", "openflow_v6.multipart_reply.type",
9817 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_multipart_type_values
), 0x0,
9820 { &hf_openflow_v6_multipart_reply_flags
,
9821 { "Flags", "openflow_v6.multipart_reply.flags",
9822 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
9825 { &hf_openflow_v6_multipart_reply_flags_more
,
9826 { "OFPMPF_REPLY_MORE", "openflow_v6.multipart_reply.flags.more",
9827 FT_UINT16
, BASE_HEX
, NULL
, OFPMPF_REPLY_MORE
,
9830 { &hf_openflow_v6_multipart_reply_pad
,
9831 { "Pad", "openflow_v6.multipart_reply.pad",
9832 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9835 { &hf_openflow_v6_multipart_reply_experimenter_experimenter
,
9836 { "Experimenter", "openflow_v6.multipart_reply.experimenter.experimenter",
9837 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9840 { &hf_openflow_v6_multipart_reply_experimenter_exp_type
,
9841 { "Experimenter type", "openflow_v6.multipart_reply.experimenter.exp_type",
9842 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9845 { &hf_openflow_v6_table_desc_length
,
9846 { "Length", "openflow_v6.table_desc.length",
9847 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9850 { &hf_openflow_v6_table_desc_table_id
,
9851 { "Table ID", "openflow_v6.table_desc.table_id",
9852 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_table_reserved_values
), 0x0,
9855 { &hf_openflow_v6_table_desc_pad
,
9856 { "Pad", "openflow_v6.table_desc.pad",
9857 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9860 { &hf_openflow_v6_table_desc_config
,
9861 { "Config", "openflow_v6.table_desc.config",
9862 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9865 { &hf_openflow_v6_table_desc_config_eviction
,
9866 { "OFPTC_EVICTION", "openflow_v6.table_desc.config.eviction",
9867 FT_BOOLEAN
, 32, NULL
, OFPTC_EVICTION
,
9870 { &hf_openflow_v6_table_desc_config_vacancy_events
,
9871 { "OFPTC_VACANCY_EVENTS", "openflow_v6.table_desc.config.vacancy_events",
9872 FT_BOOLEAN
, 32, NULL
, OFPTC_VACANCY_EVENTS
,
9875 { &hf_openflow_v6_queue_desc_port_no
,
9876 { "Port", "openflow_v6.queue_desc.port_no",
9877 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
9880 { &hf_openflow_v6_queue_desc_queue_id
,
9881 { "Queue ID", "openflow_v6.queue_desc.queue_id",
9882 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_queue_reserved_values
), 0x0,
9885 { &hf_openflow_v6_queue_desc_len
,
9886 { "Length", "openflow_v6.queue_desc.len",
9887 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9890 { &hf_openflow_v6_queue_desc_pad
,
9891 { "Pad", "openflow_v6.queue_desc.pad",
9892 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9895 { &hf_openflow_v6_queue_desc_prop_property
,
9896 { "Property", "openflow_v6.queue_desc_prop.property",
9897 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_queue_desc_prop_property_values
), 0x0,
9900 { &hf_openflow_v6_queue_desc_prop_len
,
9901 { "Length", "openflow_v6.queue_desc_prop.len",
9902 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9905 { &hf_openflow_v6_queue_desc_prop_pad
,
9906 { "Pad", "openflow_v6.queue_desc_prop.pad",
9907 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9910 { &hf_openflow_v6_queue_desc_prop_min_rate_rate
,
9911 { "Rate", "openflow_v6.queue_desc_prop.min_rate.rate",
9912 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_queue_desc_prop_min_rate_reserved_values
), 0x0,
9915 { &hf_openflow_v6_queue_desc_prop_min_rate_pad
,
9916 { "Pad", "openflow_v6.queue_desc_prop.min_rate.pad",
9917 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9920 { &hf_openflow_v6_queue_desc_prop_max_rate_rate
,
9921 { "Rate", "openflow_v6.queue_desc_prop.max_rate.rate",
9922 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_queue_desc_prop_max_rate_reserved_values
), 0x0,
9925 { &hf_openflow_v6_queue_desc_prop_max_rate_pad
,
9926 { "Pad", "openflow_v6.queue_desc_prop.max_rate.pad",
9927 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9930 { &hf_openflow_v6_queue_desc_prop_experimenter_experimenter
,
9931 { "Experimenter", "openflow_v6.queue_desc_prop.experimenter.experimenter",
9932 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9935 { &hf_openflow_v6_queue_desc_prop_experimenter_exp_type
,
9936 { "Exp type", "openflow_v6.queue_desc_prop.experimenter.exp_type",
9937 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9940 { &hf_openflow_v6_role_request_role
,
9941 { "Role", "openflow_v6.role_request.role",
9942 FT_UINT32
, BASE_HEX
, VALS(openflow_v6_controller_role_values
), 0x0,
9945 { &hf_openflow_v6_role_request_pad
,
9946 { "Pad", "openflow_v6.role_request.pad",
9947 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9950 { &hf_openflow_v6_role_request_generation_id
,
9951 { "Generation ID", "openflow_v6.role_request.generation_id",
9952 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
9955 { &hf_openflow_v6_role_reply_role
,
9956 { "Role", "openflow_v6.role_reply.role",
9957 FT_UINT32
, BASE_HEX
, VALS(openflow_v6_controller_role_values
), 0x0,
9960 { &hf_openflow_v6_role_reply_pad
,
9961 { "Pad", "openflow_v6.role_reply.pad",
9962 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9965 { &hf_openflow_v6_role_reply_generation_id
,
9966 { "Generation ID", "openflow_v6.role_reply.generation_id",
9967 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
9970 { &hf_openflow_v6_async_config_prop_type
,
9971 { "Type", "openflow_v6.async_config_prop.type",
9972 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_async_config_prop_type_values
), 0x0,
9975 { &hf_openflow_v6_async_config_prop_length
,
9976 { "Length", "openflow_v6.async_config_prop.length",
9977 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9980 { &hf_openflow_v6_async_config_prop_reason_packet_in_mask
,
9981 { "Mask", "openflow_v6.async_config_prop.reason.packet_in.mask",
9982 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9985 { &hf_openflow_v6_async_config_prop_reason_packet_in_mask_table_miss
,
9986 { "OFPR_TABLE_MISS", "openflow_v6.async_config_prop.reason.packet_in.mask.table_miss",
9987 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_TABLE_MISS
,
9990 { &hf_openflow_v6_async_config_prop_reason_packet_in_mask_apply_action
,
9991 { "OFPR_APPLY_ACTION", "openflow_v6.async_config_prop.reason.packet_in.mask.apply_action",
9992 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_APPLY_ACTION
,
9995 { &hf_openflow_v6_async_config_prop_reason_packet_in_mask_invalid_ttl
,
9996 { "OFPR_INVALID_TTL", "openflow_v6.async_config_prop.reason.packet_in.mask.invalid_ttl",
9997 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_INVALID_TTL
,
10000 { &hf_openflow_v6_async_config_prop_reason_packet_in_mask_action_set
,
10001 { "OFPR_ACTION_SET", "openflow_v6.async_config_prop.reason.packet_in.mask.action_set",
10002 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_ACTION_SET
,
10005 { &hf_openflow_v6_async_config_prop_reason_packet_in_mask_group
,
10006 { "OFPR_GROUP", "openflow_v6.async_config_prop.reason.packet_in.mask.group",
10007 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_GROUP
,
10010 { &hf_openflow_v6_async_config_prop_reason_packet_in_mask_packet_out
,
10011 { "OFPR_PACKET_OUT", "openflow_v6.async_config_prop.reason.packet_in.mask.packet_out",
10012 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_PACKET_OUT
,
10015 { &hf_openflow_v6_async_config_prop_reason_port_status_mask
,
10016 { "Mask", "openflow_v6.async_config_prop.reason.port_status.mask",
10017 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10020 { &hf_openflow_v6_async_config_prop_reason_port_status_mask_add
,
10021 { "OFPPR_ADD", "openflow_v6.async_config_prop.reason.port_status.mask.add",
10022 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_ADD
,
10025 { &hf_openflow_v6_async_config_prop_reason_port_status_mask_delete
,
10026 { "OFPPR_DELETE", "openflow_v6.async_config_prop.reason.port_status.mask.delete",
10027 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_DELETE
,
10030 { &hf_openflow_v6_async_config_prop_reason_port_status_mask_modify
,
10031 { "OFPPR_MODIFY", "openflow_v6.async_config_prop.reason.port_status.mask.modify",
10032 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_MODIFY
,
10035 { &hf_openflow_v6_async_config_prop_reason_flow_removed_mask
,
10036 { "Mask", "openflow_v6.async_config_prop.reason.flow_removed.mask",
10037 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10040 { &hf_openflow_v6_async_config_prop_reason_flow_removed_mask_idle_timeout
,
10041 { "OFPRR_IDLE_TIMEOUT", "openflow_v6.async_config_prop.reason.flow_removed.mask.idle_timeout",
10042 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_IDLE_TIMEOUT
,
10045 { &hf_openflow_v6_async_config_prop_reason_flow_removed_mask_hard_timeout
,
10046 { "OFPRR_HARD_TIMEOUT", "openflow_v6.async_config_prop.reason.flow_removed.mask.hard_timeout",
10047 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_HARD_TIMEOUT
,
10050 { &hf_openflow_v6_async_config_prop_reason_flow_removed_mask_delete
,
10051 { "OFPRR_DELETE", "openflow_v6.async_config_prop.reason.flow_removed.mask.delete",
10052 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_DELETE
,
10055 { &hf_openflow_v6_async_config_prop_reason_flow_removed_mask_group_delete
,
10056 { "OFPRR_GROUP_DELETE", "openflow_v6.async_config_prop.reason.flow_removed.mask.group_delete",
10057 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_GROUP_DELETE
,
10060 { &hf_openflow_v6_async_config_prop_reason_flow_removed_mask_meter_delete
,
10061 { "OFPRR_METER_DELETE", "openflow_v6.async_config_prop.reason.flow_removed.mask.meter_delete",
10062 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_METER_DELETE
,
10065 { &hf_openflow_v6_async_config_prop_reason_flow_removed_mask_eviction
,
10066 { "OFPRR_EVICTION", "openflow_v6.async_config_prop.reason.flow_removed.mask.eviction",
10067 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_EVICTION
,
10070 { &hf_openflow_v6_async_config_prop_reason_role_status_mask
,
10071 { "Mask", "openflow_v6.async_config_prop.reason.role_status.mask",
10072 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10075 { &hf_openflow_v6_async_config_prop_reason_role_status_mask_master_request
,
10076 { "OFPCRR_MASTER_REQUEST", "openflow_v6.async_config_prop.reason.role_status.mask.master_request",
10077 FT_BOOLEAN
, 32, NULL
, 1 << OFPCRR_MASTER_REQUEST
,
10080 { &hf_openflow_v6_async_config_prop_reason_role_status_mask_config
,
10081 { "OFPCRR_CONFIG", "openflow_v6.async_config_prop.reason.role_status.mask.config",
10082 FT_BOOLEAN
, 32, NULL
, 1 << OFPCRR_CONFIG
,
10085 { &hf_openflow_v6_async_config_prop_reason_role_status_mask_experimenter
,
10086 { "OFPCRR_EXPERIMENTER", "openflow_v6.async_config_prop.reason.role_status.mask.experimenter",
10087 FT_BOOLEAN
, 32, NULL
, 1 << OFPCRR_EXPERIMENTER
,
10090 { &hf_openflow_v6_async_config_prop_reason_table_status_mask
,
10091 { "Mask", "openflow_v6.async_config_prop.reason.table_status.mask",
10092 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10096 { &hf_openflow_v6_async_config_prop_reason_table_status_mask_vacancy_down
,
10097 { "OFPTR_VACANCY_DOWN", "openflow_v6.async_config_prop.reason.table_status.mask.vacancy_u",
10098 FT_BOOLEAN
, 32, NULL
, 1 << OFPTR_VACANCY_DOWN
,
10101 { &hf_openflow_v6_async_config_prop_reason_table_status_mask_vacancy_up
,
10102 { "OFPTR_VACANCY_UP", "openflow_v6.async_config_prop.reason.table_status.mask.vacancy_up",
10103 FT_BOOLEAN
, 32, NULL
, 1 << OFPTR_VACANCY_UP
,
10106 { &hf_openflow_v6_async_config_prop_reason_requestforward_mask
,
10107 { "Mask", "openflow_v6.async_config_prop.reason.requestforward.mask",
10108 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10111 { &hf_openflow_v6_async_config_prop_reason_requestforward_mask_group_mod
,
10112 { "OFPRFR_GROUP_MOD", "openflow_v6.async_config_prop.reason.requestforward.mask.group_mod",
10113 FT_BOOLEAN
, 32, NULL
, 1 << OFPRFR_GROUP_MOD
,
10116 { &hf_openflow_v6_async_config_prop_reason_requestforward_mask_meter_mod
,
10117 { "OFPRFR_METER_MOD", "openflow_v6.async_config_prop.reason.requestforward.mask.meter_mod",
10118 FT_BOOLEAN
, 32, NULL
, 1 << OFPRFR_METER_MOD
,
10121 { &hf_openflow_v6_async_config_prop_experimenter_experimenter
,
10122 { "Experimenter", "openflow_v6.async_config_prop.experimenter.experimenter",
10123 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10126 { &hf_openflow_v6_async_config_prop_experimenter_exp_type
,
10127 { "Exp type", "openflow_v6.async_config_prop.experimenter.exp_type",
10128 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10131 { &hf_openflow_v6_metermod_command
,
10132 { "Command", "openflow_v6.metermod.command",
10133 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_metermod_command_values
), 0x0,
10136 { &hf_openflow_v6_metermod_flags
,
10137 { "Flags", "openflow_v6.metermod.flags",
10138 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10141 { &hf_openflow_v6_metermod_flags_kbps
,
10142 { "OFPMF_KBPS", "openflow_v6.metermod.flags.kbps",
10143 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
10146 { &hf_openflow_v6_metermod_flags_pktps
,
10147 { "OFPMF_PKTPS", "openflow_v6.metermod.flags.ptkps",
10148 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
10151 { &hf_openflow_v6_metermod_flags_burst
,
10152 { "OFPMF_BURST", "openflow_v6.metermod.flags.burst",
10153 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
10156 { &hf_openflow_v6_metermod_flags_stats
,
10157 { "OFPMF_STATS", "openflow_v6.metermod.flags.stats",
10158 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
10161 { &hf_openflow_v6_metermod_meter_id
,
10162 { "Meter ID", "openflow_v6.metermod.meter_id",
10163 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_meter_id_reserved_values
), 0x0,
10166 { &hf_openflow_v6_role_status_role
,
10167 { "Role", "openflow_v6.role_status.role",
10168 FT_UINT32
, BASE_HEX
, VALS(openflow_v6_controller_role_values
), 0x0,
10171 { &hf_openflow_v6_role_status_reason
,
10172 { "Reason", "openflow_v6.role_status.reason",
10173 FT_UINT8
, BASE_HEX
, VALS(openflow_v6_role_status_reason_values
), 0x0,
10176 { &hf_openflow_v6_role_status_pad
,
10177 { "Pad", "openflow_v6.role_status.pad",
10178 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10181 { &hf_openflow_v6_role_status_generation_id
,
10182 { "Generation ID", "openflow_v6.role_status.generation_id",
10183 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
10186 { &hf_openflow_v6_table_status_reason
,
10187 { "Reason", "openflow_v6.table_status.reason",
10188 FT_UINT8
, BASE_HEX
, VALS(openflow_v6_table_status_reason_values
), 0x0,
10191 { &hf_openflow_v6_table_status_pad
,
10192 { "Pad", "openflow_v6.table_status.pad",
10193 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10196 { &hf_openflow_v6_bundle_control_bundle_id
,
10197 { "Bundle ID", "openflow_v6.bundle_control.bundle_id",
10198 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10201 { &hf_openflow_v6_bundle_control_type
,
10202 { "Type", "openflow_v6.bundle_control.type",
10203 FT_UINT16
, BASE_HEX
, VALS(openflow_v6_bundle_control_type_values
), 0x0,
10206 { &hf_openflow_v6_bundle_control_flags
,
10207 { "Flags", "openflow_v6.bundle_control.flags",
10208 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
10211 { &hf_openflow_v6_bundle_control_flags_atomic
,
10212 { "OFPBF_ATOMIC", "openflow_v6.bundle_control.flags.atomic",
10213 FT_BOOLEAN
, 16, NULL
, OFPBF_ATOMIC
,
10216 { &hf_openflow_v6_bundle_control_flags_ordered
,
10217 { "OFPBF_ORDERED", "openflow_v6.bundle_control.flags.ordered",
10218 FT_BOOLEAN
, 16, NULL
, OFPBF_ORDERED
,
10221 { &hf_openflow_v6_bundle_prop_type
,
10222 { "Type", "openflow_v6.bundle_prop.type",
10223 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_bundle_prop_type_values
), 0x0,
10226 { &hf_openflow_v6_bundle_prop_length
,
10227 { "Length", "openflow_v6.bundle_prop.length",
10228 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10231 { &hf_openflow_v6_bundle_prop_experimenter_experimenter
,
10232 { "Experimenter", "openflow_v6.bundle_prop.experimenter.experimenter",
10233 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10236 { &hf_openflow_v6_bundle_prop_experimenter_exp_type
,
10237 { "Exp type", "openflow_v6.bundle_prop.experimenter.exp_type",
10238 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10241 { &hf_openflow_v6_bundle_add_bundle_id
,
10242 { "Bundle ID", "openflow_v6.bundle_add.bundle_id",
10243 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10246 { &hf_openflow_v6_bundle_add_pad
,
10247 { "Pad", "openflow_v6.table_status.pad",
10248 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10251 { &hf_openflow_v6_bundle_add_flags
,
10252 { "Flags", "openflow_v6.bundle_add.flags",
10253 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
10256 { &hf_openflow_v6_bundle_add_flags_atomic
,
10257 { "OFPBF_ATOMIC", "openflow_v6.bundle_add.flags.atomic",
10258 FT_BOOLEAN
, 16, NULL
, OFPBF_ATOMIC
,
10261 { &hf_openflow_v6_bundle_add_flags_ordered
,
10262 { "OFPBF_ORDERED", "openflow_v6.bundle_add.flags.ordered",
10263 FT_BOOLEAN
, 16, NULL
, OFPBF_ORDERED
,
10266 { &hf_openflow_v6_oxs_class
,
10267 { "Class", "openflow_v6.oxs.class",
10268 FT_UINT16
, BASE_HEX
, VALS(openflow_v6_oxs_class_values
), 0x0,
10271 { &hf_openflow_v6_oxs_field
,
10272 { "Field", "openflow_v6.oxs.field",
10273 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_oxs_basic_field_values
), OXS_FIELD_MASK
,
10276 { &hf_openflow_v6_oxs_reserved
,
10277 { "Reserved", "openflow_v6.oxs.reserved",
10278 FT_UINT8
, BASE_HEX
, NULL
, OXS_RESERVED_MASK
,
10281 { &hf_openflow_v6_oxs_length
,
10282 { "Length", "openflow_v6.oxs.length",
10283 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10286 { &hf_openflow_v6_oxs_basic_duration_sec
,
10287 { "Duration", "openflow_v6.oxs.duration_sec",
10288 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10291 { &hf_openflow_v6_oxs_basic_duration_nsec
,
10292 { "Duration", "openflow_v6.oxs.duration_nsec",
10293 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10296 { &hf_openflow_v6_oxs_basic_idle_sec
,
10297 { "Idle", "openflow_v6.oxs.idle_sec",
10298 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10301 { &hf_openflow_v6_oxs_basic_idle_nsec
,
10302 { "Idle", "openflow_v6.oxs.idle_nsec",
10303 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10306 { &hf_openflow_v6_oxs_basic_flow_count
,
10307 { "Flow count", "openflow_v6.oxs.flow_count",
10308 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10311 { &hf_openflow_v6_oxs_basic_packet_count
,
10312 { "Packet count", "openflow_v6.oxs.packet_count",
10313 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
10316 { &hf_openflow_v6_oxs_basic_byte_count
,
10317 { "Byte count", "openflow_v6.oxs.byte_count",
10318 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
10321 { &hf_openflow_v6_oxs_experimenter_experimenter
,
10322 { "Experimenter ID", "openflow_v6.oxs.experimenter.experimenter",
10323 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10326 { &hf_openflow_v6_oxs_experimenter_value
,
10327 { "Experimenter ID", "openflow_v6.oxs.experimenter.value",
10328 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10331 { &hf_openflow_v6_stats_reserved
,
10332 { "Reserved", "openflow_v6.stats.reserved",
10333 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10336 { &hf_openflow_v6_stats_length
,
10337 { "Length", "openflow_v6.stats.length",
10338 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10341 { &hf_openflow_v6_stats_pad
,
10342 { "Pad", "openflow_v6.stats.pad",
10343 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10346 { &hf_openflow_v6_oxm_register
,
10347 { "Register", "openflow_v6.oxm.register",
10348 FT_UINT8
, BASE_DEC
, NULL
, OXM_FIELD_MASK
,
10351 { &hf_openflow_v6_instruction_stat_trigger_flags
,
10352 { "Flags", "openflow_v6.instruction.stat_trigger.flags",
10353 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10356 { &hf_openflow_v6_instruction_stat_triffer_flags_periodic
,
10357 { "Flags", "openflow_v6.instruction.stat_trigger.flags.periodic",
10358 FT_UINT32
, BASE_HEX
, NULL
, OFPSTF_PERIODIC
,
10361 { &hf_openflow_v6_instruction_stat_triffer_flags_only_first
,
10362 { "Flags", "openflow_v6.instruction.stat_trigger.flags.only_first",
10363 FT_UINT32
, BASE_HEX
, NULL
, OFPSTF_ONLY_FIRST
,
10366 { &hf_openflow_v6_instruction_stat_triffer_flags_reserved
,
10367 { "Flags", "openflow_v6.instruction.stat_trigger.flags.reserved",
10368 FT_UINT32
, BASE_HEX
, NULL
, 0xfffffffc,
10371 { &hf_openflow_v6_controller_status_length
,
10372 { "Length", "openflow_v6.controller_status.length",
10373 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10376 { &hf_openflow_v6_controller_status_short_id
,
10377 { "Short ID", "openflow_v6.controller_status.short_id",
10378 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10381 { &hf_openflow_v6_controller_status_role
,
10382 { "Role", "openflow_v6.controller_status.role",
10383 FT_UINT32
, BASE_HEX
, VALS(openflow_v6_controller_role_values
), 0x0,
10386 { &hf_openflow_v6_controller_status_reason
,
10387 { "Reason", "openflow_v6.controller_status.reason",
10388 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_controller_status_reason_values
), 0x0,
10391 { &hf_openflow_v6_controller_status_channel_status
,
10392 { "Reason", "openflow_v6.controller_status.channel_status",
10393 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_controller_status_channel_status_values
), 0x0,
10396 { &hf_openflow_v6_controller_status_pad
,
10397 { "Reason", "openflow_v6.controller_status.pad",
10398 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10401 { &hf_openflow_v6_time_seconds
,
10402 { "Seconds", "openflow_v6.time.seconds",
10403 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
10406 { &hf_openflow_v6_time_nanoseconds
,
10407 { "Nanoseconds", "openflow_v6.time.nanoseconds",
10408 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10411 { &hf_openflow_v6_time_pad
,
10412 { "Pad", "openflow_v6.time.pad",
10413 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10416 { &hf_openflow_v6_bundle_feature_prop_type
,
10417 { "Type", "openflow_v6.bundle_feature.prop.type",
10418 FT_UINT16
, BASE_HEX
, VALS(openflow_v6_bundle_feature_prop_type_values
), 0x0,
10421 { &hf_openflow_v6_bundle_feature_prop_length
,
10422 { "Length", "openflow_v6.bundle_feature.prop.length",
10423 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10426 { &hf_openflow_v6_bundle_feature_prop_time_pad
,
10427 { "Pad", "openflow_v6.bundle_feature.prop.pad",
10428 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10431 { &hf_openflow_v6_bundle_feature_prop_experimenter_experimenter
,
10432 { "Experimenter", "openflow_v6.bundle_feature.prop.experimenter.experimenter",
10433 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10436 { &hf_openflow_v6_bundle_feature_prop_experimenter_exp_type
,
10437 { "Type", "openflow_v6.bundle_feature.prop.experimenter.type",
10438 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10441 { &hf_openflow_v6_bundle_feature_prop_pad
,
10442 { "Pad", "openflow_v6.bundle_feature.prop.pad",
10443 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10446 { &hf_openflow_v6_controller_status_prop_type
,
10447 { "Type", "openflow_v6.controller_status.prop.type",
10448 FT_UINT16
, BASE_DEC
, VALS(openflow_v6_controller_status_prop_type_values
), 0x0,
10451 { &hf_openflow_v6_controller_status_prop_length
,
10452 { "Length", "openflow_v6.controller_status.prop.length",
10453 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10456 { &hf_openflow_v6_controller_status_prop_experimenter_experimenter
,
10457 { "Experimenter", "openflow_v6.controller_status.prop.experimenter.experimenter",
10458 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10461 { &hf_openflow_v6_controller_status_prop_experimenter_exp_type
,
10462 { "Type", "openflow_v6.controller_status.prop.experimenter.type",
10463 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10466 { &hf_openflow_v6_controller_status_prop_pad
,
10467 { "Pad", "openflow_v6.controller_status.prop.pad",
10468 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10471 { &hf_openflow_v6_port_desc_prop_recirculate_port_no
,
10472 { "Port No", "openflow_v6.port.stats_prop.recirculate.port_no",
10473 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v6_port_reserved_values
), 0x0,
10476 { &hf_openflow_v6_bundle_features_request_flags
,
10477 { "Flags", "openflow_v6.bundle_features_request.flags",
10478 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
10481 { &hf_openflow_v6_bundle_features_request_pad
,
10482 { "Pad", "openflow_v6.bundle_features_request.pad",
10483 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10486 { &hf_openflow_v6_flow_stats_pad2
,
10487 { "Pad", "openflow_v6.flow_stats.pad2",
10488 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10491 { &hf_openflow_v6_flow_stats_reason
,
10492 { "Reason", "openflow_v6.flow_stats.reason",
10493 FT_UINT8
, BASE_DEC
, VALS(openflow_v6_flow_stats_reason_values
), 0x0,
10496 { &hf_openflow_v6_flow_stats_length
,
10497 { "Length", "openflow_v6.flow_stats.length",
10498 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10501 { &hf_openflow_v6_flow_stats_table_id
,
10502 { "Table ID", "openflow_v6.flow_stats.table_id",
10503 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10506 { &hf_openflow_v6_flow_stats_duration_sec
,
10507 { "Duration sec", "openflow_v6.flow_stats.duration_sec",
10508 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10511 { &hf_openflow_v6_flow_stats_duration_nsec
,
10512 { "Duration nsec", "openflow_v6.flow_stats.duration_nsec",
10513 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10516 { &hf_openflow_v6_flow_stats_priority
,
10517 { "Priority", "openflow_v6.flow_stats.priority",
10518 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10521 { &hf_openflow_v6_controller_status_prop_uri
,
10522 { "URI", "openflow_v6.controller_status.prop.uri",
10523 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10528 static int *ett
[] = {
10530 &ett_openflow_v6_flowmod_flags
,
10531 &ett_openflow_v6_bucket
,
10532 &ett_openflow_v6_oxm
,
10533 &ett_openflow_v6_match
,
10534 &ett_openflow_v6_action
,
10535 &ett_openflow_v6_instruction
,
10536 &ett_openflow_v6_port
,
10537 &ett_openflow_v6_port_desc_prop
,
10538 &ett_openflow_v6_port_desc_prop_ethernet_current
,
10539 &ett_openflow_v6_port_desc_prop_ethernet_advertised
,
10540 &ett_openflow_v6_port_desc_prop_ethernet_supported
,
10541 &ett_openflow_v6_port_desc_prop_ethernet_peer
,
10542 &ett_openflow_v6_port_desc_prop_optical_supported
,
10543 &ett_openflow_v6_port_stats_prop
,
10544 &ett_openflow_v6_port_stats_prop_optical_flags
,
10545 &ett_openflow_v6_port_config
,
10546 &ett_openflow_v6_port_state
,
10547 &ett_openflow_v6_meter_band
,
10548 &ett_openflow_v6_hello_element
,
10549 &ett_openflow_v6_error_data
,
10550 &ett_openflow_v6_switch_features_capabilities
,
10551 &ett_openflow_v6_switch_config_flags
,
10552 &ett_openflow_v6_packet_in_data
,
10553 &ett_openflow_v6_packet_out_data
,
10554 &ett_openflow_v6_portmod_prop
,
10555 &ett_openflow_v6_portmod_prop_ethernet_advertise
,
10556 &ett_openflow_v6_portmod_prop_optical_configure
,
10557 &ett_openflow_v6_portmod_config
,
10558 &ett_openflow_v6_portmod_mask
,
10559 &ett_openflow_v6_tablemod_config
,
10560 &ett_openflow_v6_tablemod_prop
,
10561 &ett_openflow_v6_tablemod_prop_eviction_flags
,
10562 &ett_openflow_v6_table_features
,
10563 &ett_openflow_v6_table_features_capabilities
,
10564 &ett_openflow_v6_table_feature_prop
,
10565 &ett_openflow_v6_table_feature_prop_instruction_id
,
10566 &ett_openflow_v6_table_feature_prop_action_id
,
10567 &ett_openflow_v6_table_feature_prop_oxm_id
,
10568 &ett_openflow_v6_flow_monitor_request_flags
,
10569 &ett_openflow_v6_multipart_request_flags
,
10570 &ett_openflow_v6_flow_stats
,
10571 &ett_openflow_v6_table_stats
,
10572 &ett_openflow_v6_port_stats
,
10573 &ett_openflow_v6_queue_stats
,
10574 &ett_openflow_v6_queue_stats_prop
,
10575 &ett_openflow_v6_bucket_counter
,
10576 &ett_openflow_v6_group_stats
,
10577 &ett_openflow_v6_group_desc
,
10578 &ett_openflow_v6_group_features_types
,
10579 &ett_openflow_v6_group_features_capabilities
,
10580 &ett_openflow_v6_group_features_actions_all
,
10581 &ett_openflow_v6_group_features_actions_select
,
10582 &ett_openflow_v6_group_features_actions_indirect
,
10583 &ett_openflow_v6_group_features_actions_ff
,
10584 &ett_openflow_v6_meter_band_stats
,
10585 &ett_openflow_v6_meter_stats
,
10586 &ett_openflow_v6_meter_desc
,
10587 &ett_openflow_v6_meter_desc_flags
,
10588 &ett_openflow_v6_meter_features_band_types
,
10589 &ett_openflow_v6_meter_features_capabilities
,
10590 &ett_openflow_v6_flow_update
,
10591 &ett_openflow_v6_multipart_reply_flags
,
10592 &ett_openflow_v6_table_desc
,
10593 &ett_openflow_v6_table_desc_config
,
10594 &ett_openflow_v6_queue_desc
,
10595 &ett_openflow_v6_queue_desc_prop
,
10596 &ett_openflow_v6_async_config_prop
,
10597 &ett_openflow_v6_async_config_prop_reason_packet_in_mask
,
10598 &ett_openflow_v6_async_config_prop_reason_port_status_mask
,
10599 &ett_openflow_v6_async_config_prop_reason_flow_removed_mask
,
10600 &ett_openflow_v6_async_config_prop_reason_role_status_mask
,
10601 &ett_openflow_v6_async_config_prop_reason_table_status_mask
,
10602 &ett_openflow_v6_async_config_prop_reason_requestforward_mask
,
10603 &ett_openflow_v6_metermod_flags
,
10604 &ett_openflow_v6_requestforward_request
,
10605 &ett_openflow_v6_bundle_control_flags
,
10606 &ett_openflow_v6_bundle_prop
,
10607 &ett_openflow_v6_bundle_add_flags
,
10608 &ett_openflow_v6_bundle_add_message
,
10609 &ett_openflow_v6_instruction_stat_trigger_flags
,
10610 &ett_openflow_v6_flow_desc
,
10611 &ett_openflow_v6_flow_desc_flags
,
10612 &ett_openflow_v6_bundle_feature_prop
,
10613 &ett_openflow_v6_controller_status_prop
,
10616 static ei_register_info ei
[] = {
10617 { &ei_openflow_v6_oxm_undecoded
,
10618 { "openflow_v6.oxm.undecoded", PI_UNDECODED
, PI_NOTE
,
10619 "Unknown OMX body.", EXPFILL
}
10621 { &ei_openflow_v6_match_undecoded
,
10622 { "openflow_v6.match.undecoded", PI_UNDECODED
, PI_NOTE
,
10623 "Unknown match body.", EXPFILL
}
10625 { &ei_openflow_v6_action_undecoded
,
10626 { "openflow_v6.action.undecoded", PI_UNDECODED
, PI_NOTE
,
10627 "Unknown action body.", EXPFILL
}
10629 { &ei_openflow_v6_instruction_undecoded
,
10630 { "openflow_v6.instruction.undecoded", PI_UNDECODED
, PI_NOTE
,
10631 "Unknown instruction body.", EXPFILL
}
10633 { &ei_openflow_v6_port_desc_prop_undecoded
,
10634 { "openflow_v6.port.desc_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10635 "Unknown port desc. property body.", EXPFILL
}
10637 { &ei_openflow_v6_port_stats_prop_undecoded
,
10638 { "openflow_v6.port.stats_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10639 "Unknown port stats. property body.", EXPFILL
}
10641 { &ei_openflow_v6_meter_band_undecoded
,
10642 { "openflow_v6.meter_band.undecoded", PI_UNDECODED
, PI_NOTE
,
10643 "Unknown meter band body.", EXPFILL
}
10645 { &ei_openflow_v6_hello_element_undecoded
,
10646 { "openflow_v6.hello_element.undecoded", PI_UNDECODED
, PI_NOTE
,
10647 "Unknown hello element body.", EXPFILL
}
10649 { &ei_openflow_v6_error_undecoded
,
10650 { "openflow_v6.error.undecoded", PI_UNDECODED
, PI_NOTE
,
10651 "Unknown error data.", EXPFILL
}
10653 { &ei_openflow_v6_experimenter_undecoded
,
10654 { "openflow_v6.experimenter.undecoded", PI_UNDECODED
, PI_NOTE
,
10655 "Unknown experimenter body.", EXPFILL
}
10657 { &ei_openflow_v6_portmod_prop_undecoded
,
10658 { "openflow_v6.portmod_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10659 "Unknown portmod property body.", EXPFILL
}
10661 { &ei_openflow_v6_tablemod_prop_undecoded
,
10662 { "openflow_v6.tablemod_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10663 "Unknown tablemod property body.", EXPFILL
}
10665 { &ei_openflow_v6_table_feature_prop_undecoded
,
10666 { "openflow_v6.table_feature_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10667 "Unknown table feature property body.", EXPFILL
}
10669 { &ei_openflow_v6_multipart_request_undecoded
,
10670 { "openflow_v6.multipart_request.undecoded", PI_UNDECODED
, PI_NOTE
,
10671 "Unknown multipart request body.", EXPFILL
}
10673 { &ei_openflow_v6_queue_stats_prop_undecoded
,
10674 { "openflow_v6.queue_stats_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10675 "Unknown queue stats prop body.", EXPFILL
}
10677 { &ei_openflow_v6_flow_update_undecoded
,
10678 { "openflow_v6.flow_update.undecoded", PI_UNDECODED
, PI_NOTE
,
10679 "Unknown flow update body.", EXPFILL
}
10681 { &ei_openflow_v6_multipart_reply_undecoded
,
10682 { "openflow_v6.multipart_reply.undecoded", PI_UNDECODED
, PI_NOTE
,
10683 "Unknown multipart reply body.", EXPFILL
}
10685 { &ei_openflow_v6_queue_desc_prop_undecoded
,
10686 { "openflow_v6.queue_desc_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10687 "Unknown queue property body.", EXPFILL
}
10689 { &ei_openflow_v6_async_config_prop_undecoded
,
10690 { "openflow_v6.async_config_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10691 "Unknown async config property body.", EXPFILL
}
10693 {&ei_openflow_v6_bundle_prop_undecoded
,
10694 { "openflow_v6.bundle_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10695 "Unknown bundle prop body.", EXPFILL
}
10697 {&ei_openflow_v6_message_undecoded
,
10698 { "openflow_v6.message.undecoded", PI_UNDECODED
, PI_NOTE
,
10699 "Unknown message body.", EXPFILL
}
10701 {&ei_openflow_v6_length_too_short
,
10702 { "openflow_v6.message.length_too_short", PI_MALFORMED
, PI_ERROR
,
10703 "Length is too short.", EXPFILL
}
10705 {&ei_openflow_v6_bundle_feature_prop_undecoded
,
10706 { "openflow_v6.bundle_feature.prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10707 "Unknown bundle feature prop body.", EXPFILL
}
10709 {&ei_openflow_v6_controller_status_prop_undecoded
,
10710 { "openflow_v6.controller_status.prop.undecoded", PI_UNDECODED
, PI_NOTE
,
10711 "Unknown controller status prop body.", EXPFILL
}
10716 expert_module_t
*expert_openflow_v6
;
10718 /* Register the protocol name and description */
10719 proto_openflow_v6
= proto_register_protocol("OpenFlow 1.5", "openflow_v6", "openflow_v6");
10721 register_dissector("openflow_v6", dissect_openflow_v6
, proto_openflow_v6
);
10723 /* Required function calls to register the header fields and subtrees */
10724 proto_register_field_array(proto_openflow_v6
, hf
, array_length(hf
));
10725 proto_register_subtree_array(ett
, array_length(ett
));
10726 expert_openflow_v6
= expert_register_protocol(proto_openflow_v6
);
10727 expert_register_field_array(expert_openflow_v6
, ei
, array_length(ei
));
10731 proto_reg_handoff_openflow_v6(void)
10733 eth_withoutfcs_handle
= find_dissector_add_dependency("eth_withoutfcs", proto_openflow_v6
);
10737 * Editor modelines - https://www.wireshark.org/tools/modelines.html
10740 * c-basic-offset: 4
10742 * indent-tabs-mode: nil
10745 * vi: set shiftwidth=4 tabstop=8 expandtab:
10746 * :indentSize=4:tabSize=8:noTabs=true: