1 /* packet-openflow_v5.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>
22 void proto_register_openflow_v5(void);
23 void proto_reg_handoff_openflow_v5(void);
24 static int dissect_openflow_message_v5(tvbuff_t
*, packet_info
*, proto_tree
*, int);
26 static dissector_handle_t eth_withoutfcs_handle
;
28 static int proto_openflow_v5
;
29 static int hf_openflow_v5_version
;
30 static int hf_openflow_v5_type
;
31 static int hf_openflow_v5_length
;
32 static int hf_openflow_v5_xid
;
33 static int hf_openflow_v5_oxm_class
;
34 static int hf_openflow_v5_oxm_field
;
35 static int hf_openflow_v5_oxm_field_basic
;
36 static int hf_openflow_v5_oxm_hm
;
37 static int hf_openflow_v5_oxm_length
;
38 static int hf_openflow_v5_oxm_experimenter_experimenter
;
39 static int hf_openflow_v5_oxm_value
;
40 static int hf_openflow_v5_oxm_value_etheraddr
;
41 static int hf_openflow_v5_oxm_value_vlan_present
;
42 static int hf_openflow_v5_oxm_value_vlan_vid
;
43 static int hf_openflow_v5_oxm_value_ethertype
;
44 static int hf_openflow_v5_oxm_value_ipv4addr
;
45 static int hf_openflow_v5_oxm_value_ipv6addr
;
46 static int hf_openflow_v5_oxm_value_ipproto
;
47 static int hf_openflow_v5_oxm_value_uint16
;
48 static int hf_openflow_v5_oxm_value_uint24
;
49 static int hf_openflow_v5_oxm_value_uint32
;
50 static int hf_openflow_v5_oxm_mask
;
51 static int hf_openflow_v5_oxm_mask_etheraddr
;
52 static int hf_openflow_v5_oxm_mask_ipv4addr
;
53 static int hf_openflow_v5_oxm_mask_ipv6addr
;
54 static int hf_openflow_v5_oxm_mask_vlan
;
55 static int hf_openflow_v5_match_type
;
56 static int hf_openflow_v5_match_length
;
57 static int hf_openflow_v5_match_pad
;
58 static int hf_openflow_v5_action_type
;
59 static int hf_openflow_v5_action_length
;
60 static int hf_openflow_v5_action_experimenter_experimenter
;
61 static int hf_openflow_v5_oxm_experimenter_value
;
62 static int hf_openflow_v5_action_output_port
;
63 static int hf_openflow_v5_action_output_max_len
;
64 static int hf_openflow_v5_action_output_pad
;
65 static int hf_openflow_v5_action_copy_ttl_out_pad
;
66 static int hf_openflow_v5_action_copy_ttl_in_pad
;
67 static int hf_openflow_v5_action_set_mpls_ttl_ttl
;
68 static int hf_openflow_v5_action_set_mpls_ttl_pad
;
69 static int hf_openflow_v5_action_dec_mpls_ttl_pad
;
70 static int hf_openflow_v5_action_push_vlan_ethertype
;
71 static int hf_openflow_v5_action_push_vlan_pad
;
72 static int hf_openflow_v5_action_pop_vlan_pad
;
73 static int hf_openflow_v5_action_push_mpls_ethertype
;
74 static int hf_openflow_v5_action_push_mpls_pad
;
75 static int hf_openflow_v5_action_pop_mpls_ethertype
;
76 static int hf_openflow_v5_action_pop_mpls_pad
;
77 static int hf_openflow_v5_action_set_queue_queue_id
;
78 static int hf_openflow_v5_action_group_group_id
;
79 static int hf_openflow_v5_action_set_nw_ttl_ttl
;
80 static int hf_openflow_v5_action_set_nw_ttl_pad
;
81 static int hf_openflow_v5_action_dec_nw_ttl_pad
;
82 static int hf_openflow_v5_action_set_field_pad
;
83 static int hf_openflow_v5_action_push_pbb_ethertype
;
84 static int hf_openflow_v5_action_push_pbb_pad
;
85 static int hf_openflow_v5_action_pop_pbb_pad
;
86 static int hf_openflow_v5_instruction_type
;
87 static int hf_openflow_v5_instruction_length
;
88 static int hf_openflow_v5_instruction_experimenter_experimenter
;
89 static int hf_openflow_v5_instruction_goto_table_table_id
;
90 static int hf_openflow_v5_instruction_goto_table_pad
;
91 static int hf_openflow_v5_instruction_write_metadata_pad
;
92 static int hf_openflow_v5_instruction_write_metadata_value
;
93 static int hf_openflow_v5_instruction_write_metadata_mask
;
94 static int hf_openflow_v5_instruction_actions_pad
;
95 static int hf_openflow_v5_instruction_meter_meter_id
;
96 static int hf_openflow_v5_port_desc_prop_type
;
97 static int hf_openflow_v5_port_desc_prop_length
;
98 static int hf_openflow_v5_port_desc_prop_ethernet_pad
;
99 static int hf_openflow_v5_port_desc_prop_ethernet_current
;
100 static int hf_openflow_v5_port_desc_prop_ethernet_current_10mb_hd
;
101 static int hf_openflow_v5_port_desc_prop_ethernet_current_10mb_fd
;
102 static int hf_openflow_v5_port_desc_prop_ethernet_current_100mb_hd
;
103 static int hf_openflow_v5_port_desc_prop_ethernet_current_100mb_fd
;
104 static int hf_openflow_v5_port_desc_prop_ethernet_current_1gb_hd
;
105 static int hf_openflow_v5_port_desc_prop_ethernet_current_1gb_fd
;
106 static int hf_openflow_v5_port_desc_prop_ethernet_current_10gb_fd
;
107 static int hf_openflow_v5_port_desc_prop_ethernet_current_40gb_fd
;
108 static int hf_openflow_v5_port_desc_prop_ethernet_current_100gb_fd
;
109 static int hf_openflow_v5_port_desc_prop_ethernet_current_1tb_fd
;
110 static int hf_openflow_v5_port_desc_prop_ethernet_current_other
;
111 static int hf_openflow_v5_port_desc_prop_ethernet_current_copper
;
112 static int hf_openflow_v5_port_desc_prop_ethernet_current_fiber
;
113 static int hf_openflow_v5_port_desc_prop_ethernet_current_autoneg
;
114 static int hf_openflow_v5_port_desc_prop_ethernet_current_pause
;
115 static int hf_openflow_v5_port_desc_prop_ethernet_current_pause_asym
;
116 static int hf_openflow_v5_port_desc_prop_ethernet_advertised
;
117 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_hd
;
118 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_fd
;
119 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_hd
;
120 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_fd
;
121 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_hd
;
122 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_fd
;
123 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_10gb_fd
;
124 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_40gb_fd
;
125 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_100gb_fd
;
126 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_1tb_fd
;
127 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_other
;
128 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_copper
;
129 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_fiber
;
130 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_autoneg
;
131 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_pause
;
132 static int hf_openflow_v5_port_desc_prop_ethernet_advertised_pause_asym
;
133 static int hf_openflow_v5_port_desc_prop_ethernet_supported
;
134 static int hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_hd
;
135 static int hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_fd
;
136 static int hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_hd
;
137 static int hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_fd
;
138 static int hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_hd
;
139 static int hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_fd
;
140 static int hf_openflow_v5_port_desc_prop_ethernet_supported_10gb_fd
;
141 static int hf_openflow_v5_port_desc_prop_ethernet_supported_40gb_fd
;
142 static int hf_openflow_v5_port_desc_prop_ethernet_supported_100gb_fd
;
143 static int hf_openflow_v5_port_desc_prop_ethernet_supported_1tb_fd
;
144 static int hf_openflow_v5_port_desc_prop_ethernet_supported_other
;
145 static int hf_openflow_v5_port_desc_prop_ethernet_supported_copper
;
146 static int hf_openflow_v5_port_desc_prop_ethernet_supported_fiber
;
147 static int hf_openflow_v5_port_desc_prop_ethernet_supported_autoneg
;
148 static int hf_openflow_v5_port_desc_prop_ethernet_supported_pause
;
149 static int hf_openflow_v5_port_desc_prop_ethernet_supported_pause_asym
;
150 static int hf_openflow_v5_port_desc_prop_optical_pad
;
151 static int hf_openflow_v5_port_desc_prop_optical_supported
;
152 static int hf_openflow_v5_port_desc_prop_optical_supported_rx_tune
;
153 static int hf_openflow_v5_port_desc_prop_optical_supported_tx_tune
;
154 static int hf_openflow_v5_port_desc_prop_optical_supported_tx_pwr
;
155 static int hf_openflow_v5_port_desc_prop_optical_supported_use_freq
;
156 static int hf_openflow_v5_port_desc_prop_optical_tx_min_freq_lmda
;
157 static int hf_openflow_v5_port_desc_prop_optical_tx_max_freq_lmda
;
158 static int hf_openflow_v5_port_desc_prop_optical_tx_grid_freq_lmda
;
159 static int hf_openflow_v5_port_desc_prop_optical_rx_min_freq_lmda
;
160 static int hf_openflow_v5_port_desc_prop_optical_rx_max_freq_lmda
;
161 static int hf_openflow_v5_port_desc_prop_optical_rx_grid_freq_lmda
;
162 static int hf_openflow_v5_port_desc_prop_optical_tx_pwr_min
;
163 static int hf_openflow_v5_port_desc_prop_optical_tx_pwr_max
;
164 static int hf_openflow_v5_port_desc_prop_experimenter_experimenter
;
165 static int hf_openflow_v5_port_desc_prop_experimenter_exp_type
;
166 static int hf_openflow_v5_port_desc_prop_ethernet_peer
;
167 static int hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_hd
;
168 static int hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_fd
;
169 static int hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_hd
;
170 static int hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_fd
;
171 static int hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_hd
;
172 static int hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_fd
;
173 static int hf_openflow_v5_port_desc_prop_ethernet_peer_10gb_fd
;
174 static int hf_openflow_v5_port_desc_prop_ethernet_peer_40gb_fd
;
175 static int hf_openflow_v5_port_desc_prop_ethernet_peer_100gb_fd
;
176 static int hf_openflow_v5_port_desc_prop_ethernet_peer_1tb_fd
;
177 static int hf_openflow_v5_port_desc_prop_ethernet_peer_other
;
178 static int hf_openflow_v5_port_desc_prop_ethernet_peer_copper
;
179 static int hf_openflow_v5_port_desc_prop_ethernet_peer_fiber
;
180 static int hf_openflow_v5_port_desc_prop_ethernet_peer_autoneg
;
181 static int hf_openflow_v5_port_desc_prop_ethernet_peer_pause
;
182 static int hf_openflow_v5_port_desc_prop_ethernet_peer_pause_asym
;
183 static int hf_openflow_v5_port_desc_prop_ethernet_curr_speed
;
184 static int hf_openflow_v5_port_desc_prop_ethernet_max_speed
;
185 static int hf_openflow_v5_port_stats_prop_type
;
186 static int hf_openflow_v5_port_stats_prop_length
;
187 static int hf_openflow_v5_port_stats_prop_ethernet_pad
;
188 static int hf_openflow_v5_port_stats_prop_ethernet_rx_frame_err
;
189 static int hf_openflow_v5_port_stats_prop_ethernet_rx_over_err
;
190 static int hf_openflow_v5_port_stats_prop_ethernet_rx_crc_err
;
191 static int hf_openflow_v5_port_stats_prop_ethernet_collisions
;
192 static int hf_openflow_v5_port_stats_prop_optical_pad
;
193 static int hf_openflow_v5_port_stats_prop_optical_flags
;
194 static int hf_openflow_v5_port_stats_prop_optical_flags_rx_tune
;
195 static int hf_openflow_v5_port_stats_prop_optical_flags_tx_tune
;
196 static int hf_openflow_v5_port_stats_prop_optical_flags_tx_pwr
;
197 static int hf_openflow_v5_port_stats_prop_optical_flags_rx_pwr
;
198 static int hf_openflow_v5_port_stats_prop_optical_flags_tx_bias
;
199 static int hf_openflow_v5_port_stats_prop_optical_flags_tx_temp
;
200 static int hf_openflow_v5_port_stats_prop_optical_tx_freq_lmda
;
201 static int hf_openflow_v5_port_stats_prop_optical_tx_offset
;
202 static int hf_openflow_v5_port_stats_prop_optical_tx_grid_span
;
203 static int hf_openflow_v5_port_stats_prop_optical_rx_freq_lmda
;
204 static int hf_openflow_v5_port_stats_prop_optical_rx_offset
;
205 static int hf_openflow_v5_port_stats_prop_optical_rx_grid_span
;
206 static int hf_openflow_v5_port_stats_prop_optical_tx_pwr
;
207 static int hf_openflow_v5_port_stats_prop_optical_rx_pwr
;
208 static int hf_openflow_v5_port_stats_prop_optical_bias_current
;
209 static int hf_openflow_v5_port_stats_prop_optical_temperature
;
210 static int hf_openflow_v5_port_stats_prop_experimenter_experimenter
;
211 static int hf_openflow_v5_port_stats_prop_experimenter_exp_type
;
212 static int hf_openflow_v5_port_port_no
;
213 static int hf_openflow_v5_port_length
;
214 static int hf_openflow_v5_port_pad
;
215 static int hf_openflow_v5_port_hw_addr
;
216 static int hf_openflow_v5_port_pad2
;
217 static int hf_openflow_v5_port_name
;
218 static int hf_openflow_v5_port_config
;
219 static int hf_openflow_v5_port_config_port_down
;
220 static int hf_openflow_v5_port_config_no_recv
;
221 static int hf_openflow_v5_port_config_no_fwd
;
222 static int hf_openflow_v5_port_config_no_packet_in
;
223 static int hf_openflow_v5_port_state
;
224 static int hf_openflow_v5_port_state_link_down
;
225 static int hf_openflow_v5_port_state_blocked
;
226 static int hf_openflow_v5_port_state_live
;
227 static int hf_openflow_v5_meter_band_type
;
228 static int hf_openflow_v5_meter_band_len
;
229 static int hf_openflow_v5_meter_band_rate
;
230 static int hf_openflow_v5_meter_band_burst_size
;
231 static int hf_openflow_v5_meter_band_drop_pad
;
232 static int hf_openflow_v5_meter_band_dscp_remark_prec_level
;
233 static int hf_openflow_v5_meter_band_dscp_remark_pad
;
234 static int hf_openflow_v5_meter_band_experimenter_experimenter
;
235 static int hf_openflow_v5_hello_element_type
;
236 static int hf_openflow_v5_hello_element_length
;
237 static int hf_openflow_v5_hello_element_version_bitmap
;
238 static int hf_openflow_v5_hello_element_pad
;
239 static int hf_openflow_v5_error_type
;
240 static int hf_openflow_v5_error_hello_failed_code
;
241 static int hf_openflow_v5_error_bad_request_code
;
242 static int hf_openflow_v5_error_bad_action_code
;
243 static int hf_openflow_v5_error_bad_instruction_code
;
244 static int hf_openflow_v5_error_bad_match_code
;
245 static int hf_openflow_v5_error_flow_mod_failed_code
;
246 static int hf_openflow_v5_error_group_mod_failed_code
;
247 static int hf_openflow_v5_error_port_mod_failed_code
;
248 static int hf_openflow_v5_error_table_mod_failed_code
;
249 static int hf_openflow_v5_error_queue_op_failed_code
;
250 static int hf_openflow_v5_error_switch_config_failed_code
;
251 static int hf_openflow_v5_error_role_request_failed_code
;
252 static int hf_openflow_v5_error_meter_mod_failed_code
;
253 static int hf_openflow_v5_error_table_features_failed_code
;
254 static int hf_openflow_v5_error_bad_property_code
;
255 static int hf_openflow_v5_error_async_config_failed_code
;
256 static int hf_openflow_v5_error_flow_monitor_failed_code
;
257 static int hf_openflow_v5_error_bundle_failed_code
;
258 static int hf_openflow_v5_error_code
;
259 static int hf_openflow_v5_error_data_text
;
260 static int hf_openflow_v5_error_data_body
;
261 static int hf_openflow_v5_error_experimenter
;
262 static int hf_openflow_v5_echo_data
;
263 static int hf_openflow_v5_experimenter_experimenter
;
264 static int hf_openflow_v5_experimenter_exp_type
;
265 static int hf_openflow_v5_switch_features_datapath_id
;
266 static int hf_openflow_v5_switch_features_n_buffers
;
267 static int hf_openflow_v5_switch_features_n_tables
;
268 static int hf_openflow_v5_switch_features_auxiliary_id
;
269 static int hf_openflow_v5_switch_features_pad
;
270 static int hf_openflow_v5_switch_features_capabilities
;
271 static int hf_openflow_v5_switch_features_capabilities_flow_stats
;
272 static int hf_openflow_v5_switch_features_capabilities_table_stats
;
273 static int hf_openflow_v5_switch_features_capabilities_port_stats
;
274 static int hf_openflow_v5_switch_features_capabilities_group_stats
;
275 static int hf_openflow_v5_switch_features_capabilities_ip_reasm
;
276 static int hf_openflow_v5_switch_features_capabilities_queue_stats
;
277 static int hf_openflow_v5_switch_features_capabilities_port_blocked
;
278 static int hf_openflow_v5_switch_features_reserved
;
279 static int hf_openflow_v5_switch_config_flags
;
280 static int hf_openflow_v5_switch_config_flags_fragments
;
281 static int hf_openflow_v5_switch_config_miss_send_len
;
282 static int hf_openflow_v5_packet_in_buffer_id
;
283 static int hf_openflow_v5_packet_in_total_len
;
284 static int hf_openflow_v5_packet_in_reason
;
285 static int hf_openflow_v5_packet_in_table_id
;
286 static int hf_openflow_v5_packet_in_cookie
;
287 static int hf_openflow_v5_packet_in_pad
;
288 static int hf_openflow_v5_flow_removed_cookie
;
289 static int hf_openflow_v5_flow_removed_priority
;
290 static int hf_openflow_v5_flow_removed_reason
;
291 static int hf_openflow_v5_flow_removed_table_id
;
292 static int hf_openflow_v5_flow_removed_duration_sec
;
293 static int hf_openflow_v5_flow_removed_duration_nsec
;
294 static int hf_openflow_v5_flow_removed_idle_timeout
;
295 static int hf_openflow_v5_flow_removed_hard_timeout
;
296 static int hf_openflow_v5_flow_removed_packet_count
;
297 static int hf_openflow_v5_flow_removed_byte_count
;
298 static int hf_openflow_v5_port_status_reason
;
299 static int hf_openflow_v5_port_status_pad
;
300 static int hf_openflow_v5_packet_out_buffer_id
;
301 static int hf_openflow_v5_packet_out_in_port
;
302 static int hf_openflow_v5_packet_out_acts_len
;
303 static int hf_openflow_v5_packet_out_pad
;
304 static int hf_openflow_v5_flowmod_cookie
;
305 static int hf_openflow_v5_flowmod_cookie_mask
;
306 static int hf_openflow_v5_flowmod_table_id
;
307 static int hf_openflow_v5_flowmod_command
;
308 static int hf_openflow_v5_flowmod_idle_timeout
;
309 static int hf_openflow_v5_flowmod_hard_timeout
;
310 static int hf_openflow_v5_flowmod_priority
;
311 static int hf_openflow_v5_flowmod_buffer_id
;
312 static int hf_openflow_v5_flowmod_out_port
;
313 static int hf_openflow_v5_flowmod_out_group
;
314 static int hf_openflow_v5_flowmod_flags
;
315 static int hf_openflow_v5_flowmod_flags_send_flow_rem
;
316 static int hf_openflow_v5_flowmod_flags_check_overlap
;
317 static int hf_openflow_v5_flowmod_flags_reset_counts
;
318 static int hf_openflow_v5_flowmod_flags_no_packet_counts
;
319 static int hf_openflow_v5_flowmod_flags_no_byte_counts
;
320 static int hf_openflow_v5_flowmod_importance
;
321 static int hf_openflow_v5_bucket_length
;
322 static int hf_openflow_v5_bucket_weight
;
323 static int hf_openflow_v5_bucket_watch_port
;
324 static int hf_openflow_v5_bucket_watch_group
;
325 static int hf_openflow_v5_bucket_pad
;
326 static int hf_openflow_v5_groupmod_command
;
327 static int hf_openflow_v5_groupmod_type
;
328 static int hf_openflow_v5_groupmod_pad
;
329 static int hf_openflow_v5_groupmod_group_id
;
330 static int hf_openflow_v5_portmod_prop_type
;
331 static int hf_openflow_v5_portmod_prop_length
;
332 static int hf_openflow_v5_portmod_prop_ethernet_advertise
;
333 static int hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_hd
;
334 static int hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_fd
;
335 static int hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_hd
;
336 static int hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_fd
;
337 static int hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_hd
;
338 static int hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_fd
;
339 static int hf_openflow_v5_portmod_prop_ethernet_advertise_10gb_fd
;
340 static int hf_openflow_v5_portmod_prop_ethernet_advertise_40gb_fd
;
341 static int hf_openflow_v5_portmod_prop_ethernet_advertise_100gb_fd
;
342 static int hf_openflow_v5_portmod_prop_ethernet_advertise_1tb_fd
;
343 static int hf_openflow_v5_portmod_prop_ethernet_advertise_other
;
344 static int hf_openflow_v5_portmod_prop_ethernet_advertise_copper
;
345 static int hf_openflow_v5_portmod_prop_ethernet_advertise_fiber
;
346 static int hf_openflow_v5_portmod_prop_ethernet_advertise_autoneg
;
347 static int hf_openflow_v5_portmod_prop_ethernet_advertise_pause
;
348 static int hf_openflow_v5_portmod_prop_ethernet_advertise_pause_asym
;
349 static int hf_openflow_v5_portmod_prop_optical_configure
;
350 static int hf_openflow_v5_portmod_prop_optical_configure_rx_tune
;
351 static int hf_openflow_v5_portmod_prop_optical_configure_tx_tune
;
352 static int hf_openflow_v5_portmod_prop_optical_configure_tx_pwr
;
353 static int hf_openflow_v5_portmod_prop_optical_configure_use_freq
;
354 static int hf_openflow_v5_portmod_prop_optical_freq_lmda
;
355 static int hf_openflow_v5_portmod_prop_optical_fl_offset
;
356 static int hf_openflow_v5_portmod_prop_optical_grid_span
;
357 static int hf_openflow_v5_portmod_prop_optical_tx_pwr
;
358 static int hf_openflow_v5_portmod_prop_experimenter_experimenter
;
359 static int hf_openflow_v5_portmod_prop_experimenter_exp_type
;
360 static int hf_openflow_v5_portmod_port_no
;
361 static int hf_openflow_v5_portmod_pad
;
362 static int hf_openflow_v5_portmod_hw_addr
;
363 static int hf_openflow_v5_portmod_pad2
;
364 static int hf_openflow_v5_portmod_config
;
365 static int hf_openflow_v5_portmod_config_port_down
;
366 static int hf_openflow_v5_portmod_config_no_recv
;
367 static int hf_openflow_v5_portmod_config_no_fwd
;
368 static int hf_openflow_v5_portmod_config_no_packet_in
;
369 static int hf_openflow_v5_portmod_mask
;
370 static int hf_openflow_v5_portmod_mask_port_down
;
371 static int hf_openflow_v5_portmod_mask_no_recv
;
372 static int hf_openflow_v5_portmod_mask_no_fwd
;
373 static int hf_openflow_v5_portmod_mask_no_packet_in
;
374 static int hf_openflow_v5_tablemod_table_id
;
375 static int hf_openflow_v5_tablemod_pad
;
376 static int hf_openflow_v5_tablemod_config
;
377 static int hf_openflow_v5_tablemod_config_eviction
;
378 static int hf_openflow_v5_tablemod_config_vacancy_events
;
379 static int hf_openflow_v5_tablemod_prop_type
;
380 static int hf_openflow_v5_tablemod_prop_length
;
381 static int hf_openflow_v5_tablemod_prop_eviction_flags
;
382 static int hf_openflow_v5_tablemod_prop_eviction_flags_other
;
383 static int hf_openflow_v5_tablemod_prop_eviction_flags_importance
;
384 static int hf_openflow_v5_tablemod_prop_eviction_flags_lifetime
;
385 static int hf_openflow_v5_tablemod_prop_vacancy_vacancy_down
;
386 static int hf_openflow_v5_tablemod_prop_vacancy_vacancy_up
;
387 static int hf_openflow_v5_tablemod_prop_vacancy_vacancy
;
388 static int hf_openflow_v5_tablemod_prop_vacancy_pad
;
389 static int hf_openflow_v5_tablemod_prop_experimenter_experimenter
;
390 static int hf_openflow_v5_tablemod_prop_experimenter_exp_type
;
391 static int hf_openflow_v5_flow_stats_request_table_id
;
392 static int hf_openflow_v5_flow_stats_request_pad
;
393 static int hf_openflow_v5_flow_stats_request_out_port
;
394 static int hf_openflow_v5_flow_stats_request_out_group
;
395 static int hf_openflow_v5_flow_stats_request_pad2
;
396 static int hf_openflow_v5_flow_stats_request_cookie
;
397 static int hf_openflow_v5_flow_stats_request_cookie_mask
;
398 static int hf_openflow_v5_aggregate_stats_request_table_id
;
399 static int hf_openflow_v5_aggregate_stats_request_pad
;
400 static int hf_openflow_v5_aggregate_stats_request_out_port
;
401 static int hf_openflow_v5_aggregate_stats_request_out_group
;
402 static int hf_openflow_v5_aggregate_stats_request_pad2
;
403 static int hf_openflow_v5_aggregate_stats_request_cookie
;
404 static int hf_openflow_v5_aggregate_stats_request_cookie_mask
;
405 static int hf_openflow_v5_table_feature_prop_type
;
406 static int hf_openflow_v5_table_feature_prop_length
;
407 static int hf_openflow_v5_table_feature_prop_next_tables_next_table_id
;
408 static int hf_openflow_v5_table_feature_prop_table_sync_from_table_id
;
409 static int hf_openflow_v5_table_feature_prop_experimenter_experimenter
;
410 static int hf_openflow_v5_table_feature_prop_experimenter_exp_type
;
411 static int hf_openflow_v5_table_feature_prop_pad
;
412 static int hf_openflow_v5_table_features_length
;
413 static int hf_openflow_v5_table_features_table_id
;
414 static int hf_openflow_v5_table_features_pad
;
415 static int hf_openflow_v5_table_features_name
;
416 static int hf_openflow_v5_table_features_metadata_match
;
417 static int hf_openflow_v5_table_features_metadata_write
;
418 static int hf_openflow_v5_table_features_capabilities
;
419 static int hf_openflow_v5_table_features_capabilities_eviction
;
420 static int hf_openflow_v5_table_features_capabilities_vacancy_events
;
421 static int hf_openflow_v5_table_features_max_entries
;
422 static int hf_openflow_v5_port_stats_request_port_no
;
423 static int hf_openflow_v5_port_stats_request_pad
;
424 static int hf_openflow_v5_queue_stats_request_port_no
;
425 static int hf_openflow_v5_queue_stats_request_queue_id
;
426 static int hf_openflow_v5_group_stats_request_group_id
;
427 static int hf_openflow_v5_group_stats_request_pad
;
428 static int hf_openflow_v5_meter_stats_request_meter_id
;
429 static int hf_openflow_v5_meter_stats_request_pad
;
430 static int hf_openflow_v5_meter_config_request_meter_id
;
431 static int hf_openflow_v5_meter_config_request_pad
;
432 static int hf_openflow_v5_queue_desc_request_port_no
;
433 static int hf_openflow_v5_queue_desc_request_queue_id
;
434 static int hf_openflow_v5_flow_monitor_request_monitor_id
;
435 static int hf_openflow_v5_flow_monitor_request_out_port
;
436 static int hf_openflow_v5_flow_monitor_request_out_group
;
437 static int hf_openflow_v5_flow_monitor_request_flags
;
438 static int hf_openflow_v5_flow_monitor_request_flags_initial
;
439 static int hf_openflow_v5_flow_monitor_request_flags_add
;
440 static int hf_openflow_v5_flow_monitor_request_flags_removed
;
441 static int hf_openflow_v5_flow_monitor_request_flags_modify
;
442 static int hf_openflow_v5_flow_monitor_request_flags_instructions
;
443 static int hf_openflow_v5_flow_monitor_request_flags_no_abbrev
;
444 static int hf_openflow_v5_flow_monitor_request_flags_only_own
;
445 static int hf_openflow_v5_flow_monitor_request_table_id
;
446 static int hf_openflow_v5_flow_monitor_request_command
;
447 static int hf_openflow_v5_multipart_request_type
;
448 static int hf_openflow_v5_multipart_request_flags
;
449 static int hf_openflow_v5_multipart_request_flags_more
;
450 static int hf_openflow_v5_multipart_request_pad
;
451 static int hf_openflow_v5_multipart_request_experimenter_experimenter
;
452 static int hf_openflow_v5_multipart_request_experimenter_exp_type
;
453 static int hf_openflow_v5_switch_description_mfr_desc
;
454 static int hf_openflow_v5_switch_description_hw_desc
;
455 static int hf_openflow_v5_switch_description_sw_desc
;
456 static int hf_openflow_v5_switch_description_serial_num
;
457 static int hf_openflow_v5_switch_description_dp_desc
;
458 static int hf_openflow_v5_flow_stats_length
;
459 static int hf_openflow_v5_flow_stats_table_id
;
460 static int hf_openflow_v5_flow_stats_pad
;
461 static int hf_openflow_v5_flow_stats_duration_sec
;
462 static int hf_openflow_v5_flow_stats_duration_nsec
;
463 static int hf_openflow_v5_flow_stats_priority
;
464 static int hf_openflow_v5_flow_stats_idle_timeout
;
465 static int hf_openflow_v5_flow_stats_hard_timeout
;
466 static int hf_openflow_v5_flow_stats_flags
;
467 static int hf_openflow_v5_flow_stats_flags_send_flow_rem
;
468 static int hf_openflow_v5_flow_stats_flags_check_overlap
;
469 static int hf_openflow_v5_flow_stats_flags_reset_counts
;
470 static int hf_openflow_v5_flow_stats_flags_no_packet_counts
;
471 static int hf_openflow_v5_flow_stats_flags_no_byte_counts
;
472 static int hf_openflow_v5_flow_stats_importance
;
473 static int hf_openflow_v5_flow_stats_pad2
;
474 static int hf_openflow_v5_flow_stats_cookie
;
475 static int hf_openflow_v5_flow_stats_packet_count
;
476 static int hf_openflow_v5_flow_stats_byte_count
;
477 static int hf_openflow_v5_aggregate_stats_packet_count
;
478 static int hf_openflow_v5_aggregate_stats_byte_count
;
479 static int hf_openflow_v5_aggregate_stats_flow_count
;
480 static int hf_openflow_v5_aggregate_stats_pad
;
481 static int hf_openflow_v5_table_stats_table_id
;
482 static int hf_openflow_v5_table_stats_pad
;
483 static int hf_openflow_v5_table_stats_active_count
;
484 static int hf_openflow_v5_table_stats_lookup_count
;
485 static int hf_openflow_v5_table_stats_match_count
;
486 static int hf_openflow_v5_port_stats_length
;
487 static int hf_openflow_v5_port_stats_pad
;
488 static int hf_openflow_v5_port_stats_port_no
;
489 static int hf_openflow_v5_port_stats_duration_sec
;
490 static int hf_openflow_v5_port_stats_duration_nsec
;
491 static int hf_openflow_v5_port_stats_rx_packets
;
492 static int hf_openflow_v5_port_stats_tx_packets
;
493 static int hf_openflow_v5_port_stats_rx_bytes
;
494 static int hf_openflow_v5_port_stats_tx_bytes
;
495 static int hf_openflow_v5_port_stats_rx_dropped
;
496 static int hf_openflow_v5_port_stats_tx_dropped
;
497 static int hf_openflow_v5_port_stats_rx_errors
;
498 static int hf_openflow_v5_port_stats_tx_errors
;
499 static int hf_openflow_v5_queue_stats_length
;
500 static int hf_openflow_v5_queue_stats_pad
;
501 static int hf_openflow_v5_queue_stats_port_no
;
502 static int hf_openflow_v5_queue_stats_queue_id
;
503 static int hf_openflow_v5_queue_stats_tx_bytes
;
504 static int hf_openflow_v5_queue_stats_tx_packets
;
505 static int hf_openflow_v5_queue_stats_tx_errors
;
506 static int hf_openflow_v5_queue_stats_duration_sec
;
507 static int hf_openflow_v5_queue_stats_duration_nsec
;
508 static int hf_openflow_v5_queue_stats_prop_type
;
509 static int hf_openflow_v5_queue_stats_prop_length
;
510 static int hf_openflow_v5_queue_stats_prop_experimenter_experimenter
;
511 static int hf_openflow_v5_queue_stats_prop_experimenter_exp_type
;
512 static int hf_openflow_v5_bucket_counter_packet_count
;
513 static int hf_openflow_v5_bucket_counter_byte_count
;
514 static int hf_openflow_v5_group_stats_length
;
515 static int hf_openflow_v5_group_stats_pad
;
516 static int hf_openflow_v5_group_stats_group_id
;
517 static int hf_openflow_v5_group_stats_ref_count
;
518 static int hf_openflow_v5_group_stats_pad2
;
519 static int hf_openflow_v5_group_stats_packet_count
;
520 static int hf_openflow_v5_group_stats_byte_count
;
521 static int hf_openflow_v5_group_desc_length
;
522 static int hf_openflow_v5_group_desc_type
;
523 static int hf_openflow_v5_group_desc_pad
;
524 static int hf_openflow_v5_group_desc_group_id
;
525 static int hf_openflow_v5_group_features_types
;
526 static int hf_openflow_v5_group_features_types_all
;
527 static int hf_openflow_v5_group_features_types_select
;
528 static int hf_openflow_v5_group_features_types_indirect
;
529 static int hf_openflow_v5_group_features_types_ff
;
530 static int hf_openflow_v5_group_features_capabilities
;
531 static int hf_openflow_v5_group_features_capabilities_select_weight
;
532 static int hf_openflow_v5_group_features_capabilities_select_liveness
;
533 static int hf_openflow_v5_group_features_capabilities_chaining
;
534 static int hf_openflow_v5_group_features_capabilities_chaining_checks
;
535 static int hf_openflow_v5_group_features_max_groups_all
;
536 static int hf_openflow_v5_group_features_max_groups_select
;
537 static int hf_openflow_v5_group_features_max_groups_indirect
;
538 static int hf_openflow_v5_group_features_max_groups_ff
;
539 static int hf_openflow_v5_group_features_actions_all
;
540 static int hf_openflow_v5_group_features_actions_all_output
;
541 static int hf_openflow_v5_group_features_actions_all_copy_ttl_out
;
542 static int hf_openflow_v5_group_features_actions_all_copy_ttl_in
;
543 static int hf_openflow_v5_group_features_actions_all_set_mpls_ttl
;
544 static int hf_openflow_v5_group_features_actions_all_dec_mpls_ttl
;
545 static int hf_openflow_v5_group_features_actions_all_push_vlan
;
546 static int hf_openflow_v5_group_features_actions_all_pop_vlan
;
547 static int hf_openflow_v5_group_features_actions_all_push_mpls
;
548 static int hf_openflow_v5_group_features_actions_all_pop_mpls
;
549 static int hf_openflow_v5_group_features_actions_all_set_queue
;
550 static int hf_openflow_v5_group_features_actions_all_group
;
551 static int hf_openflow_v5_group_features_actions_all_set_nw_ttl
;
552 static int hf_openflow_v5_group_features_actions_all_dec_nw_ttl
;
553 static int hf_openflow_v5_group_features_actions_all_set_field
;
554 static int hf_openflow_v5_group_features_actions_all_push_pbb
;
555 static int hf_openflow_v5_group_features_actions_all_pop_pbb
;
556 static int hf_openflow_v5_group_features_actions_select
;
557 static int hf_openflow_v5_group_features_actions_select_output
;
558 static int hf_openflow_v5_group_features_actions_select_copy_ttl_out
;
559 static int hf_openflow_v5_group_features_actions_select_copy_ttl_in
;
560 static int hf_openflow_v5_group_features_actions_select_set_mpls_ttl
;
561 static int hf_openflow_v5_group_features_actions_select_dec_mpls_ttl
;
562 static int hf_openflow_v5_group_features_actions_select_push_vlan
;
563 static int hf_openflow_v5_group_features_actions_select_pop_vlan
;
564 static int hf_openflow_v5_group_features_actions_select_push_mpls
;
565 static int hf_openflow_v5_group_features_actions_select_pop_mpls
;
566 static int hf_openflow_v5_group_features_actions_select_set_queue
;
567 static int hf_openflow_v5_group_features_actions_select_group
;
568 static int hf_openflow_v5_group_features_actions_select_set_nw_ttl
;
569 static int hf_openflow_v5_group_features_actions_select_dec_nw_ttl
;
570 static int hf_openflow_v5_group_features_actions_select_set_field
;
571 static int hf_openflow_v5_group_features_actions_select_push_pbb
;
572 static int hf_openflow_v5_group_features_actions_select_pop_pbb
;
573 static int hf_openflow_v5_group_features_actions_indirect
;
574 static int hf_openflow_v5_group_features_actions_indirect_output
;
575 static int hf_openflow_v5_group_features_actions_indirect_copy_ttl_out
;
576 static int hf_openflow_v5_group_features_actions_indirect_copy_ttl_in
;
577 static int hf_openflow_v5_group_features_actions_indirect_set_mpls_ttl
;
578 static int hf_openflow_v5_group_features_actions_indirect_dec_mpls_ttl
;
579 static int hf_openflow_v5_group_features_actions_indirect_push_vlan
;
580 static int hf_openflow_v5_group_features_actions_indirect_pop_vlan
;
581 static int hf_openflow_v5_group_features_actions_indirect_push_mpls
;
582 static int hf_openflow_v5_group_features_actions_indirect_pop_mpls
;
583 static int hf_openflow_v5_group_features_actions_indirect_set_queue
;
584 static int hf_openflow_v5_group_features_actions_indirect_group
;
585 static int hf_openflow_v5_group_features_actions_indirect_set_nw_ttl
;
586 static int hf_openflow_v5_group_features_actions_indirect_dec_nw_ttl
;
587 static int hf_openflow_v5_group_features_actions_indirect_set_field
;
588 static int hf_openflow_v5_group_features_actions_indirect_push_pbb
;
589 static int hf_openflow_v5_group_features_actions_indirect_pop_pbb
;
590 static int hf_openflow_v5_group_features_actions_ff
;
591 static int hf_openflow_v5_group_features_actions_ff_output
;
592 static int hf_openflow_v5_group_features_actions_ff_copy_ttl_out
;
593 static int hf_openflow_v5_group_features_actions_ff_copy_ttl_in
;
594 static int hf_openflow_v5_group_features_actions_ff_set_mpls_ttl
;
595 static int hf_openflow_v5_group_features_actions_ff_dec_mpls_ttl
;
596 static int hf_openflow_v5_group_features_actions_ff_push_vlan
;
597 static int hf_openflow_v5_group_features_actions_ff_pop_vlan
;
598 static int hf_openflow_v5_group_features_actions_ff_push_mpls
;
599 static int hf_openflow_v5_group_features_actions_ff_pop_mpls
;
600 static int hf_openflow_v5_group_features_actions_ff_set_queue
;
601 static int hf_openflow_v5_group_features_actions_ff_group
;
602 static int hf_openflow_v5_group_features_actions_ff_set_nw_ttl
;
603 static int hf_openflow_v5_group_features_actions_ff_dec_nw_ttl
;
604 static int hf_openflow_v5_group_features_actions_ff_set_field
;
605 static int hf_openflow_v5_group_features_actions_ff_push_pbb
;
606 static int hf_openflow_v5_group_features_actions_ff_pop_pbb
;
607 static int hf_openflow_v5_meter_band_stats_packet_band_count
;
608 static int hf_openflow_v5_meter_band_stats_byte_band_count
;
609 static int hf_openflow_v5_meter_stats_meter_id
;
610 static int hf_openflow_v5_meter_stats_len
;
611 static int hf_openflow_v5_meter_stats_pad
;
612 static int hf_openflow_v5_meter_stats_flow_count
;
613 static int hf_openflow_v5_meter_stats_packet_in_count
;
614 static int hf_openflow_v5_meter_stats_byte_in_count
;
615 static int hf_openflow_v5_meter_stats_duration_sec
;
616 static int hf_openflow_v5_meter_stats_duration_nsec
;
617 static int hf_openflow_v5_meter_config_len
;
618 static int hf_openflow_v5_meter_config_flags
;
619 static int hf_openflow_v5_meter_config_flags_kbps
;
620 static int hf_openflow_v5_meter_config_flags_pktps
;
621 static int hf_openflow_v5_meter_config_flags_burst
;
622 static int hf_openflow_v5_meter_config_flags_stats
;
623 static int hf_openflow_v5_meter_config_meter_id
;
624 static int hf_openflow_v5_meter_features_max_meter
;
625 static int hf_openflow_v5_meter_features_band_types
;
626 static int hf_openflow_v5_meter_features_band_types_drop
;
627 static int hf_openflow_v5_meter_features_band_types_dscp_remark
;
628 static int hf_openflow_v5_meter_features_capabilities
;
629 static int hf_openflow_v5_meter_features_capabilities_kbps
;
630 static int hf_openflow_v5_meter_features_capabilities_pktps
;
631 static int hf_openflow_v5_meter_features_capabilities_burst
;
632 static int hf_openflow_v5_meter_features_capabilities_stats
;
633 static int hf_openflow_v5_meter_features_max_bands
;
634 static int hf_openflow_v5_meter_features_max_color
;
635 static int hf_openflow_v5_meter_features_pad
;
636 static int hf_openflow_v5_flow_update_length
;
637 static int hf_openflow_v5_flow_update_event
;
638 static int hf_openflow_v5_flow_update_full_table_id
;
639 static int hf_openflow_v5_flow_update_full_reason
;
640 static int hf_openflow_v5_flow_update_full_zero
;
641 static int hf_openflow_v5_flow_update_full_idle_timeout
;
642 static int hf_openflow_v5_flow_update_full_hard_timeout
;
643 static int hf_openflow_v5_flow_update_full_priority
;
644 static int hf_openflow_v5_flow_update_full_zeros
;
645 static int hf_openflow_v5_flow_update_full_cookie
;
646 static int hf_openflow_v5_flow_update_abbrev_xid
;
647 static int hf_openflow_v5_flow_update_paused_zeros
;
648 static int hf_openflow_v5_multipart_reply_type
;
649 static int hf_openflow_v5_multipart_reply_flags
;
650 static int hf_openflow_v5_multipart_reply_flags_more
;
651 static int hf_openflow_v5_multipart_reply_pad
;
652 static int hf_openflow_v5_multipart_reply_experimenter_experimenter
;
653 static int hf_openflow_v5_multipart_reply_experimenter_exp_type
;
654 static int hf_openflow_v5_table_desc_length
;
655 static int hf_openflow_v5_table_desc_table_id
;
656 static int hf_openflow_v5_table_desc_pad
;
657 static int hf_openflow_v5_table_desc_config
;
658 static int hf_openflow_v5_table_desc_config_eviction
;
659 static int hf_openflow_v5_table_desc_config_vacancy_events
;
660 static int hf_openflow_v5_queue_desc_port_no
;
661 static int hf_openflow_v5_queue_desc_queue_id
;
662 static int hf_openflow_v5_queue_desc_len
;
663 static int hf_openflow_v5_queue_desc_pad
;
664 static int hf_openflow_v5_queue_desc_prop_property
;
665 static int hf_openflow_v5_queue_desc_prop_len
;
666 static int hf_openflow_v5_queue_desc_prop_pad
;
667 static int hf_openflow_v5_queue_desc_prop_min_rate_rate
;
668 static int hf_openflow_v5_queue_desc_prop_min_rate_pad
;
669 static int hf_openflow_v5_queue_desc_prop_max_rate_rate
;
670 static int hf_openflow_v5_queue_desc_prop_max_rate_pad
;
671 static int hf_openflow_v5_queue_desc_prop_experimenter_experimenter
;
672 static int hf_openflow_v5_queue_desc_prop_experimenter_exp_type
;
673 static int hf_openflow_v5_role_request_role
;
674 static int hf_openflow_v5_role_request_pad
;
675 static int hf_openflow_v5_role_request_generation_id
;
676 static int hf_openflow_v5_role_reply_role
;
677 static int hf_openflow_v5_role_reply_pad
;
678 static int hf_openflow_v5_role_reply_generation_id
;
679 static int hf_openflow_v5_async_config_prop_type
;
680 static int hf_openflow_v5_async_config_prop_length
;
681 static int hf_openflow_v5_async_config_prop_reason_packet_in_mask
;
682 static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_table_miss
;
683 static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_apply_action
;
684 static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_invalid_ttl
;
685 static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_action_set
;
686 static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_group
;
687 static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_packet_out
;
688 static int hf_openflow_v5_async_config_prop_reason_port_status_mask
;
689 static int hf_openflow_v5_async_config_prop_reason_port_status_mask_add
;
690 static int hf_openflow_v5_async_config_prop_reason_port_status_mask_delete
;
691 static int hf_openflow_v5_async_config_prop_reason_port_status_mask_modify
;
692 static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask
;
693 static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_idle_timeout
;
694 static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_hard_timeout
;
695 static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_delete
;
696 static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_group_delete
;
697 static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_meter_delete
;
698 static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_eviction
;
699 static int hf_openflow_v5_async_config_prop_reason_role_status_mask
;
700 static int hf_openflow_v5_async_config_prop_reason_role_status_mask_master_request
;
701 static int hf_openflow_v5_async_config_prop_reason_role_status_mask_config
;
702 static int hf_openflow_v5_async_config_prop_reason_role_status_mask_experimenter
;
703 static int hf_openflow_v5_async_config_prop_reason_table_status_mask
;
704 static int hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_down
;
705 static int hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_up
;
706 static int hf_openflow_v5_async_config_prop_reason_requestforward_mask
;
707 static int hf_openflow_v5_async_config_prop_reason_requestforward_mask_group_mod
;
708 static int hf_openflow_v5_async_config_prop_reason_requestforward_mask_meter_mod
;
709 static int hf_openflow_v5_async_config_prop_experimenter_experimenter
;
710 static int hf_openflow_v5_async_config_prop_experimenter_exp_type
;
711 static int hf_openflow_v5_metermod_command
;
712 static int hf_openflow_v5_metermod_flags
;
713 static int hf_openflow_v5_metermod_flags_kbps
;
714 static int hf_openflow_v5_metermod_flags_pktps
;
715 static int hf_openflow_v5_metermod_flags_burst
;
716 static int hf_openflow_v5_metermod_flags_stats
;
717 static int hf_openflow_v5_metermod_meter_id
;
718 static int hf_openflow_v5_role_status_role
;
719 static int hf_openflow_v5_role_status_reason
;
720 static int hf_openflow_v5_role_status_pad
;
721 static int hf_openflow_v5_role_status_generation_id
;
722 static int hf_openflow_v5_table_status_reason
;
723 static int hf_openflow_v5_table_status_pad
;
724 static int hf_openflow_v5_bundle_control_bundle_id
;
725 static int hf_openflow_v5_bundle_control_type
;
726 static int hf_openflow_v5_bundle_control_flags
;
727 static int hf_openflow_v5_bundle_control_flags_atomic
;
728 static int hf_openflow_v5_bundle_control_flags_ordered
;
729 static int hf_openflow_v5_bundle_prop_type
;
730 static int hf_openflow_v5_bundle_prop_length
;
731 static int hf_openflow_v5_bundle_prop_experimenter_experimenter
;
732 static int hf_openflow_v5_bundle_prop_experimenter_exp_type
;
733 static int hf_openflow_v5_bundle_add_bundle_id
;
734 static int hf_openflow_v5_bundle_add_pad
;
735 static int hf_openflow_v5_bundle_add_flags
;
736 static int hf_openflow_v5_bundle_add_flags_atomic
;
737 static int hf_openflow_v5_bundle_add_flags_ordered
;
739 static int ett_openflow_v5
;
740 static int ett_openflow_v5_flowmod_flags
;
741 static int ett_openflow_v5_bucket
;
742 static int ett_openflow_v5_oxm
;
743 static int ett_openflow_v5_match
;
744 static int ett_openflow_v5_action
;
745 static int ett_openflow_v5_instruction
;
746 static int ett_openflow_v5_port_desc_prop
;
747 static int ett_openflow_v5_port_desc_prop_ethernet_current
;
748 static int ett_openflow_v5_port_desc_prop_ethernet_advertised
;
749 static int ett_openflow_v5_port_desc_prop_ethernet_supported
;
750 static int ett_openflow_v5_port_desc_prop_ethernet_peer
;
751 static int ett_openflow_v5_port_desc_prop_optical_supported
;
752 static int ett_openflow_v5_port_stats_prop
;
753 static int ett_openflow_v5_port_stats_prop_optical_flags
;
754 static int ett_openflow_v5_port
;
755 static int ett_openflow_v5_port_config
;
756 static int ett_openflow_v5_port_state
;
757 static int ett_openflow_v5_meter_band
;
758 static int ett_openflow_v5_hello_element
;
759 static int ett_openflow_v5_error_data
;
760 static int ett_openflow_v5_switch_features_capabilities
;
761 static int ett_openflow_v5_switch_config_flags
;
762 static int ett_openflow_v5_packet_in_data
;
763 static int ett_openflow_v5_packet_out_data
;
764 static int ett_openflow_v5_portmod_prop
;
765 static int ett_openflow_v5_portmod_prop_ethernet_advertise
;
766 static int ett_openflow_v5_portmod_prop_optical_configure
;
767 static int ett_openflow_v5_portmod_config
;
768 static int ett_openflow_v5_portmod_mask
;
769 static int ett_openflow_v5_tablemod_config
;
770 static int ett_openflow_v5_tablemod_prop
;
771 static int ett_openflow_v5_tablemod_prop_eviction_flags
;
772 static int ett_openflow_v5_table_features
;
773 static int ett_openflow_v5_table_features_capabilities
;
774 static int ett_openflow_v5_table_feature_prop
;
775 static int ett_openflow_v5_table_feature_prop_instruction_id
;
776 static int ett_openflow_v5_table_feature_prop_action_id
;
777 static int ett_openflow_v5_table_feature_prop_oxm_id
;
778 static int ett_openflow_v5_flow_monitor_request_flags
;
779 static int ett_openflow_v5_multipart_request_flags
;
780 static int ett_openflow_v5_flow_stats
;
781 static int ett_openflow_v5_flow_stats_flags
;
782 static int ett_openflow_v5_table_stats
;
783 static int ett_openflow_v5_port_stats
;
784 static int ett_openflow_v5_queue_stats
;
785 static int ett_openflow_v5_queue_stats_prop
;
786 static int ett_openflow_v5_bucket_counter
;
787 static int ett_openflow_v5_group_stats
;
788 static int ett_openflow_v5_group_desc
;
789 static int ett_openflow_v5_group_features_types
;
790 static int ett_openflow_v5_group_features_capabilities
;
791 static int ett_openflow_v5_group_features_actions_all
;
792 static int ett_openflow_v5_group_features_actions_select
;
793 static int ett_openflow_v5_group_features_actions_indirect
;
794 static int ett_openflow_v5_group_features_actions_ff
;
795 static int ett_openflow_v5_meter_band_stats
;
796 static int ett_openflow_v5_meter_stats
;
797 static int ett_openflow_v5_meter_config
;
798 static int ett_openflow_v5_meter_config_flags
;
799 static int ett_openflow_v5_meter_features_band_types
;
800 static int ett_openflow_v5_meter_features_capabilities
;
801 static int ett_openflow_v5_flow_update
;
802 static int ett_openflow_v5_multipart_reply_flags
;
803 static int ett_openflow_v5_table_desc
;
804 static int ett_openflow_v5_table_desc_config
;
805 static int ett_openflow_v5_queue_desc
;
806 static int ett_openflow_v5_queue_desc_prop
;
807 static int ett_openflow_v5_async_config_prop
;
808 static int ett_openflow_v5_async_config_prop_reason_packet_in_mask
;
809 static int ett_openflow_v5_async_config_prop_reason_port_status_mask
;
810 static int ett_openflow_v5_async_config_prop_reason_flow_removed_mask
;
811 static int ett_openflow_v5_async_config_prop_reason_role_status_mask
;
812 static int ett_openflow_v5_async_config_prop_reason_table_status_mask
;
813 static int ett_openflow_v5_async_config_prop_reason_requestforward_mask
;
814 static int ett_openflow_v5_metermod_flags
;
815 static int ett_openflow_v5_requestforward_request
;
816 static int ett_openflow_v5_bundle_control_flags
;
817 static int ett_openflow_v5_bundle_prop
;
818 static int ett_openflow_v5_bundle_add_flags
;
819 static int ett_openflow_v5_bundle_add_message
;
821 static expert_field ei_openflow_v5_match_undecoded
;
822 static expert_field ei_openflow_v5_oxm_undecoded
;
823 static expert_field ei_openflow_v5_action_undecoded
;
824 static expert_field ei_openflow_v5_instruction_undecoded
;
825 static expert_field ei_openflow_v5_port_desc_prop_undecoded
;
826 static expert_field ei_openflow_v5_port_stats_prop_undecoded
;
827 static expert_field ei_openflow_v5_meter_band_undecoded
;
828 static expert_field ei_openflow_v5_hello_element_undecoded
;
829 static expert_field ei_openflow_v5_error_undecoded
;
830 static expert_field ei_openflow_v5_experimenter_undecoded
;
831 static expert_field ei_openflow_v5_portmod_prop_undecoded
;
832 static expert_field ei_openflow_v5_tablemod_prop_undecoded
;
833 static expert_field ei_openflow_v5_table_feature_prop_undecoded
;
834 static expert_field ei_openflow_v5_multipart_request_undecoded
;
835 static expert_field ei_openflow_v5_queue_stats_prop_undecoded
;
836 static expert_field ei_openflow_v5_flow_update_undecoded
;
837 static expert_field ei_openflow_v5_multipart_reply_undecoded
;
838 static expert_field ei_openflow_v5_queue_desc_prop_undecoded
;
839 static expert_field ei_openflow_v5_async_config_prop_undecoded
;
840 static expert_field ei_openflow_v5_bundle_prop_undecoded
;
841 static expert_field ei_openflow_v5_message_undecoded
;
842 static expert_field ei_openflow_v5_length_too_short
;
844 static const value_string openflow_v5_version_values
[] = {
851 #define OFPT_ECHO_REQUEST 2
852 #define OFPT_ECHO_REPLY 3
853 #define OFPT_EXPERIMENTER 4
854 #define OFPT_FEATURES_REQUEST 5
855 #define OFPT_FEATURES_REPLY 6
856 #define OFPT_GET_CONFIG_REQUEST 7
857 #define OFPT_GET_CONFIG_REPLY 8
858 #define OFPT_SET_CONFIG 9
859 #define OFPT_PACKET_IN 10
860 #define OFPT_FLOW_REMOVED 11
861 #define OFPT_PORT_STATUS 12
862 #define OFPT_PACKET_OUT 13
863 #define OFPT_FLOW_MOD 14
864 #define OFPT_GROUP_MOD 15
865 #define OFPT_PORT_MOD 16
866 #define OFPT_TABLE_MOD 17
867 #define OFPT_MULTIPART_REQUEST 18
868 #define OFPT_MULTIPART_REPLY 19
869 #define OFPT_BARRIER_REQUEST 20
870 #define OFPT_BARRIER_REPLY 21
871 #define OFPT_ROLE_REQUEST 24
872 #define OFPT_ROLE_REPLY 25
873 #define OFPT_GET_ASYNC_REQUEST 26
874 #define OFPT_GET_ASYNC_REPLY 27
875 #define OFPT_SET_ASYNC 28
876 #define OFPT_METER_MOD 29
877 #define OFPT_ROLE_STATUS 30
878 #define OFPT_TABLE_STATUS 31
879 #define OFPT_REQUESTFORWARD 32
880 #define OFPT_BUNDLE_CONTROL 33
881 #define OFPT_BUNDLE_ADD_MESSAGE 34
882 static const value_string openflow_v5_type_values
[] = {
883 { OFPT_HELLO
, "OFPT_HELLO" },
884 { OFPT_ERROR
, "OFPT_ERROR" },
885 { OFPT_ECHO_REQUEST
, "OFPT_ECHO_REQUEST" },
886 { OFPT_ECHO_REPLY
, "OFPT_ECHO_REPLY" },
887 { OFPT_EXPERIMENTER
, "OFPT_EXPERIMENTER" },
888 { OFPT_FEATURES_REQUEST
, "OFPT_FEATURES_REQUEST" },
889 { OFPT_FEATURES_REPLY
, "OFPT_FEATURES_REPLY" },
890 { OFPT_GET_CONFIG_REQUEST
, "OFPT_GET_CONFIG_REQUEST" },
891 { OFPT_GET_CONFIG_REPLY
, "OFPT_GET_CONFIG_REPLY" },
892 { OFPT_SET_CONFIG
, "OFPT_SET_CONFIG" },
893 { OFPT_PACKET_IN
, "OFPT_PACKET_IN" },
894 { OFPT_FLOW_REMOVED
, "OFPT_FLOW_REMOVED" },
895 { OFPT_PORT_STATUS
, "OFPT_PORT_STATUS" },
896 { OFPT_PACKET_OUT
, "OFPT_PACKET_OUT" },
897 { OFPT_FLOW_MOD
, "OFPT_FLOW_MOD" },
898 { OFPT_GROUP_MOD
, "OFPT_GROUP_MOD" },
899 { OFPT_PORT_MOD
, "OFPT_PORT_MOD" },
900 { OFPT_TABLE_MOD
, "OFPT_TABLE_MOD" },
901 { OFPT_MULTIPART_REQUEST
, "OFPT_MULTIPART_REQUEST" },
902 { OFPT_MULTIPART_REPLY
, "OFPT_MULTIPART_REPLY" },
903 { OFPT_BARRIER_REQUEST
, "OFPT_BARRIER_REQUEST" },
904 { OFPT_BARRIER_REPLY
, "OFPT_BARRIER_REPLY" },
905 { OFPT_ROLE_REQUEST
, "OFPT_ROLE_REQUEST" },
906 { OFPT_ROLE_REPLY
, "OFPT_ROLE_REPLY" },
907 { OFPT_GET_ASYNC_REQUEST
, "OFPT_GET_ASYNC_REQUEST" },
908 { OFPT_GET_ASYNC_REPLY
, "OFPT_GET_ASYNC_REPLY" },
909 { OFPT_SET_ASYNC
, "OFPT_SET_ASYNC" },
910 { OFPT_METER_MOD
, "OFPT_METER_MOD" },
911 { OFPT_ROLE_STATUS
, "OFPT_ROLE_STATUS" },
912 { OFPT_TABLE_STATUS
, "OFPT_TABLE_STATUS" },
913 { OFPT_REQUESTFORWARD
, "OFPT_REQUESTFORWARD" },
914 { OFPT_BUNDLE_CONTROL
, "OFPT_BUNDLE_CONTROL" },
915 { OFPT_BUNDLE_ADD_MESSAGE
, "OFPT_BUNDLE_ADD_MESSAGE" },
918 static value_string_ext openflow_v5_type_values_ext
= VALUE_STRING_EXT_INIT(openflow_v5_type_values
);
921 dissect_openflow_header_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
923 /* uint8_t version; */
924 proto_tree_add_item(tree
, hf_openflow_v5_version
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
928 proto_tree_add_item(tree
, hf_openflow_v5_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
931 /* uint16_t length; */
932 proto_tree_add_item(tree
, hf_openflow_v5_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
936 proto_tree_add_item(tree
, hf_openflow_v5_xid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
942 #define OFPP_MAX 0xffffff00 /* Last usable port number. */
943 static const value_string openflow_v5_port_reserved_values
[] = {
944 { 0xfffffff8, "OFPP_IN_PORT" },
945 { 0xfffffff9, "OFPP_TABLE" },
946 { 0xfffffffa, "OFPP_NORMAL" },
947 { 0xfffffffb, "OFPP_FLOOD" },
948 { 0xfffffffc, "OFPP_ALL" },
949 { 0xfffffffd, "OFPP_CONTROLLER" },
950 { 0xfffffffe, "OFPP_LOCAL" },
951 { 0xffffffff, "OFPP_ANY" },
955 #define OFPG_MAX 0xffffff00 /* Last usable group number. */
956 static const value_string openflow_v5_group_reserved_values
[] = {
957 { 0xfffffffc, "OFPG_ALL" },
958 { 0xffffffff, "OFPG_ANY" },
962 #define OFPTT_MAX 254 /* Last usable table number. */
963 static const value_string openflow_v5_table_reserved_values
[] = {
969 #define OFP_NO_BUFFER 0xffffffff /* No buffering. */
970 static const value_string openflow_v5_buffer_reserved_values
[] = {
971 { 0xffffffff, "OFP_NO_BUFFER" },
975 #define OFPXMC_NXM_0 0x0000 /* Backward compatibility with NXM */
976 #define OFPXMC_NXM_1 0x0001 /* Backward compatibility with NXM */
977 #define OFPXMC_OPENFLOW_BASIC 0x8000 /* Basic class for OpenFlow */
978 #define OFPXMC_EXPERIMENTER 0xFFFF /* Experimenter class */
979 static const value_string openflow_v5_oxm_class_values
[] = {
980 { 0x0000, "OFPXMC_NMX_0" },
981 { 0x0001, "OFPXMC_NXM_1" },
982 { 0x8000, "OFPXMC_OPENFLOW_BASIC" },
983 { 0xFFFF, "OFPXMC_EXPERIMENTER" },
987 #define OFPXMT_OFB_IN_PORT 0
988 #define OFPXMT_OFB_IN_PHY_PORT 1
989 #define OFPXMT_OFB_METADATA 2
990 #define OFPXMT_OFB_ETH_DST 3
991 #define OFPXMT_OFB_ETH_SRC 4
992 #define OFPXMT_OFB_ETH_TYPE 5
993 #define OFPXMT_OFB_VLAN_VID 6
994 #define OFPXMT_OFB_VLAN_PCP 7
995 #define OFPXMT_OFB_IP_DSCP 8
996 #define OFPXMT_OFB_IP_ECN 9
997 #define OFPXMT_OFB_IP_PROTO 10
998 #define OFPXMT_OFB_IPV4_SRC 11
999 #define OFPXMT_OFB_IPV4_DST 12
1000 #define OFPXMT_OFB_TCP_SRC 13
1001 #define OFPXMT_OFB_TCP_DST 14
1002 #define OFPXMT_OFB_UDP_SRC 15
1003 #define OFPXMT_OFB_UDP_DST 16
1004 #define OFPXMT_OFB_SCTP_SRC 17
1005 #define OFPXMT_OFB_SCTP_DST 18
1006 #define OFPXMT_OFB_ICMPV4_TYPE 19
1007 #define OFPXMT_OFB_ICMPV4_CODE 20
1008 #define OFPXMT_OFB_ARP_OP 21
1009 #define OFPXMT_OFB_ARP_SPA 22
1010 #define OFPXMT_OFB_ARP_TPA 23
1011 #define OFPXMT_OFB_ARP_SHA 24
1012 #define OFPXMT_OFB_ARP_THA 25
1013 #define OFPXMT_OFB_IPV6_SRC 26
1014 #define OFPXMT_OFB_IPV6_DST 27
1015 #define OFPXMT_OFB_IPV6_FLABEL 28
1016 #define OFPXMT_OFB_ICMPV6_TYPE 29
1017 #define OFPXMT_OFB_ICMPV6_CODE 30
1018 #define OFPXMT_OFB_IPV6_ND_TARGET 31
1019 #define OFPXMT_OFB_IPV6_ND_SLL 32
1020 #define OFPXMT_OFB_IPV6_ND_TLL 33
1021 #define OFPXMT_OFB_MPLS_LABEL 34
1022 #define OFPXMT_OFB_MPLS_TC 35
1023 #define OFPXMT_OFP_MPLS_BOS 36
1024 #define OFPXMT_OFB_PBB_ISID 37
1025 #define OFPXMT_OFB_TUNNEL_ID 38
1026 #define OFPXMT_OFB_IPV6_EXTHDR 39
1027 #define OFPXMT_OFB_PBB_UCA 41
1028 static const value_string openflow_v5_oxm_basic_field_values
[] = {
1029 { 0, "OFPXMT_OFB_IN_PORT" },
1030 { 1, "OFPXMT_OFB_IN_PHY_PORT" },
1031 { 2, "OFPXMT_OFB_METADATA" },
1032 { 3, "OFPXMT_OFB_ETH_DST" },
1033 { 4, "OFPXMT_OFB_ETH_SRC" },
1034 { 5, "OFPXMT_OFB_ETH_TYPE" },
1035 { 6, "OFPXMT_OFB_VLAN_VID" },
1036 { 7, "OFPXMT_OFB_VLAN_PCP" },
1037 { 8, "OFPXMT_OFB_IP_DSCP" },
1038 { 9, "OFPXMT_OFB_IP_ECN" },
1039 { 10, "OFPXMT_OFB_IP_PROTO" },
1040 { 11, "OFPXMT_OFB_IPV4_SRC" },
1041 { 12, "OFPXMT_OFB_IPV4_DST" },
1042 { 13, "OFPXMT_OFB_TCP_SRC" },
1043 { 14, "OFPXMT_OFB_TCP_DST" },
1044 { 15, "OFPXMT_OFB_UDP_SRC" },
1045 { 16, "OFPXMT_OFB_UDP_DST" },
1046 { 17, "OFPXMT_OFB_SCTP_SRC" },
1047 { 18, "OFPXMT_OFB_SCTP_DST" },
1048 { 19, "OFPXMT_OFB_ICMPV4_TYPE" },
1049 { 20, "OFPXMT_OFB_ICMPV4_CODE" },
1050 { 21, "OFPXMT_OFB_ARP_OP" },
1051 { 22, "OFPXMT_OFB_ARP_SPA" },
1052 { 23, "OFPXMT_OFB_ARP_TPA" },
1053 { 24, "OFPXMT_OFB_ARP_SHA" },
1054 { 25, "OFPXMT_OFB_ARP_THA" },
1055 { 26, "OFPXMT_OFB_IPV6_SRC" },
1056 { 27, "OFPXMT_OFB_IPV6_DST" },
1057 { 28, "OFPXMT_OFB_IPV6_FLABEL" },
1058 { 29, "OFPXMT_OFB_ICMPV6_TYPE" },
1059 { 30, "OFPXMT_OFB_ICMPV6_CODE" },
1060 { 31, "OFPXMT_OFB_IPV6_ND_TARGET" },
1061 { 32, "OFPXMT_OFB_IPV6_ND_SLL" },
1062 { 33, "OFPXMT_OFB_IPV6_ND_TLL" },
1063 { 34, "OFPXMT_OFB_MPLS_LABEL" },
1064 { 35, "OFPXMT_OFB_MPLS_TC" },
1065 { 36, "OFPXMT_OFP_MPLS_BOS" },
1066 { 37, "OFPXMT_OFB_PBB_ISID" },
1067 { 38, "OFPXMT_OFB_TUNNEL_ID" },
1068 { 39, "OFPXMT_OFB_IPV6_EXTHDR" },
1069 { 40, "UNASSIGNED" }, /* include to allow direct lookup */
1070 { 41, "OFPXMT_OFB_PBB_UCA" },
1073 static value_string_ext openflow_v5_oxm_basic_field_values_ext
= VALUE_STRING_EXT_INIT(openflow_v5_oxm_basic_field_values
);
1075 #define OXM_FIELD_MASK 0xfe
1076 #define OXM_FIELD_OFFSET 1
1077 #define OXM_HM_MASK 0x01
1079 dissect_openflow_oxm_header_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1084 oxm_class
= tvb_get_ntohs(tvb
, offset
);
1085 proto_tree_add_item(tree
, hf_openflow_v5_oxm_class
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1089 if (oxm_class
== OFPXMC_OPENFLOW_BASIC
) {
1090 proto_tree_add_bits_item(tree
, hf_openflow_v5_oxm_field_basic
, tvb
, (offset
* 8), 7, ENC_NA
);
1092 proto_tree_add_bits_item(tree
, hf_openflow_v5_oxm_field
, tvb
, (offset
* 8), 7, ENC_NA
);
1096 proto_tree_add_bits_item(tree
, hf_openflow_v5_oxm_hm
, tvb
, (offset
* 8) + 7, 1, ENC_NA
);
1100 proto_tree_add_item(tree
, hf_openflow_v5_oxm_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1107 #define OFPVID_PRESENT 0x1000
1109 dissect_openflow_oxm_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1111 proto_tree
*oxm_tree
;
1114 uint8_t oxm_field_hm
;
1118 uint8_t field_length
;
1120 oxm_class
= tvb_get_ntohs(tvb
, offset
);
1121 oxm_field_hm
= tvb_get_uint8(tvb
, offset
+ 2);
1122 oxm_length
= tvb_get_uint8(tvb
, offset
+ 3);
1123 oxm_end
= offset
+ 4 + oxm_length
;
1125 oxm_field
= (oxm_field_hm
& OXM_FIELD_MASK
) >> OXM_FIELD_OFFSET
;
1126 oxm_hm
= oxm_field_hm
& OXM_HM_MASK
;
1127 field_length
= (oxm_hm
== 0) ? oxm_length
: (oxm_length
/ 2);
1129 oxm_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, oxm_length
+ 4, ett_openflow_v5_oxm
, NULL
, "OXM field");
1131 offset
= dissect_openflow_oxm_header_v5(tvb
, pinfo
, oxm_tree
, offset
, length
);
1133 if (oxm_class
== OFPXMC_OPENFLOW_BASIC
) {
1135 case OFPXMT_OFB_IN_PORT
:
1136 case OFPXMT_OFB_IN_PHY_PORT
:
1137 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_uint32
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1141 case OFPXMT_OFB_ETH_DST
:
1142 case OFPXMT_OFB_ETH_SRC
:
1143 case OFPXMT_OFB_ARP_SHA
:
1144 case OFPXMT_OFB_ARP_THA
:
1145 case OFPXMT_OFB_IPV6_ND_SLL
: /*The source link-layer address option in an IPv6 Neighbor Discovery message */
1146 case OFPXMT_OFB_IPV6_ND_TLL
: /*The target link-layer address option in an IPv6 Neighbor Discovery message */
1147 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_etheraddr
, tvb
, offset
, 6, ENC_NA
);
1150 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_mask_etheraddr
, tvb
, offset
, 6, ENC_NA
);
1155 case OFPXMT_OFB_ETH_TYPE
:
1156 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1160 case OFPXMT_OFB_VLAN_VID
:
1161 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_vlan_present
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1162 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_vlan_vid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1165 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_mask_vlan
, tvb
, offset
, 2, ENC_NA
);
1170 case OFPXMT_OFB_IP_PROTO
:
1171 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_ipproto
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1175 case OFPXMT_OFB_IPV4_SRC
:
1176 case OFPXMT_OFB_IPV4_DST
:
1177 case OFPXMT_OFB_ARP_SPA
:
1178 case OFPXMT_OFB_ARP_TPA
:
1179 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_ipv4addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1182 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_mask_ipv4addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1187 case OFPXMT_OFB_TCP_SRC
:
1188 case OFPXMT_OFB_TCP_DST
:
1189 case OFPXMT_OFB_UDP_SRC
:
1190 case OFPXMT_OFB_UDP_DST
:
1191 case OFPXMT_OFB_SCTP_SRC
:
1192 case OFPXMT_OFB_SCTP_DST
:
1193 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_uint16
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1197 case OFPXMT_OFB_IPV6_SRC
:
1198 case OFPXMT_OFB_IPV6_DST
:
1199 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_ipv6addr
, tvb
, offset
, 16, ENC_NA
);
1202 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_mask_ipv6addr
, tvb
, offset
, 16, ENC_NA
);
1207 case OFPXMT_OFB_MPLS_LABEL
:
1208 /* size differs in specification and header file */
1209 if (field_length
== 3) {
1210 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_uint24
, tvb
, offset
, 3, ENC_BIG_ENDIAN
);
1212 } else if (field_length
== 4) {
1213 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value_uint32
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1220 if (field_length
> 0) {
1221 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_value
, tvb
, offset
, field_length
, ENC_NA
);
1222 offset
+= field_length
;
1226 if (field_length
> 0 && oxm_hm
!= 0) {
1227 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_mask
, tvb
, offset
, field_length
, ENC_NA
);
1228 offset
+= field_length
;
1233 if(oxm_end
> offset
){
1234 proto_tree_add_expert_format(oxm_tree
, pinfo
, &ei_openflow_v5_oxm_undecoded
,
1235 tvb
, offset
, oxm_end
-offset
, "Undecoded Data");
1239 } else if (oxm_class
== OFPXMC_EXPERIMENTER
) {
1240 /* uint32_t experimenter; */
1241 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1243 proto_tree_add_item(oxm_tree
, hf_openflow_v5_oxm_experimenter_value
, tvb
, offset
, oxm_length
- 4, ENC_NA
);
1244 offset
+=(oxm_length
- 4);
1246 proto_tree_add_expert_format(oxm_tree
, pinfo
, &ei_openflow_v5_oxm_undecoded
,
1247 tvb
, offset
, oxm_length
, "Unknown OXM body.");
1254 #define OFPMT_STANDARD 0 /* Standard Match. Deprecated. */
1255 #define OFPMT_OXM 1 /* OpenFlow Extensible Match */
1256 static const value_string openflow_v5_match_type_values
[] = {
1257 { 0, "OFPMT_STANDARD" },
1263 dissect_openflow_match_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1266 proto_tree
*match_tree
;
1267 uint16_t match_type
;
1268 uint16_t match_length
;
1270 uint16_t pad_length
;
1272 match_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_match
, &ti
, "Match");
1274 /* uint16_t type; */
1275 match_type
= tvb_get_ntohs(tvb
, offset
);
1276 proto_tree_add_item(match_tree
, hf_openflow_v5_match_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1279 /* uint16_t length; (excluding padding) */
1280 match_length
= tvb_get_ntohs(tvb
, offset
);
1281 pad_length
= (match_length
+ 7)/8*8 - match_length
;
1282 proto_item_set_len(ti
, match_length
+ pad_length
);
1283 ti
= proto_tree_add_item(match_tree
, hf_openflow_v5_match_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1286 if (match_length
< 4) {
1287 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
1292 switch (match_type
) {
1293 case OFPMT_STANDARD
:
1294 if (match_length
<= 4) {
1295 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
1299 proto_tree_add_expert_format(match_tree
, pinfo
, &ei_openflow_v5_match_undecoded
,
1300 tvb
, offset
, match_length
- 4, "Standard match body (deprecated).");
1301 offset
+=match_length
-4;
1305 fields_end
= offset
+ match_length
- 4;
1306 while(offset
< fields_end
) {
1307 offset
= dissect_openflow_oxm_v5(tvb
, pinfo
, match_tree
, offset
, length
);
1312 if (match_length
<= 4) {
1313 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
1317 proto_tree_add_expert_format(match_tree
, pinfo
, &ei_openflow_v5_match_undecoded
,
1318 tvb
, offset
, match_length
- 4, "Unknown match body.");
1319 offset
+=match_length
-4;
1323 /* pad; Exactly ((length + 7)/8*8 - length) (between 0 and 7) bytes of all-zero bytes. */
1324 if (pad_length
> 0) {
1325 proto_tree_add_item(match_tree
, hf_openflow_v5_match_pad
, tvb
, offset
, pad_length
, ENC_NA
);
1332 #define OFPM_MAX 0xffffff00 /* Last usable meter number. */
1333 static const value_string openflow_v5_meter_id_reserved_values
[] = {
1334 { 0xfffffffd, "OFPM_SLOWPATH" },
1335 { 0xfffffffe, "OFPM_CONTROLLER" },
1336 { 0xffffffff, "OFPM_ALL" },
1340 #define OFPMBT_DROP 1
1341 #define OFPMBT_DSCP_REMARK 2
1342 #define OFPMBT_EXPERIMENTER 0xFFFF
1343 static const value_string openflow_v5_meter_band_type_values
[] = {
1344 { OFPMBT_DROP
, "OFPMBT_DROP" },
1345 { OFPMBT_DSCP_REMARK
, "OFPMBT_DSCP_REMARK" },
1346 { OFPMBT_EXPERIMENTER
, "OFPMBT_EXPERIMENTER" },
1350 #define OFPMF_KBPS 1 << 0
1351 #define OFPMF_PKTPS 1 << 1
1352 #define OFPMF_BURST 1 << 2
1353 #define OFPMF_STATS 1 << 3
1356 dissect_openflow_meter_band_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1359 proto_tree
*band_tree
;
1363 band_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_meter_band
, &ti
, "Meter band");
1365 /* uint16_t type; */
1366 band_type
= tvb_get_ntohs(tvb
, offset
);
1367 proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1371 band_len
= tvb_get_ntohs(tvb
, offset
);
1372 proto_item_set_len(ti
, band_len
);
1373 ti
= proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1376 /* uint32_t rate; */
1377 proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_rate
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1380 /* uint32_t burst_size; */
1381 proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_burst_size
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1384 if (band_len
< 12) {
1385 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
1389 switch (band_type
) {
1391 /* uint8_t pad[4]; */
1392 proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_drop_pad
, tvb
, offset
, 4, ENC_NA
);
1396 case OFPMBT_DSCP_REMARK
:
1397 /* uint8_t prec_level; */
1398 proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_dscp_remark_prec_level
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1401 /* uint8_t pad[3]; */
1402 proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_dscp_remark_pad
, tvb
, offset
, 3, ENC_NA
);
1406 case OFPMBT_EXPERIMENTER
:
1407 /* uint32_t experimenter; */
1408 proto_tree_add_item(band_tree
, hf_openflow_v5_meter_band_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1411 /* uint32_t experimenter_data[0]; */
1412 proto_tree_add_expert_format(band_tree
, pinfo
, &ei_openflow_v5_meter_band_undecoded
,
1413 tvb
, offset
, offset
- 16 + band_len
, "Experimenter meter band body.");
1414 offset
+=band_len
-16;
1418 proto_tree_add_expert_format(band_tree
, pinfo
, &ei_openflow_v5_meter_band_undecoded
,
1419 tvb
, offset
, offset
- 12 + band_len
, "Unknown meter band body.");
1420 offset
+=band_len
-12;
1428 #define OFPHET_VERSIONBITMAP 1
1429 static const value_string openflow_v5_hello_element_type_values
[] = {
1430 { 1, "OFPHET_VERSIONBITMAP" },
1435 dissect_openflow_hello_element_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1437 proto_tree
*elem_tree
;
1439 uint16_t elem_length
;
1440 uint16_t pad_length
;
1442 elem_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v5_hello_element
, NULL
, "Element");
1444 /* uint16_t type; */
1445 elem_type
= tvb_get_ntohs(tvb
, offset
);
1446 proto_tree_add_item(elem_tree
, hf_openflow_v5_hello_element_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1449 /* uint16_t length; */
1450 elem_length
= tvb_get_ntohs(tvb
, offset
);
1451 pad_length
= (elem_length
+ 7)/8*8 - elem_length
;
1452 proto_tree_add_item(elem_tree
, hf_openflow_v5_hello_element_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1455 if (elem_length
>= 4) {
1457 /* Otherwise expert info? */
1460 switch (elem_type
) {
1461 case OFPHET_VERSIONBITMAP
:
1463 proto_tree_add_item(elem_tree
, hf_openflow_v5_hello_element_version_bitmap
, tvb
, offset
, elem_length
, ENC_NA
);
1464 offset
+= elem_length
;
1468 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_hello_element_undecoded
,
1469 tvb
, offset
, elem_length
, "Unknown hello element body.");
1470 offset
+= elem_length
;
1474 if (pad_length
> 0) {
1475 proto_tree_add_item(tree
, hf_openflow_v5_hello_element_pad
, tvb
, offset
, pad_length
, ENC_NA
);
1483 dissect_openflow_hello_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1486 while (offset
< length
) {
1487 offset
= dissect_openflow_hello_element_v5(tvb
, pinfo
, tree
, offset
, length
);
1492 #define OFPET_HELLO_FAILED 0
1493 #define OFPET_BAD_REQUEST 1
1494 #define OFPET_BAD_ACTION 2
1495 #define OFPET_BAD_INSTRUCTION 3
1496 #define OFPET_BAD_MATCH 4
1497 #define OFPET_FLOW_MOD_FAILED 5
1498 #define OFPET_GROUP_MOD_FAILED 6
1499 #define OFPET_PORT_MOD_FAILED 7
1500 #define OFPET_TABLE_MOD_FAILED 8
1501 #define OFPET_QUEUE_OP_FAILED 9
1502 #define OFPET_SWITCH_CONFIG_FAILED 10
1503 #define OFPET_ROLE_REQUEST_FAILED 11
1504 #define OFPET_METER_MOD_FAILED 12
1505 #define OFPET_TABLE_FEATURES_FAILED 13
1506 #define OFPET_BAD_PROPERTY 14
1507 #define OFPET_ASYNC_CONFIG_FAILED 15
1508 #define OFPET_FLOW_MONITOR_FAILED 16
1509 #define OFPET_BUNDLE_FAILED 17
1510 #define OFPET_EXPERIMENTER 0xffff
1511 static const value_string openflow_v5_error_type_values
[] = {
1512 { 0, "OFPET_HELLO_FAILED" },
1513 { 1, "OFPET_BAD_REQUEST" },
1514 { 2, "OFPET_BAD_ACTION" },
1515 { 3, "OFPET_BAD_INSTRUCTION" },
1516 { 4, "OFPET_BAD_MATCH" },
1517 { 5, "OFPET_FLOW_MOD_FAILED" },
1518 { 6, "OFPET_GROUP_MOD_FAILED" },
1519 { 7, "OFPET_PORT_MOD_FAILED" },
1520 { 8, "OFPET_TABLE_MOD_FAILED" },
1521 { 9, "OFPET_QUEUE_OP_FAILED" },
1522 { 10, "OFPET_SWITCH_CONFIG_FAILED" },
1523 { 11, "OFPET_ROLE_REQUEST_FAILED" },
1524 { 12, "OFPET_METER_MOD_FAILED" },
1525 { 13, "OFPET_TABLE_FEATURES_FAILED" },
1526 { 14, "OFPET_BAD_PROPERTY" },
1527 { 15, "OFPET_ASYNC_CONFIG_FAILED" },
1528 { 16, "OFPET_FLOW_MONITOR_FAILED" },
1529 { 17, "OFPET_BUNDLE_FAILED" },
1530 { 0xffff, "OFPET_EXPERIMENTER" },
1534 static const value_string openflow_v5_error_hello_failed_code_values
[] = {
1535 { 0, "OFPHFC_INCOMPATIBLE" },
1536 { 1, "OFPHFC_EPERM" },
1540 static const value_string openflow_v5_error_bad_request_code_values
[] = {
1541 { 0, "OFPBRC_BAD_VERSION" },
1542 { 1, "OFPBRC_BAD_TYPE" },
1543 { 2, "OFPBRC_BAD_MULTIPART" },
1544 { 3, "OFPBRC_BAD_EXPERIMENTER" },
1545 { 4, "OFPBRC_BAD_EXP_TYPE" },
1546 { 5, "OFPBRC_EPERM" },
1547 { 6, "OFPBRC_BAD_LEN" },
1548 { 7, "OFPBRC_BUFFER_EMPTY" },
1549 { 8, "OFPBRC_BUFFER_UNKNOWN" },
1550 { 9, "OFPBRC_BAD_TABLE_ID" },
1551 { 10, "OFPBRC_IS_SLAVE" },
1552 { 11, "OFPBRC_BAD_PORT" },
1553 { 12, "OFPBRC_BAD_PACKET" },
1554 { 13, "OFPBRC_MULTIPART_BUFFER_OVERFLOW" },
1555 { 14, "OFPBRC_MULTIPART_REQUEST_TIMEOUT" },
1556 { 15, "OFPBRC_MULTIPART_REPLY_TIMEOUT" },
1560 static const value_string openflow_v5_error_bad_action_code_values
[] = {
1561 { 0, "OFPBAC_BAD_TYPE" },
1562 { 1, "OFPBAC_BAD_LEN" },
1563 { 2, "OFPBAC_BAD_EXPERIMENTER" },
1564 { 3, "OFPBAC_BAD_EXP_TYPE" },
1565 { 4, "OFPBAC_BAD_OUT_PORT" },
1566 { 5, "OFPBAC_BAD_ARGUMENT" },
1567 { 6, "OFPBAC_EPERM" },
1568 { 7, "OFPBAC_TOO_MANY" },
1569 { 8, "OFPBAC_BAD_QUEUE" },
1570 { 9, "OFPBAC_BAD_OUT_GROUP" },
1571 { 10, "OFPBAC_MATCH_INCONSISTENT" },
1572 { 11, "OFPBAC_UNSUPPORTED_ORDER" },
1573 { 12, "OFPBAC_BAD_TAG" },
1574 { 13, "OFPBAC_BAD_SET_TYPE" },
1575 { 14, "OFPBAC_BAD_SET_LEN" },
1576 { 15, "OFPBAC_BAD_SET_ARGUMENT" },
1580 static const value_string openflow_v5_error_bad_instruction_code_values
[] = {
1581 { 0, "OFPBIC_UNKNOWN_INST" },
1582 { 1, "OFPBIC_UNSUP_INST" },
1583 { 2, "OFPBIC_BAD_TABLE_ID" },
1584 { 3, "OFPBIC_UNSUP_METADATA" },
1585 { 4, "OFPBIC_UNSUP_METADATA_MASK" },
1586 { 5, "OFPBIC_BAD_EXPERIMENTER" },
1587 { 6, "OFPBIC_BAD_EXP_TYPE" },
1588 { 7, "OFPBIC_BAD_LEN" },
1589 { 8, "OFPBIC_EPERM" },
1590 { 9, "OFPBIC_DUP_INST" },
1594 static const value_string openflow_v5_error_bad_match_code_values
[] = {
1595 { 0, "OFPBMC_BAD_TYPE" },
1596 { 1, "OFPBMC_BAD_LEN" },
1597 { 2, "OFPBMC_BAD_TAG" },
1598 { 3, "OFPBMC_BAD_DL_ADDR_MASK" },
1599 { 4, "OFPBMC_BAD_NW_ADDR_MASK" },
1600 { 5, "OFPBMC_BAD_WILDCARDS" },
1601 { 6, "OFPBMC_BAD_FIELD" },
1602 { 7, "OFPBMC_BAD_VALUE" },
1603 { 8, "OFPBMC_BAD_MASK" },
1604 { 9, "OFPBMC_BAD_PREREQ" },
1605 { 10, "OFPBMC_DUP_FIELD" },
1606 { 11, "OFPBMC_EPERM" },
1610 static const value_string openflow_v5_error_flow_mod_failed_code_values
[] = {
1611 { 0, "OFPFMFC_UNKNOWN" },
1612 { 1, "OFPFMFC_TABLE_FULL" },
1613 { 2, "OFPFMFC_BAD_TABLE_ID" },
1614 { 3, "OFPFMFC_OVERLAP" },
1615 { 4, "OFPFMFC_EPERM" },
1616 { 5, "OFPFMFC_BAD_TIMEOUT" },
1617 { 6, "OFPFMFC_BAD_COMMAND" },
1618 { 7, "OFPFMFC_BAD_FLAGS" },
1619 { 8, "OFPFMFC_CANT_SYNC" },
1620 { 9, "OFPFMFC_BAD_PRIORITY" },
1624 static const value_string openflow_v5_error_group_mod_failed_code_values
[] = {
1625 { 0, "OFPGMFC_GROUP_EXISTS" },
1626 { 1, "OFPGMFC_INVALID_GROUP" },
1627 { 2, "OFPGMFC_WEIGHT_UNSUPPORTED" },
1628 { 3, "OFPGMFC_OUT_OF_GROUPS" },
1629 { 4, "OFPGMFC_OUT_OF_BUCKETS" },
1630 { 5, "OFPGMFC_CHAINING_UNSUPPORTED" },
1631 { 6, "OFPGMFC_WATCH_UNSUPPORTED" },
1632 { 7, "OFPGMFC_LOOP" },
1633 { 8, "OFPGMFC_UNKNOWN_GROUP" },
1634 { 9, "OFPGMFC_CHAINED_GROUP" },
1635 { 10, "OFPGMFC_BAD_TYPE" },
1636 { 11, "OFPGMFC_BAD_COMMAND" },
1637 { 12, "OFPGMFC_BAD_BUCKET" },
1638 { 13, "OFPGMFC_BAD_WATCH" },
1639 { 14, "OFPGMFC_EPERM" },
1643 static const value_string openflow_v5_error_port_mod_failed_code_values
[] = {
1644 { 0, "OFPPMFC_BAD_PORT" },
1645 { 1, "OFPPMFC_BAD_HW_ADDR" },
1646 { 2, "OFPPMFC_BAD_CONFIG" },
1647 { 3, "OFPPMFC_BAD_ADVERTISE" },
1648 { 4, "OFPPMFC_EPERM" },
1652 static const value_string openflow_v5_error_table_mod_failed_code_values
[] = {
1653 { 0, "OFPTMFC_BAD_TABLE" },
1654 { 1, "OFPTMFC_BAD_CONFIG" },
1655 { 2, "OFPTMFC_EPERM" },
1659 static const value_string openflow_v5_error_queue_op_failed_code_values
[] = {
1660 { 0, "OFPQOFC_BAD_PORT" },
1661 { 1, "OFPQOFC_BAD_QUEUE" },
1662 { 2, "OFPQOFC_EPERM" },
1666 static const value_string openflow_v5_error_switch_config_failed_code_values
[] = {
1667 { 0, "OFPSCFC_BAD_FLAGS" },
1668 { 1, "OFPSCFC_BAD_LEN" },
1669 { 2, "OFPQCFC_EPERM" },
1673 static const value_string openflow_v5_error_role_request_failed_code_values
[] = {
1674 { 0, "OFPRRFC_STALE" },
1675 { 1, "OFPRRFC_UNSUP" },
1676 { 2, "OFPRRFC_BAD_ROLE" },
1680 static const value_string openflow_v5_error_meter_mod_failed_code_values
[] = {
1681 { 0, "OFPMMFC_UNKNOWN" },
1682 { 1, "OFPMMFC_METER_EXISTS" },
1683 { 2, "OFPMMFC_INVALID_METER" },
1684 { 3, "OFPMMFC_UNKNOWN_METER" },
1685 { 4, "OFPMMFC_BAD_COMMAND" },
1686 { 5, "OFPMMFC_BAD_FLAGS" },
1687 { 6, "OFPMMFC_BAD_RATE" },
1688 { 7, "OFPMMFC_BAD_BURST" },
1689 { 8, "OFPMMFC_BAD_BAND" },
1690 { 9, "OFPMMFC_BAD_BAND_VALUE" },
1691 { 10, "OFPMMFC_OUT_OF_METERS" },
1692 { 11, "OFPMMFC_OUT_OF_BANDS" },
1696 static const value_string openflow_v5_error_table_features_failed_code_values
[] = {
1697 { 0, "OFPTFFC_BAD_TABLE" },
1698 { 1, "OFPTFFC_BAD_METADATA" },
1699 { 5, "OFPTFFC_EPERM" },
1703 static const value_string openflow_v5_error_bad_property_code_values
[] = {
1704 { 0, "OFPBPC_BAD_TYPE" },
1705 { 1, "OFPBPC_BAD_LEN" },
1706 { 2, "OFPBPC_BAD_VALUE" },
1707 { 3, "OFPBPC_TOO_MANY" },
1708 { 4, "OFPBPC_DUP_TYPE" },
1709 { 5, "OFPBPC_BAD_EXPERIMENTER" },
1710 { 6, "OFPBPC_BAD_EXP_TYPE" },
1711 { 7, "OFPBPC_BAD_EXP_VALUE" },
1712 { 8, "OFPBPC_EPERM" },
1716 static const value_string openflow_v5_error_async_config_failed_code_values
[] = {
1717 { 0, "OFPACFC_INVALID" },
1718 { 1, "OFPACFC_UNSUPPORTED" },
1719 { 2, "OFPACFC_EPERM" },
1723 static const value_string openflow_v5_error_flow_monitor_failed_code_values
[] = {
1724 { 0, "OFPMOFC_UNKNOWN" },
1725 { 1, "OFPMOFC_MONITOR_EXISTS" },
1726 { 2, "OFPMOFC_INVALID_MONITOR" },
1727 { 3, "OFPMOFC_UNKNOWN_MONITOR" },
1728 { 4, "OFPMOFC_BAD_COMMAND" },
1729 { 5, "OFPMOFC_BAD_FLAGS" },
1730 { 6, "OFPMOFC_BAD_TABLE_ID" },
1731 { 7, "OFPMOFC_BAD_OUT" },
1735 static const value_string openflow_v5_error_bundle_failed_code_values
[] = {
1736 { 0, "OFPBFC_UNKNOWN" },
1737 { 1, "OFPBFC_EPERM" },
1738 { 2, "OFPBFC_BAD_ID" },
1739 { 3, "OFPBFC_BUNDLE_EXIST" },
1740 { 4, "OFPBFC_BUNDLE_CLOSED" },
1741 { 5, "OFPBFC_OUT_OF_BUNDLES" },
1742 { 6, "OFPBFC_BAD_TYPE" },
1743 { 7, "OFPBFC_BAD_FLAGS" },
1744 { 8, "OFPBFC_MSG_BAD_LEN" },
1745 { 9, "OFPBFC_MSG_BAD_XID" },
1746 { 10, "OFPBFC_MSG_UNSUP" },
1747 { 11, "OFPBFC_MSG_CONFLICT" },
1748 { 12, "OFPBFC_MSG_TOO_MANY" },
1749 { 13, "OFPBFC_MSG_FAILED" },
1750 { 14, "OFPBFC_TIMEOUT" },
1751 { 15, "OFPBFC_BUNDLE_IN_PROGRESS" },
1756 // NOLINTNEXTLINE(misc-no-recursion)
1757 dissect_openflow_error_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1759 proto_tree
*data_tree
;
1760 proto_item
*data_ti
;
1761 uint16_t error_type
;
1763 /* uint16_t type; */
1764 error_type
= tvb_get_ntohs(tvb
, offset
);
1765 proto_tree_add_item(tree
, hf_openflow_v5_error_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1768 /* uint16_t code; */
1769 switch(error_type
) {
1770 case OFPET_HELLO_FAILED
:
1771 proto_tree_add_item(tree
, hf_openflow_v5_error_hello_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1773 case OFPET_BAD_REQUEST
:
1774 proto_tree_add_item(tree
, hf_openflow_v5_error_bad_request_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1776 case OFPET_BAD_ACTION
:
1777 proto_tree_add_item(tree
, hf_openflow_v5_error_bad_action_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1779 case OFPET_BAD_INSTRUCTION
:
1780 proto_tree_add_item(tree
, hf_openflow_v5_error_bad_instruction_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1782 case OFPET_BAD_MATCH
:
1783 proto_tree_add_item(tree
, hf_openflow_v5_error_bad_match_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1785 case OFPET_FLOW_MOD_FAILED
:
1786 proto_tree_add_item(tree
, hf_openflow_v5_error_flow_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1788 case OFPET_GROUP_MOD_FAILED
:
1789 proto_tree_add_item(tree
, hf_openflow_v5_error_group_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1791 case OFPET_PORT_MOD_FAILED
:
1792 proto_tree_add_item(tree
, hf_openflow_v5_error_port_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1794 case OFPET_TABLE_MOD_FAILED
:
1795 proto_tree_add_item(tree
, hf_openflow_v5_error_table_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1797 case OFPET_QUEUE_OP_FAILED
:
1798 proto_tree_add_item(tree
, hf_openflow_v5_error_queue_op_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1800 case OFPET_SWITCH_CONFIG_FAILED
:
1801 proto_tree_add_item(tree
, hf_openflow_v5_error_switch_config_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1803 case OFPET_ROLE_REQUEST_FAILED
:
1804 proto_tree_add_item(tree
, hf_openflow_v5_error_role_request_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1806 case OFPET_METER_MOD_FAILED
:
1807 proto_tree_add_item(tree
, hf_openflow_v5_error_meter_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1809 case OFPET_TABLE_FEATURES_FAILED
:
1810 proto_tree_add_item(tree
, hf_openflow_v5_error_table_features_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1812 case OFPET_BAD_PROPERTY
:
1813 proto_tree_add_item(tree
, hf_openflow_v5_error_bad_property_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1815 case OFPET_ASYNC_CONFIG_FAILED
:
1816 proto_tree_add_item(tree
, hf_openflow_v5_error_async_config_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1818 case OFPET_FLOW_MONITOR_FAILED
:
1819 proto_tree_add_item(tree
, hf_openflow_v5_error_flow_monitor_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1821 case OFPET_BUNDLE_FAILED
:
1822 proto_tree_add_item(tree
, hf_openflow_v5_error_bundle_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1824 case OFPET_EXPERIMENTER
:
1826 proto_tree_add_item(tree
, hf_openflow_v5_error_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1831 switch(error_type
) {
1832 case OFPET_HELLO_FAILED
:
1833 /* uint8_t data[0]; contains an ASCII text string */
1834 proto_tree_add_item(tree
, hf_openflow_v5_error_data_text
, tvb
, offset
, length
- 12, ENC_NA
|ENC_ASCII
);
1835 /*offset += length - 12;*/
1838 case OFPET_BAD_REQUEST
:
1839 case OFPET_BAD_ACTION
:
1840 case OFPET_BAD_INSTRUCTION
:
1841 case OFPET_BAD_MATCH
:
1842 case OFPET_FLOW_MOD_FAILED
:
1843 case OFPET_GROUP_MOD_FAILED
:
1844 case OFPET_PORT_MOD_FAILED
:
1845 case OFPET_TABLE_MOD_FAILED
:
1846 case OFPET_QUEUE_OP_FAILED
:
1847 case OFPET_SWITCH_CONFIG_FAILED
:
1848 case OFPET_ROLE_REQUEST_FAILED
:
1849 case OFPET_METER_MOD_FAILED
:
1850 case OFPET_TABLE_FEATURES_FAILED
: {
1851 /* uint8_t data[0]; contains at least the first 64 bytes of the failed request. */
1852 bool save_in_error_pkt
;
1854 data_ti
= proto_tree_add_item(tree
, hf_openflow_v5_error_data_body
, tvb
, offset
, length
- 20, ENC_NA
);
1855 data_tree
= proto_item_add_subtree(data_ti
, ett_openflow_v5_error_data
);
1857 /* Save error pkt */
1858 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
1859 pinfo
->flags
.in_error_pkt
= true;
1861 /* Disable update/change of column info */
1862 col_set_writable(pinfo
->cinfo
, -1, false);
1864 dissect_openflow_message_v5(tvb
, pinfo
, data_tree
, offset
);
1866 /* Restore the "we're inside an error packet" flag. */
1867 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
1869 /* Restore the capability of update/change column info */
1870 col_set_writable(pinfo
->cinfo
, -1, true);
1872 /*offset += length - 12;*/
1876 case OFPET_EXPERIMENTER
:
1877 /* uint32_t experimenter */
1878 proto_tree_add_item(tree
, hf_openflow_v5_error_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1880 /* uint8_t data[0]; */
1881 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_error_undecoded
,
1882 tvb
, offset
, length
- 16, "Experimenter error body.");
1883 /*offset += length - 16;*/
1887 /* uint8_t data[0]; */
1888 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_error_undecoded
,
1889 tvb
, offset
, length
- 12, "Unknown error body.");
1890 /*offset += length - 12;*/
1897 dissect_openflow_echo_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1900 if (offset
< length
) {
1901 proto_tree_add_item(tree
, hf_openflow_v5_echo_data
, tvb
, offset
, length
- offset
, ENC_NA
);
1907 dissect_openflow_experimenter_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1909 /* uint32_t experimenter; */
1910 proto_tree_add_item(tree
, hf_openflow_v5_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1913 /* uint32_t exp_type; */
1914 proto_tree_add_item(tree
, hf_openflow_v5_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1918 if (offset
< length
) {
1919 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_experimenter_undecoded
,
1920 tvb
, offset
, length
- 16, "Experimenter body.");
1924 #define OFPC_FLOW_STATS 1<<0
1925 #define OFPC_TABLE_STATS 1<<1
1926 #define OFPC_PORT_STATS 1<<2
1927 #define OFPC_GROUP_STATS 1<<3
1928 #define OFPC_IP_REASM 1<<5
1929 #define OFPC_QUEUE_STATS 1<<6
1930 #define OFPC_PORT_BLOCKED 1<<8
1932 dissect_openflow_switch_features_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1935 proto_tree
*cap_tree
;
1937 /* uint64_t datapath_id; */
1938 proto_tree_add_item(tree
, hf_openflow_v5_switch_features_datapath_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1941 /* uint32_t n_buffers; */
1942 proto_tree_add_item(tree
, hf_openflow_v5_switch_features_n_buffers
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1945 /* uint8_t n_tables; */
1946 proto_tree_add_item(tree
, hf_openflow_v5_switch_features_n_tables
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1949 /* uint8_t auxiliary_id; */
1950 proto_tree_add_item(tree
, hf_openflow_v5_switch_features_auxiliary_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1953 /* uint8_t pad[2]; */
1954 proto_tree_add_item(tree
, hf_openflow_v5_switch_features_pad
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1957 /* uint32_t capabilities; */
1958 ti
= proto_tree_add_item(tree
, hf_openflow_v5_switch_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1959 cap_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_switch_features_capabilities
);
1961 proto_tree_add_item(cap_tree
, hf_openflow_v5_switch_features_capabilities_flow_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1962 proto_tree_add_item(cap_tree
, hf_openflow_v5_switch_features_capabilities_table_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1963 proto_tree_add_item(cap_tree
, hf_openflow_v5_switch_features_capabilities_port_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1964 proto_tree_add_item(cap_tree
, hf_openflow_v5_switch_features_capabilities_group_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1965 proto_tree_add_item(cap_tree
, hf_openflow_v5_switch_features_capabilities_ip_reasm
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1966 proto_tree_add_item(cap_tree
, hf_openflow_v5_switch_features_capabilities_queue_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1967 proto_tree_add_item(cap_tree
, hf_openflow_v5_switch_features_capabilities_port_blocked
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1970 /* uint32_t reserved; */
1971 proto_tree_add_item(tree
, hf_openflow_v5_switch_features_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1975 static const value_string openflow_v5_switch_config_fragments_values
[] = {
1976 { 0, "OFPC_FRAG_NORMAL" },
1977 { 1, "OFPC_FRAG_DROP" },
1978 { 2, "OFPC_FRAG_REASM" },
1982 #define OFPCML_MAX 0xffe5 /* Maximum max_len value. */
1983 static const value_string openflow_v5_controller_max_len_reserved_values
[] = {
1984 { 0xffff, "OFPCML_NO_BUFFER" },
1989 dissect_openflow_switch_config_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1992 proto_tree
*flags_tree
;
1994 /* uint16_t flags; */
1995 ti
= proto_tree_add_item(tree
, hf_openflow_v5_switch_config_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1996 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_switch_config_flags
);
1999 proto_tree_add_bits_item(flags_tree
, hf_openflow_v5_switch_config_flags_fragments
, tvb
, (offset
* 8) + 14, 2, ENC_NA
);
2002 /* uint16_t miss_send_len; */
2003 proto_tree_add_item(tree
, hf_openflow_v5_switch_config_miss_send_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2007 #define OFPR_TABLE_MISS 0
2008 #define OFPR_APPLY_ACTION 1
2009 #define OFPR_INVALID_TTL 2
2010 #define OFPR_ACTION_SET 3
2011 #define OFPR_GROUP 4
2012 #define OFPR_PACKET_OUT 5
2013 static const value_string openflow_v5_packet_in_reason_values
[] = {
2014 { OFPR_TABLE_MISS
, "OFPR_TABLE_MISS" },
2015 { OFPR_APPLY_ACTION
, "OFPR_APPLY_ACTION" },
2016 { OFPR_INVALID_TTL
, "OFPR_INVALID_TTL" },
2017 { OFPR_ACTION_SET
, "OFPR_ACTION_SET" },
2018 { OFPR_GROUP
, "OFPR_GROUP " },
2019 { OFPR_PACKET_OUT
, "OFPR_PACKET_OUT" },
2024 dissect_openflow_packet_in_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2026 proto_tree
*data_tree
;
2029 bool save_in_error_pkt
;
2030 address save_dl_src
, save_dl_dst
, save_net_src
, save_net_dst
, save_src
, save_dst
;
2032 /* uint32_t buffer_id; */
2033 proto_tree_add_item(tree
, hf_openflow_v5_packet_in_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2036 /* uint16_t total_len; */
2037 proto_tree_add_item(tree
, hf_openflow_v5_packet_in_total_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2040 /* uint8_t reason; */
2041 proto_tree_add_item(tree
, hf_openflow_v5_packet_in_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2044 /* uint8_t table_id; */
2045 proto_tree_add_item(tree
, hf_openflow_v5_packet_in_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2048 /* uint64_t cookie; */
2049 proto_tree_add_item(tree
, hf_openflow_v5_packet_in_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2052 /* struct ofp_match match; */
2053 offset
= dissect_openflow_match_v5(tvb
, pinfo
, tree
, offset
, length
);
2055 /* uint8_t pad[2]; */
2056 proto_tree_add_item(tree
, hf_openflow_v5_packet_in_pad
, tvb
, offset
, 2, ENC_NA
);
2059 /* uint8_t data[0]; */
2060 if (offset
< length
) {
2061 data_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v5_packet_in_data
, NULL
, "Data");
2063 /* save some state */
2064 save_writable
= col_get_writable(pinfo
->cinfo
, -1);
2065 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
2066 copy_address_shallow(&save_dl_src
, &pinfo
->dl_src
);
2067 copy_address_shallow(&save_dl_dst
, &pinfo
->dl_dst
);
2068 copy_address_shallow(&save_net_src
, &pinfo
->net_src
);
2069 copy_address_shallow(&save_net_dst
, &pinfo
->net_dst
);
2070 copy_address_shallow(&save_src
, &pinfo
->src
);
2071 copy_address_shallow(&save_dst
, &pinfo
->dst
);
2074 col_set_writable(pinfo
->cinfo
, -1, false);
2075 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
- offset
);
2076 call_dissector(eth_withoutfcs_handle
, next_tvb
, pinfo
, data_tree
);
2078 /* restore saved state */
2079 col_set_writable(pinfo
->cinfo
, -1, save_writable
);
2080 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
2081 copy_address_shallow(&pinfo
->dl_src
, &save_dl_src
);
2082 copy_address_shallow(&pinfo
->dl_dst
, &save_dl_dst
);
2083 copy_address_shallow(&pinfo
->net_src
, &save_net_src
);
2084 copy_address_shallow(&pinfo
->net_dst
, &save_net_dst
);
2085 copy_address_shallow(&pinfo
->src
, &save_src
);
2086 copy_address_shallow(&pinfo
->dst
, &save_dst
);
2091 #define OFPRR_IDLE_TIMEOUT 0
2092 #define OFPRR_HARD_TIMEOUT 1
2093 #define OFPRR_DELETE 2
2094 #define OFPRR_GROUP_DELETE 3
2095 #define OFPRR_METER_DELETE 4
2096 #define OFPRR_EVICTION 5
2097 static const value_string openflow_v5_flow_removed_reason_values
[] = {
2098 { OFPRR_IDLE_TIMEOUT
, "OFPRR_IDLE_TIMEOUT" },
2099 { OFPRR_HARD_TIMEOUT
, "OFPRR_HARD_TIMEOUT" },
2100 { OFPRR_DELETE
, "OFPRR_DELETE" },
2101 { OFPRR_GROUP_DELETE
, "OFPRR_GROUP_DELETE" },
2102 { OFPRR_METER_DELETE
, "OFPRR_METER_DELETE" },
2103 { OFPRR_EVICTION
, "OFPRR_EVICTION" },
2108 dissect_openflow_flow_removed_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2110 /* uint64_t cookie; */
2111 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2114 /* uint16_t priority; */
2115 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2118 /* uint8_t reason; */
2119 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2122 /* uint8_t table_id; */
2123 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2126 /* uint32_t duration_sec; */
2127 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2130 /* uint32_t duration_nsec; */
2131 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2134 /* uint16_t idle_timeout; */
2135 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2138 /* uint16_t hard_timeout; */
2139 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2142 /* uint64_t packet_count; */
2143 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2146 /* uint64_t byte_count; */
2147 proto_tree_add_item(tree
, hf_openflow_v5_flow_removed_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2150 /* struct ofp_match match; */
2151 dissect_openflow_match_v5(tvb
, pinfo
, tree
, offset
, length
);
2154 #define OFPAT_OUTPUT 0 /* Output to switch port. */
2155 #define OFPAT_COPY_TTL_OUT 11 /* Copy TTL "outwards" */
2156 #define OFPAT_COPY_TTL_IN 12 /* Copy TTL "inwards" */
2157 #define OFPAT_SET_MPLS_TTL 15 /* MPLS TTL */
2158 #define OFPAT_DEC_MPLS_TTL 16 /* Decrement MPLS TTL */
2159 #define OFPAT_PUSH_VLAN 17 /* Push a new VLAN tag */
2160 #define OFPAT_POP_VLAN 18 /* Pop the outer VLAN tag */
2161 #define OFPAT_PUSH_MPLS 19 /* Push a new MPLS tag */
2162 #define OFPAT_POP_MPLS 20 /* Pop the outer MPLS tag */
2163 #define OFPAT_SET_QUEUE 21 /* Set queue id when outputting to a port */
2164 #define OFPAT_GROUP 22 /* Apply group. */
2165 #define OFPAT_SET_NW_TTL 23 /* IP TTL. */
2166 #define OFPAT_DEC_NW_TTL 24 /* Decrement IP TTL. */
2167 #define OFPAT_SET_FIELD 25 /* Set a header field using OXM TLV format. */
2168 #define OFPAT_PUSH_PBB 26 /* Push a new PBB service tag (I-TAG) */
2169 #define OFPAT_POP_PBB 27 /* Pop the outer PBB service tag (I-TAG) */
2170 #define OFPAT_EXPERIMENTER 0xffff
2172 static const value_string openflow_v5_action_type_values
[] = {
2173 { 0, "OFPAT_OUTPUT" },
2174 { 11, "OFPAT_COPY_TTL_OUT" },
2175 { 12, "OFPAT_COPY_TTL_IN" },
2176 { 15, "OFPAT_SET_MPLS_TTL" },
2177 { 16, "OFPAT_DEC_MPLS_TTL" },
2178 { 17, "OFPAT_PUSH_VLAN" },
2179 { 18, "OFPAT_POP_VLAN" },
2180 { 19, "OFPAT_PUSH_MPLS" },
2181 { 20, "OFPAT_POP_MPLS" },
2182 { 21, "OFPAT_SET_QUEUE" },
2183 { 22, "OFPAT_GROUP" },
2184 { 23, "OFPAT_SET_NW_TTL" },
2185 { 24, "OFPAT_DEC_NW_TTL" },
2186 { 25, "OFPAT_SET_FIELD" },
2187 { 26, "OFPAT_PUSH_PBB" },
2188 { 27, "OFPAT_POP_PBB" },
2189 { 0xffff, "OFPAT_EXPERIMENTER" },
2196 dissect_openflow_action_header_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2200 /* uint16_t type; */
2201 act_type
= tvb_get_ntohs(tvb
, offset
);
2202 proto_tree_add_item(tree
, hf_openflow_v5_action_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2205 /* uint16_t length; */
2206 proto_tree_add_item(tree
, hf_openflow_v5_action_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2209 if (act_type
== OFPAT_EXPERIMENTER
) {
2210 /* uint32_t experimenter; */
2211 proto_tree_add_item(tree
, hf_openflow_v5_action_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2220 dissect_openflow_action_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2222 proto_tree
*act_tree
;
2224 uint16_t act_length
;
2227 act_type
= tvb_get_ntohs(tvb
, offset
);
2228 act_length
= tvb_get_ntohs(tvb
, offset
+ 2);
2229 act_end
= offset
+ act_length
;
2231 act_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, act_length
, ett_openflow_v5_action
, NULL
, "Action");
2233 offset
= dissect_openflow_action_header_v5(tvb
, pinfo
, act_tree
, offset
, length
);
2237 /* uint32_t port; */
2238 proto_tree_add_item(act_tree
, hf_openflow_v5_action_output_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2241 /* uint16_t max_len; */
2242 proto_tree_add_item(act_tree
, hf_openflow_v5_action_output_max_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2245 /* uint8_t pad[6]; */
2246 proto_tree_add_item(act_tree
, hf_openflow_v5_action_output_pad
, tvb
, offset
, 6, ENC_NA
);
2251 case OFPAT_COPY_TTL_OUT
:
2252 /* uint8_t pad[4]; */
2253 proto_tree_add_item(act_tree
, hf_openflow_v5_action_copy_ttl_out_pad
, tvb
, offset
, 4, ENC_NA
);
2257 case OFPAT_COPY_TTL_IN
:
2258 /* uint8_t pad[4]; */
2259 proto_tree_add_item(act_tree
, hf_openflow_v5_action_copy_ttl_in_pad
, tvb
, offset
, 4, ENC_NA
);
2263 case OFPAT_SET_MPLS_TTL
:
2264 /* uint8_t mpls_ttl; */
2265 proto_tree_add_item(act_tree
, hf_openflow_v5_action_set_mpls_ttl_ttl
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2268 /* uint8_t pad[3]; */
2269 proto_tree_add_item(act_tree
, hf_openflow_v5_action_set_mpls_ttl_pad
, tvb
, offset
, 3, ENC_NA
);
2273 case OFPAT_DEC_MPLS_TTL
:
2274 /* uint8_t pad[4]; */
2275 proto_tree_add_item(act_tree
, hf_openflow_v5_action_dec_mpls_ttl_pad
, tvb
, offset
, 4, ENC_NA
);
2279 case OFPAT_PUSH_VLAN
:
2280 /* uint16_t ethertype; */
2281 proto_tree_add_item(act_tree
, hf_openflow_v5_action_push_vlan_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2284 /* uint8_t pad[2]; */
2285 proto_tree_add_item(act_tree
, hf_openflow_v5_action_push_vlan_pad
, tvb
, offset
, 2, ENC_NA
);
2289 case OFPAT_POP_VLAN
:
2290 /* uint8_t pad[4]; */
2291 proto_tree_add_item(act_tree
, hf_openflow_v5_action_pop_vlan_pad
, tvb
, offset
, 4, ENC_NA
);
2295 case OFPAT_PUSH_MPLS
:
2296 /* uint16_t ethertype; */
2297 proto_tree_add_item(act_tree
, hf_openflow_v5_action_push_mpls_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2300 /* uint8_t pad[2]; */
2301 proto_tree_add_item(act_tree
, hf_openflow_v5_action_push_mpls_pad
, tvb
, offset
, 2, ENC_NA
);
2305 case OFPAT_POP_MPLS
:
2306 /* uint16_t ethertype; */
2307 proto_tree_add_item(act_tree
, hf_openflow_v5_action_pop_mpls_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2310 /* uint8_t pad[2]; */
2311 proto_tree_add_item(act_tree
, hf_openflow_v5_action_pop_mpls_pad
, tvb
, offset
, 2, ENC_NA
);
2315 case OFPAT_SET_QUEUE
:
2316 /* uint32_t queue_id; */
2317 proto_tree_add_item(act_tree
, hf_openflow_v5_action_set_queue_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2322 /* uint32_t group_id; */
2323 proto_tree_add_item(act_tree
, hf_openflow_v5_action_group_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2327 case OFPAT_SET_NW_TTL
:
2328 /* uint8_t nw_ttl; */
2329 proto_tree_add_item(act_tree
, hf_openflow_v5_action_set_nw_ttl_ttl
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2332 /* uint8_t pad[3]; */
2333 proto_tree_add_item(act_tree
, hf_openflow_v5_action_set_nw_ttl_pad
, tvb
, offset
, 3, ENC_NA
);
2337 case OFPAT_DEC_NW_TTL
:
2338 /* uint8_t pad[4]; */
2339 proto_tree_add_item(act_tree
, hf_openflow_v5_action_dec_nw_ttl_pad
, tvb
, offset
, 4, ENC_NA
);
2343 case OFPAT_SET_FIELD
:
2344 offset
= dissect_openflow_oxm_v5(tvb
, pinfo
, act_tree
, offset
, length
);
2346 /* padded to 64 bits */
2347 if (offset
< act_end
) {
2348 proto_tree_add_item(act_tree
, hf_openflow_v5_action_set_field_pad
, tvb
, offset
, act_end
- offset
, ENC_NA
);
2353 case OFPAT_PUSH_PBB
:
2354 /* uint16_t ethertype; */
2355 proto_tree_add_item(act_tree
, hf_openflow_v5_action_push_pbb_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2358 /* uint8_t pad[2]; */
2359 proto_tree_add_item(act_tree
, hf_openflow_v5_action_push_pbb_pad
, tvb
, offset
, 2, ENC_NA
);
2364 /* uint8_t pad[4]; */
2365 proto_tree_add_item(act_tree
, hf_openflow_v5_action_pop_pbb_pad
, tvb
, offset
, 4, ENC_NA
);
2369 case OFPAT_EXPERIMENTER
:
2370 if (act_length
<= 8) {
2371 expert_add_info(pinfo
, act_tree
, &ei_openflow_v5_length_too_short
);
2375 proto_tree_add_expert_format(act_tree
, pinfo
, &ei_openflow_v5_action_undecoded
,
2376 tvb
, offset
, act_length
- 8, "Experimenter action body.");
2377 offset
+= act_length
- 8;
2381 if (act_length
<= 4) {
2382 expert_add_info(pinfo
, act_tree
, &ei_openflow_v5_length_too_short
);
2386 proto_tree_add_expert_format(act_tree
, pinfo
, &ei_openflow_v5_action_undecoded
,
2387 tvb
, offset
, act_length
- 4, "Unknown action body.");
2388 offset
+= act_length
- 4;
2396 #define OFPPF_10MB_HD 1 << 0
2397 #define OFPPF_10MB_FD 1 << 1
2398 #define OFPPF_100MB_HD 1 << 2
2399 #define OFPPF_100MB_FD 1 << 3
2400 #define OFPPF_1GB_HD 1 << 4
2401 #define OFPPF_1GB_FD 1 << 5
2402 #define OFPPF_10GB_FD 1 << 6
2403 #define OFPPF_40GB_FD 1 << 7
2404 #define OFPPF_100GB_FD 1 << 8
2405 #define OFPPF_1TB_FD 1 << 9
2406 #define OFPPF_OTHER 1 << 10
2408 #define OFPPF_COPPER 1 << 11
2409 #define OFPPF_FIBER 1 << 12
2410 #define OFPPF_AUTONEG 1 << 13
2411 #define OFPPF_PAUSE 1 << 14
2412 #define OFPPF_PAUSE_ASYM 1 << 15
2414 dissect_openflow_port_desc_prop_ethernet_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2417 proto_tree
*curr_tree
, *adv_tree
, *supp_tree
, *peer_tree
;
2419 /* uint8_t pad[4]; */
2420 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_ethernet_pad
, tvb
, offset
, 2, ENC_NA
);
2423 /* uint32_t curr; */
2424 ti
= proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_ethernet_current
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2425 curr_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_desc_prop_ethernet_current
);
2427 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2428 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2429 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2430 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2431 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2432 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2433 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2434 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2435 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2436 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2437 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2438 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2439 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2440 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2441 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2442 proto_tree_add_item(curr_tree
, hf_openflow_v5_port_desc_prop_ethernet_current_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2445 /* uint32_t advertised; */
2446 ti
= proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2447 adv_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_desc_prop_ethernet_advertised
);
2449 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2450 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2451 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2452 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2453 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2454 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2455 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2456 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2457 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2458 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2459 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2460 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2461 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2462 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2463 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2464 proto_tree_add_item(adv_tree
, hf_openflow_v5_port_desc_prop_ethernet_advertised_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2467 /* uint32_t supported; */
2468 ti
= proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_ethernet_supported
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2469 supp_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_desc_prop_ethernet_supported
);
2471 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2472 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2473 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2474 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2475 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2476 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2477 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2478 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2479 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2480 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2481 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2482 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2483 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2484 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2485 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2486 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_ethernet_supported_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2489 /* uint32_t peer; */
2490 ti
= proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_ethernet_peer
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2491 peer_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_desc_prop_ethernet_peer
);
2493 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2494 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2495 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2496 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2497 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2498 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2499 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2500 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2501 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2502 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2503 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2504 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2505 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2506 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2507 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2508 proto_tree_add_item(peer_tree
, hf_openflow_v5_port_desc_prop_ethernet_peer_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2511 /* uint32_t curr_speed; */
2512 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_ethernet_curr_speed
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2515 /* uint32_t max_speed; */
2516 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_ethernet_max_speed
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2523 #define OFPOPF_RX_TUNE 1<<0
2524 #define OFPOPF_TX_TUNE 1<<1
2525 #define OFPOPF_TX_PWR 1<<2
2526 #define OFPOPF_USE_FREQ 1<<3
2528 dissect_openflow_port_desc_prop_optical_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2531 proto_tree
*supp_tree
;
2533 /* uint8_t pad[4]; */
2534 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_pad
, tvb
, offset
, 2, ENC_NA
);
2537 /* uint32_t supported; */
2538 ti
= proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_supported
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2539 supp_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_desc_prop_optical_supported
);
2541 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_optical_supported_rx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2542 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_optical_supported_tx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2543 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_optical_supported_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2544 proto_tree_add_item(supp_tree
, hf_openflow_v5_port_desc_prop_optical_supported_use_freq
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2547 /* uint32_t tx_min_freq_lmda; */
2548 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_tx_min_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2551 /* uint32_t tx_max_freq_lmda; */
2552 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_tx_max_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2555 /* uint32_t tx_grid_freq_lmda; */
2556 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_tx_grid_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2559 /* uint32_t rx_min_freq_lmda; */
2560 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_rx_min_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2563 /* uint32_t rx_max_freq_lmda; */
2564 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_rx_max_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2567 /* uint32_t rx_grid_freq_lmda; */
2568 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_rx_grid_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2571 /* uint16_t tx_pwr_min; */
2572 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_tx_pwr_min
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2575 /* uint16_t tx_pwr_max; */
2576 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_optical_tx_pwr_max
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2584 #define OFPPDPT_ETHERNET 0
2585 #define OFPPDPT_OPTICAL 1
2586 #define OFPPDPT_EXPERIMENTER 0xFFFF
2587 static const value_string openflow_v5_port_desc_prop_type_values
[] = {
2588 { OFPPDPT_ETHERNET
, "OFPPDPT_ETHERNET" },
2589 { OFPPDPT_OPTICAL
, "OFPPDPT_OPTICAL" },
2590 { OFPPDPT_EXPERIMENTER
, "OFPPDPT_EXPERIMENTER" },
2595 dissect_openflow_port_desc_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2597 proto_tree
*prop_tree
;
2600 uint16_t prop_length
;
2602 prop_type
= tvb_get_ntohs(tvb
, offset
);
2603 prop_length
= tvb_get_ntohs(tvb
, offset
);
2605 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_length
, ett_openflow_v5_port_desc_prop
, NULL
, "Port desc. property");
2607 /* uint16_t type; */
2608 proto_tree_add_item(prop_tree
, hf_openflow_v5_port_desc_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2612 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_port_desc_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2615 switch (prop_type
) {
2616 case OFPPDPT_ETHERNET
:
2617 offset
= dissect_openflow_port_desc_prop_ethernet_v5(tvb
, pinfo
, prop_tree
, offset
, length
);
2620 case OFPPDPT_OPTICAL
:
2621 offset
= dissect_openflow_port_desc_prop_optical_v5(tvb
, pinfo
, prop_tree
, offset
, length
);
2624 case OFPPDPT_EXPERIMENTER
:
2625 if (prop_length
<= 12) {
2626 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
2630 /* uint32_t experimenter; */
2631 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2634 /* uint32_t exp_type; */
2635 proto_tree_add_item(tree
, hf_openflow_v5_port_desc_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2638 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_port_desc_prop_undecoded
,
2639 tvb
, offset
, prop_length
- 12, "Experimenter port desc. property.");
2640 offset
+= prop_length
- 12;
2644 if (prop_length
<= 4) {
2645 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
2649 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_port_desc_prop_undecoded
,
2650 tvb
, offset
, prop_length
- 4, "Unknown port desc. property.");
2651 offset
+= prop_length
- 4;
2660 #define OFPPC_PORT_DOWN 1 << 0
2661 #define OFPPC_NO_RECV 1 << 2
2662 #define OFPPC_NO_FWD 1 << 5
2663 #define OFPPC_NO_PACKET_IN 1 << 6
2665 #define OFPPS_LINK_DOWN 1 << 0
2666 #define OFPPS_BLOCKED 1 << 1
2667 #define OFPPS_LIVE 1 << 2
2669 #define OFP_ETH_ALEN 6
2670 #define OFP_MAX_PORT_NAME_LEN 16
2672 dissect_openflow_port_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2675 proto_tree
*port_tree
, *conf_tree
, *state_tree
;
2678 port_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 64, ett_openflow_v5_port
, NULL
, "Port");
2680 /* uint32_t port_no; */
2681 proto_tree_add_item(port_tree
, hf_openflow_v5_port_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2684 /* uint16_t length; */
2685 port_end
= tvb_get_ntohs(tvb
, offset
) + offset
- 4;
2686 proto_tree_add_item(port_tree
, hf_openflow_v5_port_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2689 /* uint8_t pad[2]; */
2690 proto_tree_add_item(port_tree
, hf_openflow_v5_port_pad
, tvb
, offset
, 2, ENC_NA
);
2693 /* uint8_t hw_addr[OFP_ETH_ALEN]; */
2694 proto_tree_add_item(port_tree
, hf_openflow_v5_port_hw_addr
, tvb
, offset
, OFP_ETH_ALEN
, ENC_NA
);
2695 offset
+=OFP_ETH_ALEN
;
2697 /* uint8_t pad2[2]; */
2698 proto_tree_add_item(port_tree
, hf_openflow_v5_port_pad2
, tvb
, offset
, 2, ENC_NA
);
2701 /* char name[OFP_MAX_PORT_NAME_LEN]; Null-terminated */
2702 proto_tree_add_item(port_tree
, hf_openflow_v5_port_name
, tvb
, offset
, OFP_MAX_PORT_NAME_LEN
, ENC_ASCII
);
2703 offset
+=OFP_MAX_PORT_NAME_LEN
;
2705 /* uint32_t config; */
2706 ti
= proto_tree_add_item(port_tree
, hf_openflow_v5_port_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2707 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_config
);
2709 proto_tree_add_item(conf_tree
, hf_openflow_v5_port_config_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2710 proto_tree_add_item(conf_tree
, hf_openflow_v5_port_config_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2711 proto_tree_add_item(conf_tree
, hf_openflow_v5_port_config_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2712 proto_tree_add_item(conf_tree
, hf_openflow_v5_port_config_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2715 /* uint32_t state; */
2716 ti
= proto_tree_add_item(port_tree
, hf_openflow_v5_port_state
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2717 state_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_state
);
2719 proto_tree_add_item(state_tree
, hf_openflow_v5_port_state_link_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2720 proto_tree_add_item(state_tree
, hf_openflow_v5_port_state_blocked
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2721 proto_tree_add_item(state_tree
, hf_openflow_v5_port_state_live
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2724 /* struct ofp_port_desc_prop_header properties[0]; */
2725 while (offset
< port_end
) {
2726 offset
= dissect_openflow_port_desc_prop_v5(tvb
, pinfo
, tree
, offset
, length
);
2735 #define OFPPR_DELETE 1
2736 #define OFPPR_MODIFY 2
2737 static const value_string openflow_v5_port_status_reason_values
[] = {
2738 { OFPPR_ADD
, "OFPPR_ADD" },
2739 { OFPPR_DELETE
, "OFPPR_DELETE" },
2740 { OFPPR_MODIFY
, "OFPPR_MODIFY" },
2745 dissect_openflow_port_status_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2747 /* uint8_t reason; */
2748 proto_tree_add_item(tree
, hf_openflow_v5_port_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2751 /* uint8_t pad[7]; */
2752 proto_tree_add_item(tree
, hf_openflow_v5_port_status_pad
, tvb
, offset
, 7, ENC_NA
);
2755 /* struct ofp_port desc; */
2756 dissect_openflow_port_v5(tvb
, pinfo
, tree
, offset
, length
);
2761 dissect_openflow_packet_out_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2763 proto_tree
*data_tree
;
2768 bool save_in_error_pkt
;
2769 address save_dl_src
, save_dl_dst
, save_net_src
, save_net_dst
, save_src
, save_dst
;
2771 /* uint32_t buffer_id; */
2772 proto_tree_add_item(tree
, hf_openflow_v5_packet_out_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2775 /* uint32_t in_port; */
2776 proto_tree_add_item(tree
, hf_openflow_v5_packet_out_in_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2779 /* uint16_t actions_len; */
2780 acts_len
= tvb_get_ntohs(tvb
, offset
);
2781 proto_tree_add_item(tree
, hf_openflow_v5_packet_out_acts_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2784 /* uint8_t pad[6]; */
2785 proto_tree_add_item(tree
, hf_openflow_v5_packet_out_pad
, tvb
, offset
, 6, ENC_NA
);
2788 /* struct ofp_action_header actions[0]; */
2789 acts_end
= offset
+ acts_len
;
2791 while (offset
< acts_end
) {
2792 offset
= dissect_openflow_action_v5(tvb
, pinfo
, tree
, offset
, length
);
2795 /* uint8_t data[0]; */
2796 if (offset
< length
) {
2797 data_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v5_packet_out_data
, NULL
, "Data");
2799 /* save some state */
2800 save_writable
= col_get_writable(pinfo
->cinfo
, -1);
2801 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
2802 copy_address_shallow(&save_dl_src
, &pinfo
->dl_src
);
2803 copy_address_shallow(&save_dl_dst
, &pinfo
->dl_dst
);
2804 copy_address_shallow(&save_net_src
, &pinfo
->net_src
);
2805 copy_address_shallow(&save_net_dst
, &pinfo
->net_dst
);
2806 copy_address_shallow(&save_src
, &pinfo
->src
);
2807 copy_address_shallow(&save_dst
, &pinfo
->dst
);
2810 col_set_writable(pinfo
->cinfo
, -1, false);
2811 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
- offset
);
2812 call_dissector(eth_withoutfcs_handle
, next_tvb
, pinfo
, data_tree
);
2814 /* restore saved state */
2815 col_set_writable(pinfo
->cinfo
, -1, save_writable
);
2816 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
2817 copy_address_shallow(&pinfo
->dl_src
, &save_dl_src
);
2818 copy_address_shallow(&pinfo
->dl_dst
, &save_dl_dst
);
2819 copy_address_shallow(&pinfo
->net_src
, &save_net_src
);
2820 copy_address_shallow(&pinfo
->net_dst
, &save_net_dst
);
2821 copy_address_shallow(&pinfo
->src
, &save_src
);
2822 copy_address_shallow(&pinfo
->dst
, &save_dst
);
2827 #define OFPIT_GOTO_TABLE 1 /* Setup the next table in the lookup */
2828 #define OFPIT_WRITE_METADATA 2 /* Setup the metadata field for use later in */
2829 #define OFPIT_WRITE_ACTIONS 3 /* Write the action(s) onto the datapath action */
2830 #define OFPIT_APPLY_ACTIONS 4 /* Applies the action(s) immediately */
2831 #define OFPIT_CLEAR_ACTIONS 5 /* Clears all actions from the datapath */
2832 #define OFPIT_METER 6 /* Apply meter (rate limiter) */
2833 #define OFPIT_EXPERIMENTER 0xFFFF /* Experimenter instruction */
2834 static const value_string openflow_v5_instruction_type_values
[] = {
2835 { 0x0001, "OFPIT_GOTO_TABLE" },
2836 { 0x0002, "OFPIT_WRITE_METADATA" },
2837 { 0x0003, "OFPIT_WRITE_ACTIONS" },
2838 { 0x0004, "OFPIT_APPLY_ACTIONS" },
2839 { 0x0005, "OFPIT_CLEAR_ACTIONS" },
2840 { 0x0006, "OFPIT_METER" },
2841 { 0xffff, "OFPIT_EXPERIMENTER = 0xFFFF" },
2848 dissect_openflow_instruction_header_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2852 /* uint16_t type; */
2853 inst_type
= tvb_get_ntohs(tvb
, offset
);
2854 proto_tree_add_item(tree
, hf_openflow_v5_instruction_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2857 /* uint16_t length; */
2858 proto_tree_add_item(tree
, hf_openflow_v5_instruction_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2861 if (inst_type
== OFPIT_EXPERIMENTER
) {
2862 /* uint32_t experimenter; */
2863 proto_tree_add_item(tree
, hf_openflow_v5_instruction_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2872 dissect_openflow_instruction_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2874 proto_tree
*inst_tree
;
2876 uint16_t inst_length
;
2879 inst_type
= tvb_get_ntohs(tvb
, offset
);
2880 inst_length
= tvb_get_ntohs(tvb
, offset
+ 2);
2882 inst_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, inst_length
, ett_openflow_v5_instruction
, NULL
, "Instruction");
2884 offset
= dissect_openflow_instruction_header_v5(tvb
, pinfo
, inst_tree
, offset
, length
);
2886 if (inst_length
< 8) {
2890 switch (inst_type
) {
2891 case OFPIT_GOTO_TABLE
:
2892 /* uint8_t table_id; */
2893 proto_tree_add_item(inst_tree
, hf_openflow_v5_instruction_goto_table_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2896 /* uint8_t pad[3]; */
2897 proto_tree_add_item(inst_tree
, hf_openflow_v5_instruction_goto_table_pad
, tvb
, offset
, 3, ENC_NA
);
2901 case OFPIT_WRITE_METADATA
:
2902 /* uint8_t pad[4]; */
2903 proto_tree_add_item(inst_tree
, hf_openflow_v5_instruction_write_metadata_pad
, tvb
, offset
, 4, ENC_NA
);
2906 /* uint64_t metadata; */
2907 proto_tree_add_item(inst_tree
, hf_openflow_v5_instruction_write_metadata_value
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2910 /* uint64_t metadata_mask; */
2911 proto_tree_add_item(inst_tree
, hf_openflow_v5_instruction_write_metadata_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2915 case OFPIT_WRITE_ACTIONS
:
2916 case OFPIT_APPLY_ACTIONS
:
2917 case OFPIT_CLEAR_ACTIONS
:
2918 proto_tree_add_item(inst_tree
, hf_openflow_v5_instruction_actions_pad
, tvb
, offset
, 4, ENC_NA
);
2921 acts_end
= offset
+ inst_length
- 8;
2922 while (offset
< acts_end
) {
2923 offset
= dissect_openflow_action_v5(tvb
, pinfo
, inst_tree
, offset
, length
);
2928 /* uint32_t meter_id; */
2929 proto_tree_add_item(inst_tree
, hf_openflow_v5_instruction_meter_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2933 case OFPIT_EXPERIMENTER
:
2934 if (inst_length
<= 8) {
2935 expert_add_info(pinfo
, inst_tree
, &ei_openflow_v5_length_too_short
);
2939 proto_tree_add_expert_format(inst_tree
, pinfo
, &ei_openflow_v5_instruction_undecoded
,
2940 tvb
, offset
, inst_length
- 8, "Experimenter instruction body.");
2941 offset
+= inst_length
- 8;
2945 if (inst_length
<= 4) {
2946 expert_add_info(pinfo
, inst_tree
, &ei_openflow_v5_length_too_short
);
2950 proto_tree_add_expert_format(inst_tree
, pinfo
, &ei_openflow_v5_instruction_undecoded
,
2951 tvb
, offset
, inst_length
- 4, "Unknown instruction body.");
2952 offset
+= inst_length
- 4;
2960 static const value_string openflow_v5_flowmod_command_values
[] = {
2962 { 1, "OFPFC_MODIFY" },
2963 { 2, "OFPFC_MODIFY_STRICT" },
2964 { 3, "OFPFC_DELETE" },
2965 { 4, "OFPFC_DELETE_STRICT" },
2969 #define OFPFF_SEND_FLOW_REM 1 << 0 /* Send flow removed message when flow expires or is deleted. */
2970 #define OFPFF_CHECK_OVERLAP 1 << 1 /* Check for overlapping entries first. */
2971 #define OFPFF_RESET_COUNTS 1 << 2 /* Reset flow packet and byte counts. */
2972 #define OFPFF_NO_PKT_COUNTS 1 << 3 /* Don't keep track of packet count. */
2973 #define OFPFF_NO_BYT_COUNTS 1 << 4 /* Don't keep track of byte count. */
2976 dissect_openflow_flowmod_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2979 proto_tree
*flags_tree
;
2981 /* uint64_t cookie; */
2982 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2985 /* uint64_t cookie_mask; */
2986 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2989 /* uint8_t table_id; */
2990 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2993 /* uint8_t command; */
2994 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_command
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2997 /* uint16_t idle_timeout; */
2998 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3001 /* uint16_t hard_timeout; */
3002 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3005 /* uint16_t priority; */
3006 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3009 /* uint32_t buffer_id; */
3010 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3013 /* uint32_t out_port; */
3014 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3017 /* uint32_t out_group; */
3018 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3021 /* uint16_t flags; */
3022 ti
= proto_tree_add_item(tree
, hf_openflow_v5_flowmod_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3023 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_flowmod_flags
);
3025 proto_tree_add_item(flags_tree
, hf_openflow_v5_flowmod_flags_send_flow_rem
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3026 proto_tree_add_item(flags_tree
, hf_openflow_v5_flowmod_flags_check_overlap
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3027 proto_tree_add_item(flags_tree
, hf_openflow_v5_flowmod_flags_reset_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3028 proto_tree_add_item(flags_tree
, hf_openflow_v5_flowmod_flags_no_packet_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3029 proto_tree_add_item(flags_tree
, hf_openflow_v5_flowmod_flags_no_byte_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3032 /* uint16_t importance; */
3033 proto_tree_add_item(tree
, hf_openflow_v5_flowmod_importance
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3036 /* struct ofp_match match; */
3037 offset
= dissect_openflow_match_v5(tvb
, pinfo
, tree
, offset
, length
);
3039 /* struct ofp_instruction instructions[0]; */
3040 while (offset
< length
) {
3041 offset
= dissect_openflow_instruction_v5(tvb
, pinfo
, tree
, offset
, length
);
3046 dissect_openflow_bucket_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3049 proto_tree
*bucket_tree
;
3050 uint16_t bucket_length
;
3053 bucket_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_bucket
, &ti
, "Bucket");
3056 bucket_length
= tvb_get_ntohs(tvb
, offset
);
3057 proto_item_set_len(ti
, bucket_length
);
3058 proto_tree_add_item(bucket_tree
, hf_openflow_v5_bucket_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3061 if (bucket_length
< 16) {
3065 /* uint16_t weight; */
3066 proto_tree_add_item(bucket_tree
, hf_openflow_v5_bucket_weight
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3069 /* uint32_t watch_port; */
3070 proto_tree_add_item(bucket_tree
, hf_openflow_v5_bucket_watch_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3073 /* uint32_t watch_group; */
3074 proto_tree_add_item(bucket_tree
, hf_openflow_v5_bucket_watch_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3077 /* uint8_t pad[4]; */
3078 proto_tree_add_item(bucket_tree
, hf_openflow_v5_bucket_pad
, tvb
, offset
, 4, ENC_NA
);
3081 /*struct ofp_action_header actions[0]; */
3082 acts_end
= offset
+ bucket_length
- 16;
3083 while (offset
< acts_end
) {
3084 offset
= dissect_openflow_action_v5(tvb
, pinfo
, bucket_tree
, offset
, length
);
3091 static const value_string openflow_v5_groupmod_command_values
[] = {
3093 { 1, "OFPGC_MODIFY" },
3094 { 2, "OFPGC_DELETE" },
3099 #define OFPGT_SELECT 1
3100 #define OFPGT_INDIRECT 2
3102 static const value_string openflow_v5_group_type_values
[] = {
3103 { OFPGT_ALL
, "OFPGT_ALL" },
3104 { OFPGT_SELECT
, "OFPGT_SELECT" },
3105 { OFPGT_INDIRECT
, "OFPGT_INDIRECT" },
3106 { OFPGT_FF
, "OFPGT_FF" },
3111 dissect_openflow_groupmod_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3113 /* uint16_t command; */
3114 proto_tree_add_item(tree
, hf_openflow_v5_groupmod_command
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3118 proto_tree_add_item(tree
, hf_openflow_v5_groupmod_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3122 proto_tree_add_item(tree
, hf_openflow_v5_groupmod_pad
, tvb
, offset
, 1, ENC_NA
);
3125 /* uint32_t group_id; */
3126 proto_tree_add_item(tree
, hf_openflow_v5_groupmod_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3129 /* struct ofp_bucket buckets[0]; */
3130 while (offset
< length
) {
3131 offset
= dissect_openflow_bucket_v5(tvb
, pinfo
, tree
, offset
, length
);
3138 dissect_openflow_portmod_prop_ethernet_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3141 proto_tree
*adv_tree
;
3143 /* uint32_t advertise; */
3144 ti
= proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_ethernet_advertise
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3145 adv_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_portmod_prop_ethernet_advertise
);
3147 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3148 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3149 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3150 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3151 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3152 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3153 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3154 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3155 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3156 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3157 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3158 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3159 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3160 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3161 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3162 proto_tree_add_item(adv_tree
, hf_openflow_v5_portmod_prop_ethernet_advertise_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3169 dissect_openflow_portmod_prop_optical_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3172 proto_tree
*conf_tree
;
3174 /* uint32_t configure; */
3175 ti
= proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_optical_configure
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3176 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_portmod_prop_optical_configure
);
3178 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_prop_optical_configure_rx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3179 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_prop_optical_configure_tx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3180 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_prop_optical_configure_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3181 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_prop_optical_configure_use_freq
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3184 /* uint32_t freq_lmda; */
3185 proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_optical_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3188 /* int32_t fl_offset; */
3189 proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_optical_fl_offset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3192 /* uint32_t grid_span; */
3193 proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_optical_grid_span
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3196 /* uint32_t tx_pwr; */
3197 proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_optical_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3205 #define OFPPMPT_ETHERNET 0
3206 #define OFPPMPT_OPTICAL 1
3207 #define OFPPMPT_EXPERIMENTER 0xFFFF
3208 static const value_string openflow_v5_portmod_prop_type_values
[] = {
3209 { OFPPMPT_ETHERNET
, "OFPPMPT_ETHERNET" },
3210 { OFPPMPT_OPTICAL
, "OFPPMPT_OPTICAL" },
3211 { OFPPMPT_EXPERIMENTER
, "OFPPMPT_EXPERIMENTER" },
3216 dissect_openflow_portmod_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3218 proto_tree
*prop_tree
;
3220 uint16_t prop_length
;
3222 prop_type
= tvb_get_ntohs(tvb
, offset
);
3223 prop_length
= tvb_get_ntohs(tvb
, offset
+ 2);
3225 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_length
, ett_openflow_v5_portmod_prop
, NULL
, "Portmod property");
3227 /* uint16_t type; */
3228 proto_tree_add_item(prop_tree
, hf_openflow_v5_portmod_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3232 proto_tree_add_item(prop_tree
, hf_openflow_v5_portmod_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3235 switch (prop_type
) {
3236 case OFPPMPT_ETHERNET
:
3237 offset
= dissect_openflow_portmod_prop_ethernet_v5(tvb
, pinfo
, prop_tree
, offset
, length
);
3240 case OFPPMPT_OPTICAL
:
3241 offset
= dissect_openflow_portmod_prop_optical_v5(tvb
, pinfo
, prop_tree
, offset
, length
);
3244 case OFPPMPT_EXPERIMENTER
:
3245 if (prop_length
<= 12) {
3246 expert_add_info(pinfo
, prop_tree
, &ei_openflow_v5_length_too_short
);
3250 /* uint32_t experimenter; */
3251 proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3254 /* uint32_t exp_type; */
3255 proto_tree_add_item(tree
, hf_openflow_v5_portmod_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3258 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_portmod_prop_undecoded
,
3259 tvb
, offset
, prop_length
- 12, "Experimenter port desc. property.");
3260 offset
+= prop_length
- 12;
3264 if (prop_length
<= 4) {
3265 expert_add_info(pinfo
, prop_tree
, &ei_openflow_v5_length_too_short
);
3269 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_portmod_prop_undecoded
,
3270 tvb
, offset
, prop_length
- 4, "Unknown port desc. property.");
3271 offset
+= prop_length
- 4;
3281 dissect_openflow_portmod_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3284 proto_tree
*conf_tree
, *mask_tree
;
3286 /* uint32_t port_no; */
3287 proto_tree_add_item(tree
, hf_openflow_v5_portmod_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3290 /* uint8_t pad[4]; */
3291 proto_tree_add_item(tree
, hf_openflow_v5_portmod_pad
, tvb
, offset
, 4, ENC_NA
);
3294 /* uint8_t hw_addr[OFP_ETH_ALEN]; */
3295 proto_tree_add_item(tree
, hf_openflow_v5_portmod_hw_addr
, tvb
, offset
, OFP_ETH_ALEN
, ENC_NA
);
3296 offset
+=OFP_ETH_ALEN
;
3298 /* uint8_t pad2[2]; */
3299 proto_tree_add_item(tree
, hf_openflow_v5_portmod_pad2
, tvb
, offset
, 2, ENC_NA
);
3302 /* uint32_t config; */
3303 ti
= proto_tree_add_item(tree
, hf_openflow_v5_portmod_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3304 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_portmod_config
);
3306 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_config_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3307 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_config_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3308 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_config_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3309 proto_tree_add_item(conf_tree
, hf_openflow_v5_portmod_config_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3312 /* uint32_t mask; */
3313 ti
= proto_tree_add_item(tree
, hf_openflow_v5_portmod_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3314 mask_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_portmod_mask
);
3316 proto_tree_add_item(mask_tree
, hf_openflow_v5_portmod_mask_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3317 proto_tree_add_item(mask_tree
, hf_openflow_v5_portmod_mask_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3318 proto_tree_add_item(mask_tree
, hf_openflow_v5_portmod_mask_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3319 proto_tree_add_item(mask_tree
, hf_openflow_v5_portmod_mask_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3322 /* struct ofp_port_mod_prop_header properties[0]; */
3323 while (offset
< length
) {
3324 offset
= dissect_openflow_portmod_prop_v5(tvb
, pinfo
, tree
, offset
, length
);
3329 #define OFPTMPT_EVICTION 0x2
3330 #define OFPTMPT_VACANCY 0x3
3331 #define OFPTMPT_EXPERIMENTER 0xFFFF
3332 static const value_string openflow_v5_tablemod_prop_type_values
[] = {
3333 { OFPTMPT_EVICTION
, "OFPTMPT_EVICTION" },
3334 { OFPTMPT_VACANCY
, "OFPTMPT_VACANCY" },
3335 { OFPTMPT_EXPERIMENTER
, "OFPTMPT_EXPERIMENTER" },
3339 #define OFPTMPEF_OTHER 1<<0
3340 #define OFPTMPEF_IMPORTANCE 1<<1
3341 #define OFPTMPEF_LIFETIME 1<<2
3343 dissect_openflow_tablemod_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3346 proto_tree
*prop_tree
, *flags_tree
;
3349 uint16_t prop_length
;
3351 prop_type
= tvb_get_ntohs(tvb
, offset
);
3352 prop_length
= tvb_get_ntohs(tvb
, offset
+ 2);
3354 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_length
, ett_openflow_v5_tablemod_prop
, NULL
, "Tablemod property");
3356 /* uint16_t type; */
3357 proto_tree_add_item(prop_tree
, hf_openflow_v5_tablemod_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3361 proto_tree_add_item(prop_tree
, hf_openflow_v5_tablemod_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3364 switch (prop_type
) {
3365 case OFPTMPT_EVICTION
:
3366 /* uint32_t flags; */
3367 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_tablemod_prop_eviction_flags
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3368 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_tablemod_prop_eviction_flags
);
3370 proto_tree_add_item(flags_tree
, hf_openflow_v5_tablemod_prop_eviction_flags_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3371 proto_tree_add_item(flags_tree
, hf_openflow_v5_tablemod_prop_eviction_flags_importance
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3372 proto_tree_add_item(flags_tree
, hf_openflow_v5_tablemod_prop_eviction_flags_lifetime
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3376 case OFPTMPT_VACANCY
:
3377 /* uint8_t vacancy_down; */
3378 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_prop_vacancy_vacancy_down
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3381 /* uint8_t vacancy_up; */
3382 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_prop_vacancy_vacancy_up
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3385 /* uint8_t vacancy; */
3386 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_prop_vacancy_vacancy
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3389 /* uint8_t pad[1]; */
3390 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_prop_vacancy_pad
, tvb
, offset
, 1, ENC_NA
);
3394 case OFPTMPT_EXPERIMENTER
:
3395 if (prop_length
<= 12) {
3396 expert_add_info(pinfo
, prop_tree
, &ei_openflow_v5_length_too_short
);
3400 /* uint32_t experimenter; */
3401 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3404 /* uint32_t exp_type; */
3405 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3408 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_tablemod_prop_undecoded
,
3409 tvb
, offset
, prop_length
- 12, "Experimenter table mod. property.");
3410 offset
+= prop_length
- 12;
3414 if (prop_length
<= 4) {
3415 expert_add_info(pinfo
, prop_tree
, &ei_openflow_v5_length_too_short
);
3419 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_tablemod_prop_undecoded
,
3420 tvb
, offset
, prop_length
- 4, "Unknown table mod. property.");
3421 offset
+= prop_length
- 4;
3429 #define OFPTC_EVICTION 1<<2
3430 #define OFPTC_VACANCY_EVENTS 1<<3
3432 dissect_openflow_tablemod_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3435 proto_tree
*conf_tree
;
3438 /* uint8_t table_id; */
3439 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3442 /* uint8_t pad[3]; */
3443 proto_tree_add_item(tree
, hf_openflow_v5_tablemod_pad
, tvb
, offset
, 3, ENC_NA
);
3446 /* uint32_t config; */
3447 ti
= proto_tree_add_item(tree
, hf_openflow_v5_tablemod_config
, tvb
, offset
, 4, ENC_NA
);
3448 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_tablemod_config
);
3450 proto_tree_add_item(conf_tree
, hf_openflow_v5_tablemod_config_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3451 proto_tree_add_item(conf_tree
, hf_openflow_v5_tablemod_config_vacancy_events
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3454 /* struct ofp_table_mod_prop_header properties[0]; */
3455 while (offset
< length
) {
3456 save_offset
= offset
;
3457 offset
= dissect_openflow_tablemod_prop_v5(tvb
, pinfo
, tree
, offset
, length
);
3458 if (offset
<= save_offset
) {
3459 /* We don't need to go backwards or introduce an infinite loop */
3467 dissect_openflow_flow_stats_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3469 /* uint8_t table_id; */
3470 proto_tree_add_item(tree
, hf_openflow_v5_flow_stats_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3473 /* uint8_t pad[3]; */
3474 proto_tree_add_item(tree
, hf_openflow_v5_flow_stats_request_pad
, tvb
, offset
, 3, ENC_NA
);
3477 /* uint32_t out_port; */
3478 proto_tree_add_item(tree
, hf_openflow_v5_flow_stats_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3481 /* uint32_t out_group; */
3482 proto_tree_add_item(tree
, hf_openflow_v5_flow_stats_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3485 /* uint8_t pad2[4]; */
3486 proto_tree_add_item(tree
, hf_openflow_v5_flow_stats_request_pad2
, tvb
, offset
, 4, ENC_NA
);
3489 /* uint64_t cookie; */
3490 proto_tree_add_item(tree
, hf_openflow_v5_flow_stats_request_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3493 /* uint64_t cookie_mask; */
3494 proto_tree_add_item(tree
, hf_openflow_v5_flow_stats_request_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3497 /* struct ofp_match match; */
3498 dissect_openflow_match_v5(tvb
, pinfo
, tree
, offset
, length
);
3502 dissect_openflow_aggregate_stats_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3504 /* uint8_t table_id; */
3505 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3508 /* uint8_t pad[3]; */
3509 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_request_pad
, tvb
, offset
, 3, ENC_NA
);
3512 /* uint32_t out_port; */
3513 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3516 /* uint32_t out_group; */
3517 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3520 /* uint8_t pad2[4]; */
3521 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_request_pad2
, tvb
, offset
, 4, ENC_NA
);
3524 /* uint64_t cookie; */
3525 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_request_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3528 /* uint64_t cookie_mask; */
3529 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_request_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3532 /* struct ofp_match match; */
3533 dissect_openflow_match_v5(tvb
, pinfo
, tree
, offset
, length
);
3537 #define OFPTFPT_INSTRUCTIONS 0
3538 #define OFPTFPT_INSTRUCTIONS_MISS 1
3539 #define OFPTFPT_NEXT_TABLES 2
3540 #define OFPTFPT_NEXT_TABLES_MISS 3
3541 #define OFPTFPT_WRITE_ACTIONS 4
3542 #define OFPTFPT_WRITE_ACTIONS_MISS 5
3543 #define OFPTFPT_APPLY_ACTIONS 6
3544 #define OFPTFPT_APPLY_ACTIONS_MISS 7
3545 #define OFPTFPT_MATCH 8
3546 #define OFPTFPT_WILDCARDS 10
3547 #define OFPTFPT_WRITE_SETFIELD 12
3548 #define OFPTFPT_WRITE_SETFIELD_MISS 13
3549 #define OFPTFPT_APPLY_SETFIELD 14
3550 #define OFPTFPT_APPLY_SETFIELD_MISS 15
3551 #define OFPTFPT_TABLE_SYNC_FROM 16
3552 #define OFPTFPT_EXPERIMENTER 0xFFFE
3553 #define OFPTFPT_EXPERIMENTER_MISS 0xFFFF
3554 static const value_string openflow_v5_table_feature_prop_type_values
[] = {
3555 { OFPTFPT_INSTRUCTIONS
, "OFPTFPT_INSTRUCTIONS" },
3556 { OFPTFPT_INSTRUCTIONS_MISS
, "OFPTFPT_INSTRUCTIONS_MISS" },
3557 { OFPTFPT_NEXT_TABLES
, "OFPTFPT_NEXT_TABLES" },
3558 { OFPTFPT_NEXT_TABLES_MISS
, "OFPTFPT_NEXT_TABLES_MISS" },
3559 { OFPTFPT_WRITE_ACTIONS
, "OFPTFPT_WRITE_ACTIONS" },
3560 { OFPTFPT_WRITE_ACTIONS_MISS
, "OFPTFPT_WRITE_ACTIONS_MISS" },
3561 { OFPTFPT_APPLY_ACTIONS
, "OFPTFPT_APPLY_ACTIONS" },
3562 { OFPTFPT_APPLY_ACTIONS_MISS
, "OFPTFPT_APPLY_ACTIONS_MISS" },
3563 { OFPTFPT_MATCH
, "OFPTFPT_MATCH" },
3564 { OFPTFPT_WILDCARDS
, "OFPTFPT_WILDCARDS" },
3565 { OFPTFPT_WRITE_SETFIELD
, "OFPTFPT_WRITE_SETFIELD" },
3566 { OFPTFPT_WRITE_SETFIELD_MISS
, "OFPTFPT_WRITE_SETFIELD_MISS" },
3567 { OFPTFPT_APPLY_SETFIELD
, "OFPTFPT_APPLY_SETFIELD" },
3568 { OFPTFPT_APPLY_SETFIELD_MISS
, "OFPTFPT_APPLY_SETFIELD_MISS" },
3569 { OFPTFPT_EXPERIMENTER
, "OFPTFPT_EXPERIMENTER" },
3570 { OFPTFPT_EXPERIMENTER_MISS
, "OFPTFPT_EXPERIMENTER_MISS" },
3571 { OFPTFPT_TABLE_SYNC_FROM
, "OFPTFPT_TABLE_SYNC_FROM" },
3577 dissect_openflow_table_feature_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3580 proto_tree
*prop_tree
, *elem_tree
;
3582 uint16_t prop_length
;
3583 uint16_t elem_begin
;
3585 uint16_t pad_length
;
3587 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_table_feature_prop
, &ti
, "Table feature property");
3589 /* uint16_t type; */
3590 prop_type
= tvb_get_ntohs(tvb
, offset
);
3591 proto_tree_add_item(prop_tree
, hf_openflow_v5_table_feature_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3594 /* uint16_t length; */
3595 prop_length
= tvb_get_ntohs(tvb
, offset
);
3596 proto_item_set_len(ti
, prop_length
);
3597 proto_tree_add_item(prop_tree
, hf_openflow_v5_table_feature_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3600 if (prop_length
< 4) {
3604 body_end
= offset
+ prop_length
- 4;
3607 switch (prop_type
) {
3608 case OFPTFPT_INSTRUCTIONS
:
3609 case OFPTFPT_INSTRUCTIONS_MISS
:
3610 while (offset
< body_end
) {
3611 elem_begin
= offset
;
3612 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v5_table_feature_prop_instruction_id
, &ti
, "Instruction ID");
3614 offset
= dissect_openflow_instruction_header_v5(tvb
, pinfo
, elem_tree
, offset
, length
);
3615 proto_item_set_len(ti
, offset
- elem_begin
);
3619 case OFPTFPT_NEXT_TABLES
:
3620 case OFPTFPT_NEXT_TABLES_MISS
:
3621 while (offset
< body_end
) {
3622 proto_tree_add_item(prop_tree
, hf_openflow_v5_table_feature_prop_next_tables_next_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3627 case OFPTFPT_WRITE_ACTIONS
:
3628 case OFPTFPT_WRITE_ACTIONS_MISS
:
3629 case OFPTFPT_APPLY_ACTIONS
:
3630 case OFPTFPT_APPLY_ACTIONS_MISS
:
3631 while (offset
< body_end
) {
3632 elem_begin
= offset
;
3633 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v5_table_feature_prop_action_id
, &ti
, "Action ID");
3635 offset
= dissect_openflow_action_header_v5(tvb
, pinfo
, elem_tree
, offset
, length
);
3636 proto_item_set_len(ti
, offset
- elem_begin
);
3641 case OFPTFPT_WILDCARDS
:
3642 case OFPTFPT_WRITE_SETFIELD
:
3643 case OFPTFPT_WRITE_SETFIELD_MISS
:
3644 case OFPTFPT_APPLY_SETFIELD
:
3645 case OFPTFPT_APPLY_SETFIELD_MISS
:
3646 while (offset
< body_end
) {
3647 elem_begin
= offset
;
3648 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v5_table_feature_prop_oxm_id
, &ti
, "OXM ID");
3650 offset
= dissect_openflow_oxm_header_v5(tvb
, pinfo
, elem_tree
, offset
, length
);
3651 proto_item_set_len(ti
, offset
- elem_begin
);
3655 case OFPTFPT_TABLE_SYNC_FROM
:
3656 while (offset
< body_end
) {
3657 proto_tree_add_item(prop_tree
, hf_openflow_v5_table_feature_prop_table_sync_from_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3662 case OFPTFPT_EXPERIMENTER
:
3663 case OFPTFPT_EXPERIMENTER_MISS
:
3664 /* uint32_t experimenter; */
3665 proto_tree_add_item(prop_tree
, hf_openflow_v5_table_feature_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3668 /* uint32_t exp_type; */
3669 proto_tree_add_item(prop_tree
, hf_openflow_v5_table_feature_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3672 /* uint32_t experimenter_data[0]; */
3673 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v5_table_feature_prop_undecoded
,
3674 tvb
, offset
, body_end
- offset
, "Experimenter table property body.");
3679 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v5_table_feature_prop_undecoded
,
3680 tvb
, offset
, body_end
- offset
, "Unknown table property body.");
3685 pad_length
= (prop_length
+ 7)/8*8 - prop_length
;
3686 if (pad_length
> 0) {
3687 proto_tree_add_item(prop_tree
, hf_openflow_v5_table_feature_prop_pad
, tvb
, offset
, pad_length
, ENC_NA
);
3695 #define OFP_MAX_TABLE_NAME_LEN 32
3697 dissect_openflow_table_features_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3700 proto_tree
*feat_tree
, *caps_tree
;
3701 uint16_t feat_length
;
3704 feat_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_table_features
, &ti
, "Table features");
3706 /* uint16_t length; */
3707 feat_length
= tvb_get_ntohs(tvb
, offset
);
3708 feat_end
= offset
+ feat_length
;
3709 proto_item_set_len(ti
, feat_length
);
3710 proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3713 /* uint8_t table_id; */
3714 proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3717 /* uint8_t pad[5]; */
3718 proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_pad
, tvb
, offset
, 5, ENC_NA
);
3721 /* char name[OFP_MAX_TABLE_NAME_LEN]; */
3722 proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_name
, tvb
, offset
, OFP_MAX_TABLE_NAME_LEN
, ENC_ASCII
);
3723 offset
+=OFP_MAX_TABLE_NAME_LEN
;
3725 /* uint64_t metadata_match; */
3726 proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_metadata_match
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3729 /* uint64_t metadata_write; */
3730 proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_metadata_write
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3733 /* uint32_t capabilities; */
3734 ti
= proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3735 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_table_features_capabilities
);
3737 proto_tree_add_item(caps_tree
, hf_openflow_v5_table_features_capabilities_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3738 proto_tree_add_item(caps_tree
, hf_openflow_v5_table_features_capabilities_vacancy_events
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3741 /* uint32_t max_entries; */
3742 proto_tree_add_item(feat_tree
, hf_openflow_v5_table_features_max_entries
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3745 /* struct ofp_table_feature_prop_header properties[0]; */
3746 while (offset
< feat_end
) {
3747 offset
= dissect_openflow_table_feature_prop_v5(tvb
, pinfo
, feat_tree
, offset
, length
);
3755 dissect_openflow_port_stats_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3757 /* uint32_t port_no; */
3758 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3761 /* uint8_t pad[4]; */
3762 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
3766 #define OFPQ_ALL 0xffffffff
3767 static const value_string openflow_v5_queue_reserved_values
[] = {
3768 { OFPQ_ALL
, "OFPQ_ALL" },
3773 dissect_openflow_queue_stats_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3775 /* uint32_t port_no; */
3776 proto_tree_add_item(tree
, hf_openflow_v5_queue_stats_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3779 /* uint32_t queue_id; */
3780 proto_tree_add_item(tree
, hf_openflow_v5_queue_stats_request_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3786 dissect_openflow_group_stats_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3788 /* uint32_t group_id; */
3789 proto_tree_add_item(tree
, hf_openflow_v5_group_stats_request_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3792 /* uint8_t pad[4]; */
3793 proto_tree_add_item(tree
, hf_openflow_v5_group_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
3799 dissect_openflow_meter_stats_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3801 /* uint32_t meter_id; */
3802 proto_tree_add_item(tree
, hf_openflow_v5_meter_stats_request_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3805 /* uint8_t pad[4]; */
3806 proto_tree_add_item(tree
, hf_openflow_v5_meter_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
3812 dissect_openflow_meter_config_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3814 /* uint32_t meter_id; */
3815 proto_tree_add_item(tree
, hf_openflow_v5_meter_config_request_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3818 /* uint8_t pad[4]; */
3819 proto_tree_add_item(tree
, hf_openflow_v5_meter_config_request_pad
, tvb
, offset
, 4, ENC_NA
);
3826 dissect_openflow_queue_desc_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3828 /* uint32_t port_no; */
3829 proto_tree_add_item(tree
, hf_openflow_v5_queue_desc_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3832 /* uint32_t queue_id; */
3833 proto_tree_add_item(tree
, hf_openflow_v5_queue_desc_request_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3838 #define OFPFMF_INITIAL 1<<0
3839 #define OFPFMF_ADD 1<<1
3840 #define OFPFMF_REMOVED 1<<2
3841 #define OFPFMF_MODIFY 1<<3
3842 #define OFPFMF_INSTRUCTIONS 1<<4
3843 #define OFPFMF_NO_ABBREV 1<<5
3844 #define OFPFMF_ONLY_OWN 1<<6
3846 #define OFPFMC_ADD 0
3847 #define OFPFMC_MODIFY 1
3848 #define OFPFMC_DELETE 2
3849 static const value_string openflow_v5_flow_monitor_request_command_values
[] = {
3850 { OFPFMC_ADD
, "OFPFMC_ADD" },
3851 { OFPFMC_MODIFY
, "OFPFMC_MODIFY" },
3852 { OFPFMC_DELETE
, "OFPFMC_DELETE" },
3857 dissect_openflow_flow_monitor_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3860 proto_tree
*flags_tree
;
3862 /* uint32_t monitor_id; */
3863 proto_tree_add_item(tree
, hf_openflow_v5_flow_monitor_request_monitor_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3866 /* uint32_t out_port; */
3867 proto_tree_add_item(tree
, hf_openflow_v5_flow_monitor_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3871 /* uint32_t out_group; */
3872 proto_tree_add_item(tree
, hf_openflow_v5_flow_monitor_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3875 /* uint16_t flags; */
3876 ti
= proto_tree_add_item(tree
, hf_openflow_v5_flow_monitor_request_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3877 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_flow_monitor_request_flags
);
3879 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_monitor_request_flags_initial
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3880 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_monitor_request_flags_add
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3881 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_monitor_request_flags_removed
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3882 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_monitor_request_flags_modify
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3883 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_monitor_request_flags_instructions
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3884 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_monitor_request_flags_no_abbrev
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3885 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_monitor_request_flags_only_own
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3888 /* uint8_t table_id; */
3889 proto_tree_add_item(tree
, hf_openflow_v5_flow_monitor_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3892 /* uint8_t command; */
3893 proto_tree_add_item(tree
, hf_openflow_v5_flow_monitor_request_command
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3896 /* struct ofp_match match; */
3897 dissect_openflow_match_v5(tvb
, pinfo
, tree
, offset
, length
);
3900 #define OFPMP_DESC 0
3901 #define OFPMP_FLOW 1
3902 #define OFPMP_AGGREGATE 2
3903 #define OFPMP_TABLE 3
3904 #define OFPMP_PORT_STATS 4
3905 #define OFPMP_QUEUE_STATS 5
3906 #define OFPMP_GROUP 6
3907 #define OFPMP_GROUP_DESC 7
3908 #define OFPMP_GROUP_FEATURES 8
3909 #define OFPMP_METER 9
3910 #define OFPMP_METER_CONFIG 10
3911 #define OFPMP_METER_FEATURES 11
3912 #define OFPMP_TABLE_FEATURES 12
3913 #define OFPMP_PORT_DESC 13
3914 #define OFPMP_TABLE_DESC 14
3915 #define OFPMP_QUEUE_DESC 15
3916 #define OFPMP_FLOW_MONITOR 16
3917 #define OFPMP_EXPERIMENTER 0xffff
3918 static const value_string openflow_v5_multipart_type_values
[] = {
3919 { OFPMP_DESC
, "OFPMP_DESC" },
3920 { OFPMP_FLOW
, "OFPMP_FLOW" },
3921 { OFPMP_AGGREGATE
, "OFPMP_AGGREGATE" },
3922 { OFPMP_TABLE
, "OFPMP_TABLE" },
3923 { OFPMP_PORT_STATS
, "OFPMP_PORT_STATS" },
3924 { OFPMP_QUEUE_STATS
, "OFPMP_QUEUE_STATS" },
3925 { OFPMP_GROUP
, "OFPMP_GROUP" },
3926 { OFPMP_GROUP_DESC
, "OFPMP_GROUP_DESC" },
3927 { OFPMP_GROUP_FEATURES
, "OFPMP_GROUP_FEATURES" },
3928 { OFPMP_METER
, "OFPMP_METER" },
3929 { OFPMP_METER_CONFIG
, "OFPMP_METER_CONFIG" },
3930 { OFPMP_METER_FEATURES
, "OFPMP_METER_FEATURES" },
3931 { OFPMP_TABLE_FEATURES
, "OFPMP_TABLE_FEATURES" },
3932 { OFPMP_PORT_DESC
, "OFPMP_PORT_DESC" },
3933 { OFPMP_TABLE_DESC
, "OFPMP_TABLE_DESC" },
3934 { OFPMP_QUEUE_DESC
, "OFPMP_QUEUE_DESC" },
3935 { OFPMP_FLOW_MONITOR
, "OFPMP_FLOW_MONITOR" },
3936 { OFPMP_EXPERIMENTER
, "OFPMP_EXPERIMENTER" },
3940 #define OFPMPF_REQ_MORE 1 << 0
3942 dissect_openflow_multipart_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3945 proto_tree
*flags_tree
;
3948 /* uint16_t type; */
3949 type
= tvb_get_ntohs(tvb
, offset
);
3950 proto_tree_add_item(tree
, hf_openflow_v5_multipart_request_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3953 /* uint16_t flags; */
3954 ti
= proto_tree_add_item(tree
, hf_openflow_v5_multipart_request_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3955 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_multipart_request_flags
);
3957 proto_tree_add_item(flags_tree
, hf_openflow_v5_multipart_request_flags_more
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3960 /* uint8_t pad[4]; */
3961 proto_tree_add_item(tree
, hf_openflow_v5_multipart_request_pad
, tvb
, offset
, 4, ENC_NA
);
3964 /* uint8_t body[0]; */
3967 /* The request body is empty. */
3970 dissect_openflow_flow_stats_request_v5(tvb
, pinfo
, tree
, offset
, length
);
3972 case OFPMP_AGGREGATE
:
3973 dissect_openflow_aggregate_stats_request_v5(tvb
, pinfo
, tree
, offset
, length
);
3976 /* The request body is empty. */
3978 case OFPMP_PORT_STATS
:
3979 dissect_openflow_port_stats_request_v5(tvb
, pinfo
, tree
, offset
, length
);
3981 case OFPMP_QUEUE_STATS
:
3982 dissect_openflow_queue_stats_request_v5(tvb
, pinfo
, tree
, offset
, length
);
3985 dissect_openflow_group_stats_request_v5(tvb
, pinfo
, tree
, offset
, length
);
3987 case OFPMP_GROUP_DESC
:
3988 /* The request body is empty. */
3990 case OFPMP_GROUP_FEATURES
:
3991 /* The request body is empty. */
3994 dissect_openflow_meter_stats_request_v5(tvb
, pinfo
, tree
, offset
, length
);
3996 case OFPMP_METER_CONFIG
:
3997 dissect_openflow_meter_config_request_v5(tvb
, pinfo
, tree
, offset
, length
);
3999 case OFPMP_METER_FEATURES
:
4000 /* The request body is empty. */
4002 case OFPMP_TABLE_FEATURES
:
4003 while (offset
< length
) {
4004 offset
= dissect_openflow_table_features_v5(tvb
, pinfo
, tree
, offset
, length
);
4007 case OFPMP_PORT_DESC
:
4008 /* The request body is empty. */
4010 case OFPMP_TABLE_DESC
:
4011 /* The request body is empty. */
4013 case OFPMP_QUEUE_DESC
:
4014 dissect_openflow_queue_desc_request_v5(tvb
, pinfo
, tree
, offset
, length
);
4016 case OFPMP_FLOW_MONITOR
:
4017 dissect_openflow_flow_monitor_request_v5(tvb
, pinfo
, tree
, offset
, length
);
4019 case OFPMP_EXPERIMENTER
:
4020 /* uint32_t experimenter; */
4021 proto_tree_add_item(tree
, hf_openflow_v5_multipart_request_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4024 /* uint32_t exp_type; */
4025 proto_tree_add_item(tree
, hf_openflow_v5_multipart_request_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4028 /* uint32_t experimenter_data[0]; */
4029 if (offset
< length
) {
4030 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_multipart_request_undecoded
,
4031 tvb
, offset
, length
- offset
, "Experimenter multipart request body.");
4035 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_multipart_request_undecoded
,
4036 tvb
, offset
, length
- offset
, "Unknown multipart request body.");
4042 #define DESC_STR_LEN 256
4043 #define SERIAL_NUM_LEN 32
4045 dissect_openflow_switch_description_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4047 /* char mfr_desc[DESC_STR_LEN]; */
4048 proto_tree_add_item(tree
, hf_openflow_v5_switch_description_mfr_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4049 offset
+=DESC_STR_LEN
;
4051 /* char hw_desc[DESC_STR_LEN]; */
4052 proto_tree_add_item(tree
, hf_openflow_v5_switch_description_hw_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4053 offset
+=DESC_STR_LEN
;
4055 /* char sw_desc[DESC_STR_LEN]; */
4056 proto_tree_add_item(tree
, hf_openflow_v5_switch_description_sw_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4057 offset
+=DESC_STR_LEN
;
4059 /* char serial_num[SERIAL_NUM_LEN]; */
4060 proto_tree_add_item(tree
, hf_openflow_v5_switch_description_serial_num
, tvb
, offset
, SERIAL_NUM_LEN
, ENC_ASCII
);
4061 offset
+=SERIAL_NUM_LEN
;
4063 /* char dp_desc[DESC_STR_LEN]; */
4064 proto_tree_add_item(tree
, hf_openflow_v5_switch_description_dp_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
4065 /*offset+=DESC_STR_LEN;*/
4070 dissect_openflow_flow_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4073 proto_tree
*stats_tree
, *flags_tree
;
4077 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_flow_stats
, &ti
, "Flow stats");
4079 /* uint16_t length; */
4080 stats_len
= tvb_get_ntohs(tvb
, offset
);
4081 stats_end
= offset
+ stats_len
;
4082 proto_item_set_len(ti
, stats_len
);
4083 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4086 /* uint8_t table_id; */
4087 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4091 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_pad
, tvb
, offset
, 1, ENC_NA
);
4094 /* uint32_t duration_sec; */
4095 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4098 /* uint32_t duration_nsec; */
4099 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4102 /* uint16_t priority; */
4103 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4106 /* uint16_t idle_timeout; */
4107 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4110 /* uint16_t hard_timeout; */
4111 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4114 /* uint16_t flags; */
4115 ti
= proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4116 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_flow_stats_flags
);
4118 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_stats_flags_send_flow_rem
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4119 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_stats_flags_check_overlap
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4120 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_stats_flags_reset_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4121 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_stats_flags_no_packet_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4122 proto_tree_add_item(flags_tree
, hf_openflow_v5_flow_stats_flags_no_byte_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4125 /* uint16_t importance; */
4126 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_importance
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4129 /* uint8_t pad2[2]; */
4130 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_pad2
, tvb
, offset
, 4, ENC_NA
);
4133 /* uint64_t cookie; */
4134 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4137 /* uint64_t packet_count; */
4138 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4141 /* uint64_t byte_count; */
4142 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4145 /* struct ofp_match match; */
4146 offset
= dissect_openflow_match_v5(tvb
, pinfo
, stats_tree
, offset
, length
);
4148 /* struct ofp_instruction instructions[0]; */
4149 while (offset
< stats_end
) {
4150 offset
= dissect_openflow_instruction_v5(tvb
, pinfo
, stats_tree
, offset
, length
);
4158 dissect_openflow_aggregate_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4160 /* uint64_t packet_count; */
4161 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4164 /* uint64_t byte_count; */
4165 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4168 /* uint32_t flow_count; */
4169 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_flow_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4172 /* uint8_t pad[4]; */
4173 proto_tree_add_item(tree
, hf_openflow_v5_aggregate_stats_pad
, tvb
, offset
, 4, ENC_NA
);
4179 dissect_openflow_table_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4181 proto_tree
*stats_tree
;
4183 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 24, ett_openflow_v5_table_stats
, NULL
, "Table stats");
4185 /* uint8_t table_id; */
4186 proto_tree_add_item(stats_tree
, hf_openflow_v5_table_stats_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4189 /* uint8_t pad[3]; */
4190 proto_tree_add_item(stats_tree
, hf_openflow_v5_table_stats_pad
, tvb
, offset
, 3, ENC_NA
);
4193 /* uint32_t active_count; */
4194 proto_tree_add_item(stats_tree
, hf_openflow_v5_table_stats_active_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4197 /* uint64_t lookup_count; */
4198 proto_tree_add_item(stats_tree
, hf_openflow_v5_table_stats_lookup_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4201 /* uint64_t matched_count; */
4202 proto_tree_add_item(stats_tree
, hf_openflow_v5_table_stats_match_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4209 dissect_openflow_port_stats_prop_ethernet_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4211 /* uint8_t pad[4]; */
4212 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_ethernet_pad
, tvb
, offset
, 4, ENC_NA
);
4215 /* uint64_t rx_frame_error; */
4216 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_ethernet_rx_frame_err
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4219 /* uint64_t rx_over_error; */
4220 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_ethernet_rx_over_err
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4223 /* uint64_t rx_crc_error; */
4224 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_ethernet_rx_crc_err
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4227 /* uint64_t collisions; */
4228 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_ethernet_collisions
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4235 #define OFPOSF_RX_TUNE 1<<0
4236 #define OFPOSF_TX_TUNE 1<<1
4237 #define OFPOSF_TX_PWR 1<<2
4238 #define OFPOSF_RX_PWR 1<<4
4239 #define OFPOSF_TX_BIAS 1<<5
4240 #define OFPOSF_TX_TEMP 1<<6
4242 dissect_openflow_port_stats_prop_optical_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4245 proto_tree
*flags_tree
;
4247 /* uint8_t pad[4]; */
4248 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_pad
, tvb
, offset
, 4, ENC_NA
);
4251 /* uint32_t flags; */
4252 ti
= proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_flags
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4253 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_port_stats_prop_optical_flags
);
4255 proto_tree_add_item(flags_tree
, hf_openflow_v5_port_stats_prop_optical_flags_rx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4256 proto_tree_add_item(flags_tree
, hf_openflow_v5_port_stats_prop_optical_flags_tx_tune
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4257 proto_tree_add_item(flags_tree
, hf_openflow_v5_port_stats_prop_optical_flags_tx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4258 proto_tree_add_item(flags_tree
, hf_openflow_v5_port_stats_prop_optical_flags_rx_pwr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4259 proto_tree_add_item(flags_tree
, hf_openflow_v5_port_stats_prop_optical_flags_tx_bias
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4260 proto_tree_add_item(flags_tree
, hf_openflow_v5_port_stats_prop_optical_flags_tx_temp
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4263 /* uint32_t tx_freq_lmda; */
4264 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_tx_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4267 /* uint32_t tx_offset; */
4268 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_tx_offset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4271 /* uint32_t tx_grid_span; */
4272 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_tx_grid_span
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4275 /* uint32_t rx_freq_lmda; */
4276 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_rx_freq_lmda
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4279 /* uint32_t rx_offset; */
4280 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_rx_offset
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4283 /* uint32_t rx_grid_span; */
4284 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_rx_grid_span
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4287 /* uint16_t tx_pwr; */
4288 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_tx_pwr
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4291 /* uint16_t rx_pwr; */
4292 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_rx_pwr
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4295 /* uint16_t bias_current; */
4296 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_bias_current
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4299 /* uint16_t temperature; */
4300 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_optical_temperature
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4308 #define OFPPSPT_ETHERNET 0
4309 #define OFPPSPT_OPTICAL 1
4310 #define OFPPSPT_EXPERIMENTER 0xFFFF
4311 static const value_string openflow_v5_port_stats_prop_type_values
[] = {
4312 { OFPPSPT_ETHERNET
, "OFPPSPT_ETHERNET" },
4313 { OFPPSPT_OPTICAL
, "OFPPSPT_OPTICAL" },
4314 { OFPPSPT_EXPERIMENTER
, "OFPPSPT_EXPERIMENTER" },
4319 dissect_openflow_port_stats_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4321 proto_tree
*prop_tree
;
4324 uint16_t prop_length
;
4326 prop_type
= tvb_get_ntohs(tvb
, offset
);
4327 prop_length
= tvb_get_ntohs(tvb
, offset
);
4329 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_length
, ett_openflow_v5_port_stats_prop
, NULL
, "Port stats. property");
4331 /* uint16_t type; */
4332 proto_tree_add_item(prop_tree
, hf_openflow_v5_port_stats_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4336 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_port_stats_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4339 switch (prop_type
) {
4340 case OFPPSPT_ETHERNET
:
4341 offset
= dissect_openflow_port_stats_prop_ethernet_v5(tvb
, pinfo
, prop_tree
, offset
, length
);
4344 case OFPPSPT_OPTICAL
:
4345 offset
= dissect_openflow_port_stats_prop_optical_v5(tvb
, pinfo
, prop_tree
, offset
, length
);
4348 case OFPPSPT_EXPERIMENTER
:
4349 if (prop_length
<= 12) {
4350 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
4354 /* uint32_t experimenter; */
4355 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4358 /* uint32_t exp_type; */
4359 proto_tree_add_item(tree
, hf_openflow_v5_port_stats_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4362 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_port_stats_prop_undecoded
,
4363 tvb
, offset
, prop_length
- 12, "Experimenter port stats. property.");
4364 offset
+= prop_length
- 12;
4368 if (prop_length
<= 4) {
4369 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
4373 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_port_stats_prop_undecoded
,
4374 tvb
, offset
, prop_length
- 4, "Unknown port stats. property.");
4375 offset
+= prop_length
- 4;
4383 dissect_openflow_port_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4385 proto_tree
*stats_tree
;
4388 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 112, ett_openflow_v5_port_stats
, NULL
, "Port stats");
4390 /* uint16_t length; */
4391 stats_end
= tvb_get_ntohs(tvb
, offset
) + offset
- 4;
4392 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4395 /* uint8_t pad[2]; */
4396 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_pad
, tvb
, offset
, 2, ENC_NA
);
4399 /* uint32_t port_no; */
4400 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4403 /* uint32_t duration_sec; */
4404 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4407 /* uint32_t duration_nsec; */
4408 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4411 /* uint64_t rx_packets; */
4412 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_rx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4415 /* uint64_t tx_packets; */
4416 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_tx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4419 /* uint64_t rx_bytes; */
4420 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_rx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4423 /* uint64_t tx_bytes; */
4424 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_tx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4427 /* uint64_t rx_dropped; */
4428 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_rx_dropped
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4431 /* uint64_t tx_dropped; */
4432 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_tx_dropped
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4435 /* uint64_t rx_errors; */
4436 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_rx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4439 /* uint64_t tx_errors; */
4440 proto_tree_add_item(stats_tree
, hf_openflow_v5_port_stats_tx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4443 /* struct ofp_port_stats_prop_header properties[0]; */
4444 while (offset
< stats_end
) {
4445 offset
= dissect_openflow_port_stats_prop_v5(tvb
, pinfo
, tree
, offset
, length
);
4454 dissect_openflow_table_desc_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4457 proto_tree
*desc_tree
, *conf_tree
;
4458 uint16_t desc_length
;
4461 desc_length
= tvb_get_ntohs(tvb
, offset
);
4462 desc_end
= offset
+ desc_length
;
4464 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, desc_length
, ett_openflow_v5_table_desc
, NULL
, "Table desc");
4466 /* uint16_t length; */
4467 proto_tree_add_item(desc_tree
, hf_openflow_v5_table_desc_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4470 /* uint8_t table_id; */
4471 proto_tree_add_item(desc_tree
, hf_openflow_v5_table_desc_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4474 /* uint8_t pad[1]; */
4475 proto_tree_add_item(desc_tree
, hf_openflow_v5_table_desc_pad
, tvb
, offset
, 1, ENC_NA
);
4478 /* uint32_t config; */
4479 ti
= proto_tree_add_item(desc_tree
, hf_openflow_v5_table_desc_config
, tvb
, offset
, 4, ENC_NA
);
4480 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_table_desc_config
);
4482 proto_tree_add_item(conf_tree
, hf_openflow_v5_table_desc_config_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4483 proto_tree_add_item(conf_tree
, hf_openflow_v5_table_desc_config_vacancy_events
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4486 /* struct ofp_table_mod_prop_header properties[0]; */
4487 while (offset
< desc_end
) {
4488 offset
= dissect_openflow_tablemod_prop_v5(tvb
, pinfo
, desc_tree
, offset
, length
);
4496 #define OFPQSPT_EXPERIMENTER 0xffff
4497 static const value_string openflow_v5_queue_stats_prop_type_values
[] = {
4498 { OFPQSPT_EXPERIMENTER
, "OFPQSPT_EXPERIMENTER" },
4503 dissect_openflow_queue_stats_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4505 proto_tree
*prop_tree
;
4508 uint16_t prop_length
;
4510 prop_type
= tvb_get_ntohs(tvb
, offset
);
4511 prop_length
= tvb_get_ntohs(tvb
, offset
+ 2);
4513 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_length
, ett_openflow_v5_queue_stats_prop
, NULL
, "Queue stats property");
4515 /* uint16_t type; */
4516 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_stats_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4520 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_stats_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4523 switch (prop_type
) {
4524 case OFPMP_EXPERIMENTER
:
4525 if (prop_length
<= 12) {
4526 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
4530 /* uint32_t experimenter; */
4531 proto_tree_add_item(tree
, hf_openflow_v5_queue_stats_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4534 /* uint32_t exp_type; */
4535 proto_tree_add_item(tree
, hf_openflow_v5_queue_stats_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4538 /* uint32_t experimenter_data[0]; */
4539 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_queue_stats_prop_undecoded
,
4540 tvb
, offset
, length
- 12, "Experimenter queue stats prop body.");
4541 offset
+= prop_length
- 12;
4545 if (prop_length
<= 4) {
4546 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
4550 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_queue_stats_prop_undecoded
,
4551 tvb
, offset
, length
- 4, "Unknown queue stats prop body.");
4552 offset
+= prop_length
- 4;
4562 dissect_openflow_queue_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4564 proto_tree
*stats_tree
;
4568 stats_len
= tvb_get_ntohs(tvb
, offset
);
4569 stats_end
= offset
+ stats_len
;
4571 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, stats_len
, ett_openflow_v5_queue_stats
, NULL
, "Queue stats");
4573 /* uint16_t length; */
4574 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4577 /* uint8_t pad[6]; */
4578 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_pad
, tvb
, offset
, 2, ENC_NA
);
4581 /* uint32_t port_no; */
4582 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4585 /* uint32_t queue_id; */
4586 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4589 /* uint64_t tx_bytes; */
4590 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_tx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4593 /* uint64_t tx_packets; */
4594 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_tx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4597 /* uint64_t tx_errors; */
4598 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_tx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4601 /* uint32_t duration_sec; */
4602 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4605 /* uint32_t duration_nsec; */
4606 proto_tree_add_item(stats_tree
, hf_openflow_v5_queue_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4609 /* struct ofp_queue_stats_prop_header properties[0]; */
4610 while (offset
< stats_end
) {
4611 offset
= dissect_openflow_queue_stats_prop_v5(tvb
, pinfo
, stats_tree
, offset
, length
);
4620 dissect_openflow_bucket_counter_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4622 proto_tree
*counter_tree
;
4624 counter_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 16, ett_openflow_v5_bucket_counter
, NULL
, "Bucket counter");
4626 /* uint64_t packet_count; */
4627 proto_tree_add_item(counter_tree
, hf_openflow_v5_bucket_counter_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4630 /* uint64_t byte_count; */
4631 proto_tree_add_item(counter_tree
, hf_openflow_v5_bucket_counter_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4639 dissect_openflow_group_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4642 proto_tree
*stats_tree
;
4646 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_group_stats
, &ti
, "Group stats");
4648 /* uint16_t length; */
4649 stats_len
= tvb_get_ntohs(tvb
, offset
);
4650 stats_end
= offset
+ stats_len
;
4651 proto_item_set_len(ti
, stats_len
);
4652 proto_tree_add_item(stats_tree
, hf_openflow_v5_group_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4655 /* uint8_t pad[2]; */
4656 proto_tree_add_item(stats_tree
, hf_openflow_v5_group_stats_pad
, tvb
, offset
, 2, ENC_NA
);
4659 /* uint32_t group_id; */
4660 proto_tree_add_item(stats_tree
, hf_openflow_v5_group_stats_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4663 /* uint32_t ref_count; */
4664 proto_tree_add_item(stats_tree
, hf_openflow_v5_group_stats_ref_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4667 /* uint8_t pad2[4]; */
4668 proto_tree_add_item(stats_tree
, hf_openflow_v5_group_stats_pad2
, tvb
, offset
, 4, ENC_NA
);
4671 /* uint64_t packet_count; */
4672 proto_tree_add_item(stats_tree
, hf_openflow_v5_group_stats_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4675 /* uint64_t byte_count; */
4676 proto_tree_add_item(stats_tree
, hf_openflow_v5_group_stats_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4679 /* uint32_t duration_sec; */
4680 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4683 /* uint32_t duration_nsec; */
4684 proto_tree_add_item(stats_tree
, hf_openflow_v5_flow_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4687 /* struct ofp_bucket_counter bucket_stats[0]; */
4688 while (offset
< stats_end
) {
4689 offset
= dissect_openflow_bucket_counter_v5(tvb
, pinfo
, stats_tree
, offset
, length
);
4696 dissect_openflow_group_desc_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
4699 proto_tree
*desc_tree
;
4704 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_group_desc
, &ti
, "Group description");
4706 /* uint16_t length; */
4707 desc_len
= tvb_get_ntohs(tvb
, offset
);
4708 desc_end
= offset
+ desc_len
;
4709 proto_item_set_len(ti
, desc_len
);
4710 proto_tree_add_item(desc_tree
, hf_openflow_v5_group_desc_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4714 proto_tree_add_item(desc_tree
, hf_openflow_v5_group_desc_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
4718 proto_tree_add_item(desc_tree
, hf_openflow_v5_group_desc_pad
, tvb
, offset
, 1, ENC_NA
);
4721 /* uint32_t group_id; */
4722 proto_tree_add_item(desc_tree
, hf_openflow_v5_group_desc_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4725 /* struct ofp_bucket buckets[0]; */
4726 while (offset
< desc_end
) {
4727 offset
= dissect_openflow_bucket_v5(tvb
, pinfo
, desc_tree
, offset
, length
);
4734 #define OFPGFC_SELECT_WEIGHT 1 << 0
4735 #define OFPGFC_SELECT_LIVENESS 1 << 1
4736 #define OFPGFC_CHAINING 1 << 2
4737 #define OFPGFC_CHAINING_CHECKS 1 << 3
4739 dissect_openflow_group_features_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4742 proto_tree
*types_tree
, *caps_tree
, *acts_tree
;
4744 /* uint32_t types; */
4745 ti
= proto_tree_add_item(tree
, hf_openflow_v5_group_features_types
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4746 types_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_group_features_types
);
4748 proto_tree_add_item(types_tree
, hf_openflow_v5_group_features_types_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4749 proto_tree_add_item(types_tree
, hf_openflow_v5_group_features_types_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4750 proto_tree_add_item(types_tree
, hf_openflow_v5_group_features_types_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4751 proto_tree_add_item(types_tree
, hf_openflow_v5_group_features_types_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4754 /* uint32_t capabilities; */
4755 ti
= proto_tree_add_item(tree
, hf_openflow_v5_group_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4756 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_group_features_capabilities
);
4758 proto_tree_add_item(caps_tree
, hf_openflow_v5_group_features_capabilities_select_weight
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4759 proto_tree_add_item(caps_tree
, hf_openflow_v5_group_features_capabilities_select_liveness
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4760 proto_tree_add_item(caps_tree
, hf_openflow_v5_group_features_capabilities_chaining
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4761 proto_tree_add_item(caps_tree
, hf_openflow_v5_group_features_capabilities_chaining_checks
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4764 /* max_groups[4]; */
4765 proto_tree_add_item(tree
, hf_openflow_v5_group_features_max_groups_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4767 proto_tree_add_item(tree
, hf_openflow_v5_group_features_max_groups_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4769 proto_tree_add_item(tree
, hf_openflow_v5_group_features_max_groups_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4771 proto_tree_add_item(tree
, hf_openflow_v5_group_features_max_groups_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4774 /* uint32_t actions[4]; */
4775 ti
= proto_tree_add_item(tree
, hf_openflow_v5_group_features_actions_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4776 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_group_features_actions_all
);
4778 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4779 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4780 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4781 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4782 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4783 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4784 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4785 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4786 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4787 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4788 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4789 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4790 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4791 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4792 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4793 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_all_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4796 ti
= proto_tree_add_item(tree
, hf_openflow_v5_group_features_actions_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4797 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_group_features_actions_select
);
4799 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4800 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4801 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4802 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4803 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4804 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4805 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4806 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4807 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4808 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4809 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4810 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4811 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4812 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4813 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4814 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_select_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4817 ti
= proto_tree_add_item(tree
, hf_openflow_v5_group_features_actions_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4818 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_group_features_actions_indirect
);
4820 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4821 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4822 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4823 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4824 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4825 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4826 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4827 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4828 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4829 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4830 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4831 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4832 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4833 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4834 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4835 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_indirect_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4838 ti
= proto_tree_add_item(tree
, hf_openflow_v5_group_features_actions_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4839 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_group_features_actions_ff
);
4841 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4842 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4843 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4844 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4845 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4846 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4847 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4848 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4849 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4850 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4851 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4852 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4853 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4854 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4855 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4856 proto_tree_add_item(acts_tree
, hf_openflow_v5_group_features_actions_ff_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4862 dissect_openflow_meter_band_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4864 proto_tree
*stats_tree
;
4866 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 16, ett_openflow_v5_meter_band_stats
, NULL
, "Meter band stats");
4868 /* uint64_t packet_band_count; */
4869 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_band_stats_packet_band_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4872 /* uint64_t byte_band_count; */
4873 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_band_stats_byte_band_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4881 dissect_openflow_meter_stats_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4884 proto_tree
*stats_tree
;
4888 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_meter_stats
, &ti
, "Meter stats");
4890 /* uint32_t meter_id; */
4891 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4895 stats_len
= tvb_get_ntohs(tvb
, offset
);
4896 stats_end
= offset
- 4 + stats_len
;
4897 proto_item_set_len(ti
, stats_len
);
4898 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4901 /* uint8_t pad[6]; */
4902 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_pad
, tvb
, offset
, 6, ENC_NA
);
4905 /* uint32_t flow_count; */
4906 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_flow_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4909 /* uint64_t packet_in_count; */
4910 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_packet_in_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4913 /* uint64_t byte_in_count; */
4914 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_byte_in_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4917 /* uint32_t duration_sec; */
4918 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4921 /* uint32_t duration_nsec; */
4922 proto_tree_add_item(stats_tree
, hf_openflow_v5_meter_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4925 /* struct ofp_meter_band_stats band_stats[0]; */
4926 while (offset
< stats_end
) {
4927 offset
= dissect_openflow_meter_band_stats_v5(tvb
, pinfo
, stats_tree
, offset
, length
);
4935 dissect_openflow_meter_config_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4938 proto_tree
*conf_tree
, *flags_tree
;
4939 uint16_t config_len
;
4942 conf_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_meter_config
, &ti
, "Meter config");
4945 config_len
= tvb_get_ntohs(tvb
, offset
);
4946 config_end
= offset
+ config_len
;
4947 proto_item_set_len(ti
, config_len
);
4948 proto_tree_add_item(conf_tree
, hf_openflow_v5_meter_config_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4951 /* uint16_t flags; */
4952 ti
= proto_tree_add_item(conf_tree
, hf_openflow_v5_meter_config_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4953 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_meter_config_flags
);
4955 proto_tree_add_item(flags_tree
, hf_openflow_v5_meter_config_flags_kbps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4956 proto_tree_add_item(flags_tree
, hf_openflow_v5_meter_config_flags_pktps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4957 proto_tree_add_item(flags_tree
, hf_openflow_v5_meter_config_flags_burst
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4958 proto_tree_add_item(flags_tree
, hf_openflow_v5_meter_config_flags_stats
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4961 /* uint32_t meter_id; */
4962 proto_tree_add_item(conf_tree
, hf_openflow_v5_meter_config_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4965 /* struct ofp_meter_band_header bands[0]; */
4966 while (offset
< config_end
) {
4967 offset
= dissect_openflow_meter_band_v5(tvb
, pinfo
, conf_tree
, offset
, length
);
4974 #define OFPMF_KBPS 1 << 0
4975 #define OFPMF_PKTPS 1 << 1
4976 #define OFPMF_BURST 1 << 2
4977 #define OFPMF_STATS 1 << 3
4979 dissect_openflow_meter_features_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4982 proto_tree
*bands_tree
, *caps_tree
;
4984 /* uint32_t max_meter; */
4985 proto_tree_add_item(tree
, hf_openflow_v5_meter_features_max_meter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4988 /* uint32_t band_types; */
4989 ti
= proto_tree_add_item(tree
, hf_openflow_v5_meter_features_band_types
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4990 bands_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_meter_features_band_types
);
4992 proto_tree_add_item(bands_tree
, hf_openflow_v5_meter_features_band_types_drop
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4993 proto_tree_add_item(bands_tree
, hf_openflow_v5_meter_features_band_types_dscp_remark
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4996 /* uint32_t capabilities; */
4997 ti
= proto_tree_add_item(tree
, hf_openflow_v5_meter_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4998 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_meter_features_capabilities
);
5000 proto_tree_add_item(caps_tree
, hf_openflow_v5_meter_features_capabilities_kbps
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5001 proto_tree_add_item(caps_tree
, hf_openflow_v5_meter_features_capabilities_pktps
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5002 proto_tree_add_item(caps_tree
, hf_openflow_v5_meter_features_capabilities_burst
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5003 proto_tree_add_item(caps_tree
, hf_openflow_v5_meter_features_capabilities_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5006 /* uint8_t max_bands; */
5007 proto_tree_add_item(tree
, hf_openflow_v5_meter_features_max_bands
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5010 /* uint8_t max_color; */
5011 proto_tree_add_item(tree
, hf_openflow_v5_meter_features_max_color
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5014 /* uint8_t pad[2]; */
5015 proto_tree_add_item(tree
, hf_openflow_v5_meter_features_pad
, tvb
, offset
, 2, ENC_NA
);
5021 #define OFPQDP_MIN_RATE_MAX 1000
5022 static const value_string openflow_v5_queue_desc_prop_min_rate_reserved_values
[] = {
5023 { 0xffff, "OFPQDP_MIN_RATE_UNCFG" },
5027 #define OFPQDP_MAX_RATE_MAX 1000
5028 static const value_string openflow_v5_queue_desc_prop_max_rate_reserved_values
[] = {
5029 { 0xffff, "OFPQDP_MAX_RATE_UNCFG" },
5033 #define OFPQDPT_MIN_RATE 1
5034 #define OFPQDPT_MAX_RATE 2
5035 #define OFPQDPT_EXPERIMENTER 0xffff
5036 static const value_string openflow_v5_queue_desc_prop_property_values
[] = {
5037 { OFPQDPT_MIN_RATE
, "OFPQDPT_MIN_RATE" },
5038 { OFPQDPT_MAX_RATE
, "OFPQDPT_MAX_RATE" },
5039 { OFPQDPT_EXPERIMENTER
, "OFPQDPT_EXPERIMENTER" },
5044 dissect_openflow_queue_desc_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5047 proto_tree
*prop_tree
;
5051 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_queue_desc_prop
, &ti
, "Queue property");
5053 /* uint16_t property; */
5054 prop_type
= tvb_get_ntohs(tvb
, offset
);
5055 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_property
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5059 prop_len
= tvb_get_ntohs(tvb
, offset
);
5060 proto_item_set_len(ti
, prop_len
);
5061 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5064 /* uint8_t pad[4]; */
5065 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_pad
, tvb
, offset
, 4, ENC_NA
);
5069 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
5073 switch (prop_type
) {
5074 case OFPQDPT_MIN_RATE
:
5075 /* uint16_t rate; */
5076 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_min_rate_rate
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5079 /* uint8_t pad[6]; */
5080 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_min_rate_pad
, tvb
, offset
, 6, ENC_NA
);
5084 case OFPQDPT_MAX_RATE
:
5085 /* uint16_t rate; */
5086 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_max_rate_rate
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5089 /* uint8_t pad[6]; */
5090 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_max_rate_pad
, tvb
, offset
, 6, ENC_NA
);
5094 case OFPQDPT_EXPERIMENTER
:
5095 if (prop_len
<= 16) {
5096 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
5100 /* uint32_t experimenter; */
5101 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5104 /* uint32_t exp_type; */
5105 proto_tree_add_item(prop_tree
, hf_openflow_v5_queue_desc_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5108 /* uint8_t experimenter_data[0]; */
5109 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v5_queue_desc_prop_undecoded
,
5110 tvb
, offset
, prop_len
- 16, "Experimenter queue property body.");
5111 offset
+=prop_len
-16;
5115 if (prop_len
<= 8) {
5116 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
5120 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v5_queue_desc_prop_undecoded
,
5121 tvb
, offset
, prop_len
- 8, "Unknown queue property body.");
5131 #define OFPQ_ALL 0xffffffff
5133 static const value_string openflow_v5_queue_id_reserved_values
[] = {
5134 { OFPQ_ALL
, "OFPQ_ALL" },
5140 dissect_openflow_queue_desc_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5142 proto_tree
*desc_tree
;
5146 desc_len
= tvb_get_ntohs(tvb
, offset
+ 8);
5147 desc_end
= offset
+ desc_len
;
5149 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, desc_len
, ett_openflow_v5_queue_desc
, NULL
, "Queue desc");
5151 /* uint32_t port_no; */
5152 proto_tree_add_item(tree
, hf_openflow_v5_queue_desc_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5155 /* uint32_t queue_id; */
5156 proto_tree_add_item(desc_tree
, hf_openflow_v5_queue_desc_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5160 proto_tree_add_item(desc_tree
, hf_openflow_v5_queue_desc_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5162 /* uint8_t pad[6]; */
5163 proto_tree_add_item(desc_tree
, hf_openflow_v5_queue_desc_pad
, tvb
, offset
, 6, ENC_NA
);
5166 /* struct ofp_queue_desc_prop_header properties[0]; */
5167 while (offset
< desc_end
) {
5168 offset
= dissect_openflow_queue_desc_prop_v5(tvb
, pinfo
, desc_tree
, offset
, length
);
5175 #define OFPFME_INITIAL 0
5176 #define OFPFME_ADDED 1
5177 #define OFPFME_REMOVED 2
5178 #define OFPFME_MODIFIED 3
5179 #define OFPFME_ABBREV 4
5180 #define OFPFME_PAUSED 5
5181 #define OFPFME_RESUMED 6
5182 static const value_string openflow_v5_flow_monitor_events
[] = {
5183 { OFPFME_INITIAL
, "OFPFME_INITIAL" },
5184 { OFPFME_ADDED
, "OFPFME_ADDED" },
5185 { OFPFME_REMOVED
, "OFPFME_REMOVED" },
5186 { OFPFME_MODIFIED
, "OFPFME_MODIFIED" },
5187 { OFPFME_ABBREV
, "OFPFME_ABBREV" },
5188 { OFPFME_PAUSED
, "OFPFME_PAUSED" },
5189 { OFPFME_RESUMED
, "OFPFME_RESUMED" },
5194 dissect_openflow_flow_update_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5196 proto_tree
*update_tree
;
5197 uint16_t update_len
;
5198 uint16_t update_event
;
5202 update_len
= tvb_get_ntohs(tvb
, offset
);
5203 update_end
= offset
+ update_len
;
5204 update_event
= tvb_get_ntohs(tvb
, offset
+ 2);
5206 update_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, update_len
, ett_openflow_v5_flow_update
, NULL
, "Flow update");
5208 /* uint16_t length; */
5209 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5212 /* uint16_t event; */
5213 ti
= proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_event
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5216 if (update_len
< 4) {
5217 expert_add_info(pinfo
, ti
, &ei_openflow_v5_length_too_short
);
5221 switch (update_event
) {
5222 case OFPFME_INITIAL
:
5224 case OFPFME_REMOVED
:
5225 case OFPFME_MODIFIED
:
5226 /* uint8_t table_id; */
5227 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5230 if (update_event
== OFPFME_REMOVED
) {
5231 /* uint8_t reason; */
5232 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5235 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_zero
, tvb
, offset
, 1, ENC_NA
);
5239 /* uint16_t idle_timeout; */
5240 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5243 /* uint16_t hard_timeout; */
5244 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5247 /* uint16_t priority; */
5248 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5251 /* uint8_t zeros[4]; */
5252 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_zeros
, tvb
, offset
, 4, ENC_NA
);
5255 /* uint64_t cookie; */
5256 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_full_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5259 /* struct ofp_match match; */
5260 offset
= dissect_openflow_match_v5(tvb
, pinfo
, update_tree
, offset
, length
);
5262 /* struct ofp_instruction instructions[0]; */
5263 while (offset
< update_end
) {
5264 offset
= dissect_openflow_instruction_v5(tvb
, pinfo
, update_tree
, offset
, length
);
5270 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_abbrev_xid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5275 case OFPFME_RESUMED
:
5276 /* uint8_t zeros[4]; */
5277 proto_tree_add_item(update_tree
, hf_openflow_v5_flow_update_paused_zeros
, tvb
, offset
, 4, ENC_NA
);
5282 proto_tree_add_expert_format(update_tree
, pinfo
, &ei_openflow_v5_flow_update_undecoded
,
5283 tvb
, offset
, update_len
- 4, "Unknown flow update body.");
5284 offset
+=update_len
-4;
5293 #define OFPMPF_REPLY_MORE 1 << 0
5295 dissect_openflow_multipart_reply_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
5298 proto_tree
*flags_tree
;
5301 /* uint16_t type; */
5302 type
= tvb_get_ntohs(tvb
, offset
);
5303 proto_tree_add_item(tree
, hf_openflow_v5_multipart_reply_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5306 /* uint16_t flags; */
5307 ti
= proto_tree_add_item(tree
, hf_openflow_v5_multipart_reply_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5308 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_multipart_reply_flags
);
5310 proto_tree_add_item(flags_tree
, hf_openflow_v5_multipart_reply_flags_more
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5313 /* uint8_t pad[4]; */
5314 proto_tree_add_item(tree
, hf_openflow_v5_multipart_reply_pad
, tvb
, offset
, 4, ENC_NA
);
5319 dissect_openflow_switch_description_v5(tvb
, pinfo
, tree
, offset
, length
);
5322 while (offset
< length
) {
5323 offset
= dissect_openflow_flow_stats_v5(tvb
, pinfo
, tree
, offset
, length
);
5326 case OFPMP_AGGREGATE
:
5327 dissect_openflow_aggregate_stats_v5(tvb
, pinfo
, tree
, offset
, length
);
5330 while (offset
< length
) {
5331 offset
= dissect_openflow_table_stats_v5(tvb
, pinfo
, tree
, offset
, length
);
5334 case OFPMP_PORT_STATS
:
5335 while (offset
< length
) {
5336 offset
= dissect_openflow_port_stats_v5(tvb
, pinfo
, tree
, offset
, length
);
5339 case OFPMP_QUEUE_STATS
:
5340 while (offset
< length
) {
5341 offset
= dissect_openflow_queue_stats_v5(tvb
, pinfo
, tree
, offset
, length
);
5345 while (offset
< length
) {
5346 offset
= dissect_openflow_group_stats_v5(tvb
, pinfo
, tree
, offset
, length
);
5349 case OFPMP_GROUP_DESC
:
5350 while (offset
< length
) {
5351 offset
= dissect_openflow_group_desc_v5(tvb
, pinfo
, tree
, offset
, length
);
5354 case OFPMP_GROUP_FEATURES
:
5355 dissect_openflow_group_features_v5(tvb
, pinfo
, tree
, offset
, length
);
5358 while (offset
< length
) {
5359 offset
= dissect_openflow_meter_stats_v5(tvb
, pinfo
, tree
, offset
, length
);
5362 case OFPMP_METER_CONFIG
:
5363 while (offset
< length
) {
5364 offset
= dissect_openflow_meter_config_v5(tvb
, pinfo
, tree
, offset
, length
);
5367 case OFPMP_METER_FEATURES
:
5368 dissect_openflow_meter_features_v5(tvb
, pinfo
, tree
, offset
, length
);
5370 case OFPMP_TABLE_FEATURES
:
5371 while (offset
< length
) {
5372 offset
= dissect_openflow_table_features_v5(tvb
, pinfo
, tree
, offset
, length
);
5375 case OFPMP_PORT_DESC
:
5376 while (offset
< length
) {
5377 offset
= dissect_openflow_port_v5(tvb
, pinfo
, tree
, offset
, length
);
5380 case OFPMP_TABLE_DESC
:
5381 while (offset
< length
) {
5382 offset
= dissect_openflow_table_desc_v5(tvb
, pinfo
, tree
, offset
, length
);
5385 case OFPMP_QUEUE_DESC
:
5386 while (offset
< length
) {
5387 offset
= dissect_openflow_queue_desc_v5(tvb
, pinfo
, tree
, offset
, length
);
5390 case OFPMP_FLOW_MONITOR
:
5391 while (offset
< length
) {
5392 offset
= dissect_openflow_flow_update_v5(tvb
, pinfo
, tree
, offset
, length
);
5396 case OFPMP_EXPERIMENTER
:
5397 /* uint32_t experimenter; */
5398 proto_tree_add_item(tree
, hf_openflow_v5_multipart_reply_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5401 /* uint32_t exp_type; */
5402 proto_tree_add_item(tree
, hf_openflow_v5_multipart_reply_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5405 /* uint32_t experimenter_data[0]; */
5406 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_multipart_reply_undecoded
,
5407 tvb
, offset
, length
- 16, "Experimenter multipart reply body.");
5411 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_multipart_reply_undecoded
,
5412 tvb
, offset
, length
- 8, "Unknown multipart reply body.");
5420 dissect_openflow_queue_get_config_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5422 /* uint32_t port; */
5423 proto_tree_add_item(tree
, hf_openflow_v5_queue_get_config_request_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5426 /* uint8_t pad[4]; */
5427 proto_tree_add_item(tree
, hf_openflow_v5_queue_get_config_request_pad
, tvb
, offset
, 4, ENC_NA
);
5434 static const value_string openflow_v5_controller_role_values
[] = {
5435 { 0, "OFPCR_ROLE_NOCHANGE" },
5436 { 1, "OFPCR_ROLE_EQUAL" },
5437 { 2, "OFPCR_ROLE_MASTER" },
5438 { 3, "OFPCR_ROLE_SLAVE" },
5443 dissect_openflow_role_request_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5445 /* uint32_t role; */
5446 proto_tree_add_item(tree
, hf_openflow_v5_role_request_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5449 /* uint8_t pad[4]; */
5450 proto_tree_add_item(tree
, hf_openflow_v5_role_request_pad
, tvb
, offset
, 4, ENC_NA
);
5453 /* uint64_t generation_id; */
5454 proto_tree_add_item(tree
, hf_openflow_v5_role_request_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5460 dissect_openflow_role_reply_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5462 /* uint32_t role; */
5463 proto_tree_add_item(tree
, hf_openflow_v5_role_reply_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5466 /* uint8_t pad[4]; */
5467 proto_tree_add_item(tree
, hf_openflow_v5_role_reply_pad
, tvb
, offset
, 4, ENC_NA
);
5470 /* uint64_t generation_id; */
5471 proto_tree_add_item(tree
, hf_openflow_v5_role_reply_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5477 #define OFPACPT_PACKET_IN_SLAVE 0
5478 #define OFPACPT_PACKET_IN_MASTER 1
5479 #define OFPACPT_PORT_STATUS_SLAVE 2
5480 #define OFPACPT_PORT_STATUS_MASTER 3
5481 #define OFPACPT_FLOW_REMOVED_SLAVE 4
5482 #define OFPACPT_FLOW_REMOVED_MASTER 5
5483 #define OFPACPT_ROLE_STATUS_SLAVE 6
5484 #define OFPACPT_ROLE_STATUS_MASTER 7
5485 #define OFPACPT_TABLE_STATUS_SLAVE 8
5486 #define OFPACPT_TABLE_STATUS_MASTER 9
5487 #define OFPACPT_REQUESTFORWARD_SLAVE 10
5488 #define OFPACPT_REQUESTFORWARD_MASTER 11
5489 #define OFPACPT_EXPERIMENTER_SLAVE 0xFFFE
5490 #define OFPACPT_EXPERIMENTER_MASTER 0xFFFF
5491 static const value_string openflow_v5_async_config_prop_type_values
[] = {
5492 { OFPACPT_PACKET_IN_SLAVE
, "OFPACPT_PACKET_IN_SLAVE" },
5493 { OFPACPT_PACKET_IN_MASTER
, "OFPACPT_PACKET_IN_MASTER" },
5494 { OFPACPT_PORT_STATUS_SLAVE
, "OFPACPT_PORT_STATUS_SLAVE" },
5495 { OFPACPT_PORT_STATUS_MASTER
, "OFPACPT_PORT_STATUS_MASTER" },
5496 { OFPACPT_FLOW_REMOVED_SLAVE
, "OFPACPT_FLOW_REMOVED_SLAVE" },
5497 { OFPACPT_FLOW_REMOVED_MASTER
, "OFPACPT_FLOW_REMOVED_MASTER" },
5498 { OFPACPT_ROLE_STATUS_SLAVE
, "OFPACPT_ROLE_STATUS_SLAVE" },
5499 { OFPACPT_ROLE_STATUS_MASTER
, "OFPACPT_ROLE_STATUS_MASTER" },
5500 { OFPACPT_TABLE_STATUS_SLAVE
, "OFPACPT_TABLE_STATUS_SLAVE" },
5501 { OFPACPT_TABLE_STATUS_MASTER
, "OFPACPT_TABLE_STATUS_MASTER" },
5502 { OFPACPT_REQUESTFORWARD_SLAVE
, "OFPACPT_REQUESTFORWARD_SLAVE" },
5503 { OFPACPT_REQUESTFORWARD_MASTER
, "OFPACPT_REQUESTFORWARD_MASTER" },
5504 { OFPACPT_EXPERIMENTER_SLAVE
, "OFPACPT_EXPERIMENTER_SLAVE" },
5505 { OFPACPT_EXPERIMENTER_MASTER
, "OFPACPT_EXPERIMENTER_MASTER" },
5509 #define OFPRFR_GROUP_MOD 0
5510 #define OFPRFR_METER_MOD 1
5512 dissect_openflow_async_config_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5515 proto_item
*prop_item
;
5516 proto_tree
*prop_tree
, *pi_tree
, *ps_tree
, *fr_tree
, *rs_tree
, *ts_tree
, *rf_tree
;
5520 prop_type
= tvb_get_ntohs(tvb
, offset
);
5521 prop_len
= tvb_get_ntohs(tvb
, offset
+ 2);
5523 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_len
, ett_openflow_v5_async_config_prop
, NULL
, "Async config prop");
5525 /* uint16_t type; */
5526 proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5529 /* uint16_t length; */
5530 prop_item
= proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5533 switch (prop_type
) {
5534 case OFPACPT_PACKET_IN_SLAVE
:
5535 case OFPACPT_PACKET_IN_MASTER
:
5536 /* uint32_t mask; */
5537 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_reason_packet_in_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5538 pi_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_async_config_prop_reason_packet_in_mask
);
5540 proto_tree_add_item(pi_tree
, hf_openflow_v5_async_config_prop_reason_packet_in_mask_table_miss
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5541 proto_tree_add_item(pi_tree
, hf_openflow_v5_async_config_prop_reason_packet_in_mask_apply_action
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5542 proto_tree_add_item(pi_tree
, hf_openflow_v5_async_config_prop_reason_packet_in_mask_invalid_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5543 proto_tree_add_item(pi_tree
, hf_openflow_v5_async_config_prop_reason_packet_in_mask_action_set
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5544 proto_tree_add_item(pi_tree
, hf_openflow_v5_async_config_prop_reason_packet_in_mask_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5545 proto_tree_add_item(pi_tree
, hf_openflow_v5_async_config_prop_reason_packet_in_mask_packet_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5549 case OFPACPT_PORT_STATUS_SLAVE
:
5550 case OFPACPT_PORT_STATUS_MASTER
:
5551 /* uint32_t mask; */
5552 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_reason_port_status_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5553 ps_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_async_config_prop_reason_port_status_mask
);
5555 proto_tree_add_item(ps_tree
, hf_openflow_v5_async_config_prop_reason_port_status_mask_add
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5556 proto_tree_add_item(ps_tree
, hf_openflow_v5_async_config_prop_reason_port_status_mask_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5557 proto_tree_add_item(ps_tree
, hf_openflow_v5_async_config_prop_reason_port_status_mask_modify
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5561 case OFPACPT_FLOW_REMOVED_SLAVE
:
5562 case OFPACPT_FLOW_REMOVED_MASTER
:
5563 /* uint32_t mask; */
5564 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_reason_flow_removed_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5565 fr_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_async_config_prop_reason_flow_removed_mask
);
5567 proto_tree_add_item(fr_tree
, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_idle_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5568 proto_tree_add_item(fr_tree
, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_hard_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5569 proto_tree_add_item(fr_tree
, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5570 proto_tree_add_item(fr_tree
, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_group_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5571 proto_tree_add_item(fr_tree
, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_meter_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5572 proto_tree_add_item(fr_tree
, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_eviction
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5576 case OFPACPT_ROLE_STATUS_SLAVE
:
5577 case OFPACPT_ROLE_STATUS_MASTER
:
5578 /* uint32_t mask; */
5579 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_reason_role_status_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5580 rs_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_async_config_prop_reason_role_status_mask
);
5582 proto_tree_add_item(rs_tree
, hf_openflow_v5_async_config_prop_reason_role_status_mask_master_request
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5583 proto_tree_add_item(rs_tree
, hf_openflow_v5_async_config_prop_reason_role_status_mask_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5584 proto_tree_add_item(rs_tree
, hf_openflow_v5_async_config_prop_reason_role_status_mask_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5588 case OFPACPT_TABLE_STATUS_SLAVE
:
5589 case OFPACPT_TABLE_STATUS_MASTER
:
5590 /* uint32_t mask; */
5591 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_reason_table_status_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5592 ts_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_async_config_prop_reason_table_status_mask
);
5594 proto_tree_add_item(ts_tree
, hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5595 proto_tree_add_item(ts_tree
, hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_up
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5599 case OFPACPT_REQUESTFORWARD_SLAVE
:
5600 case OFPACPT_REQUESTFORWARD_MASTER
:
5601 /* uint32_t mask; */
5602 ti
= proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_reason_requestforward_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5603 rf_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_async_config_prop_reason_requestforward_mask
);
5605 proto_tree_add_item(rf_tree
, hf_openflow_v5_async_config_prop_reason_requestforward_mask_group_mod
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5606 proto_tree_add_item(rf_tree
, hf_openflow_v5_async_config_prop_reason_requestforward_mask_meter_mod
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5610 case OFPACPT_EXPERIMENTER_SLAVE
:
5611 case OFPACPT_EXPERIMENTER_MASTER
:
5612 if (prop_len
<= 12) {
5613 expert_add_info(pinfo
, prop_item
, &ei_openflow_v5_length_too_short
);
5617 /* uint32_t experimenter; */
5618 proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5621 /* uint32_t exp_type; */
5622 proto_tree_add_item(prop_tree
, hf_openflow_v5_async_config_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5625 /* uint32_t experimenter_data[0]; */
5626 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v5_async_config_prop_undecoded
,
5627 tvb
, offset
, prop_len
- 12, "Experimenter async config prop body.");
5628 offset
+= prop_len
- 12;
5632 if (prop_len
<= 4) {
5633 expert_add_info(pinfo
, prop_item
, &ei_openflow_v5_length_too_short
);
5637 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v5_async_config_prop_undecoded
,
5638 tvb
, offset
, prop_len
- 4, "Unknown async config prop body.");
5639 offset
+= prop_len
- 4;
5648 dissect_openflow_async_config_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5650 /* struct ofp_async_config_prop_header properties[0]; */
5651 while (offset
< length
) {
5652 offset
= dissect_openflow_async_config_prop_v5(tvb
, pinfo
, tree
, offset
, length
);
5658 static const value_string openflow_v5_metermod_command_values
[] = {
5660 { 1, "OFPMC_MODIFY" },
5661 { 2, "OFPMC_DELETE" },
5666 dissect_openflow_metermod_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5669 proto_tree
*flags_tree
;
5671 /* uint16_t command; */
5672 proto_tree_add_item(tree
, hf_openflow_v5_metermod_command
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5675 /* uint16_t flags; */
5676 ti
= proto_tree_add_item(tree
, hf_openflow_v5_metermod_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5677 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_metermod_flags
);
5679 proto_tree_add_item(flags_tree
, hf_openflow_v5_metermod_flags_kbps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5680 proto_tree_add_item(flags_tree
, hf_openflow_v5_metermod_flags_pktps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5681 proto_tree_add_item(flags_tree
, hf_openflow_v5_metermod_flags_burst
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5682 proto_tree_add_item(flags_tree
, hf_openflow_v5_metermod_flags_stats
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5685 /* uint32_t meter_id; */
5686 proto_tree_add_item(tree
, hf_openflow_v5_metermod_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5689 /* struct ofp_meter_band_header bands[0]; */
5690 while (offset
< length
) {
5691 offset
= dissect_openflow_meter_band_v5(tvb
, pinfo
, tree
, offset
, length
);
5695 #define OFPCRR_MASTER_REQUEST 0
5696 #define OFPCRR_CONFIG 1
5697 #define OFPCRR_EXPERIMENTER 2
5698 static const value_string openflow_v5_role_status_reason_values
[] = {
5699 { OFPCRR_MASTER_REQUEST
, "OFPCRR_MASTER_REQUEST" },
5700 { OFPCRR_CONFIG
, "OFPCRR_CONFIG" },
5701 { OFPCRR_EXPERIMENTER
, "OFPCRR_EXPERIMENTER" },
5706 dissect_openflow_role_status_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5708 /* uint32_t role; */
5709 proto_tree_add_item(tree
, hf_openflow_v5_role_status_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5712 /* uint8_t reason; */
5713 proto_tree_add_item(tree
, hf_openflow_v5_role_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5716 /* uint8_t pad[3]; */
5717 proto_tree_add_item(tree
, hf_openflow_v5_role_status_pad
, tvb
, offset
, 3, ENC_NA
);
5720 /* uint64_t generation_id; */
5721 proto_tree_add_item(tree
, hf_openflow_v5_role_status_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
5727 #define OFPTR_VACANCY_DOWN 3
5728 #define OFPTR_VACANCY_UP 4
5729 static const value_string openflow_v5_table_status_reason_values
[] = {
5730 { OFPTR_VACANCY_DOWN
, "OFPTR_VACANCY_DOWN" },
5731 { OFPTR_VACANCY_UP
, "OFPTR_VACANCY_UP" },
5736 dissect_openflow_table_status_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5738 /* uint8_t reason; */
5739 proto_tree_add_item(tree
, hf_openflow_v5_table_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5742 /* uint8_t pad[7]; */
5743 proto_tree_add_item(tree
, hf_openflow_v5_table_status_pad
, tvb
, offset
, 7, ENC_NA
);
5746 /* struct ofp_table_desc table; */
5747 dissect_openflow_table_desc_v5(tvb
, pinfo
, tree
, offset
, length
);
5751 // NOLINTNEXTLINE(misc-no-recursion)
5752 dissect_openflow_requestforward_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5755 proto_tree
*req_tree
;
5758 /* struct ofp_header request; */
5759 req_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_requestforward_request
, &ti
, "Request");
5762 offset
= dissect_openflow_message_v5(tvb
, pinfo
, req_tree
, offset
);
5764 proto_item_set_len(ti
, offset
- req_begin
);
5768 #define OFPBPT_EXPERIMENTER 0xFFFF
5769 static const value_string openflow_v5_bundle_prop_type_values
[] = {
5770 { OFPBPT_EXPERIMENTER
, "OFPBPT_EXPERIMENTER" },
5775 dissect_openflow_bundle_prop_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5777 proto_tree
*prop_tree
;
5778 proto_item
*prop_item
;
5782 prop_type
= tvb_get_ntohs(tvb
, offset
);
5783 prop_len
= tvb_get_ntohs(tvb
, offset
+ 2);
5785 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, prop_len
, ett_openflow_v5_bundle_prop
, NULL
, "Bundle prop");
5787 /* uint16_t type; */
5788 proto_tree_add_item(prop_tree
, hf_openflow_v5_bundle_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5790 /* uint16_t length; */
5791 prop_item
= proto_tree_add_item(prop_tree
, hf_openflow_v5_bundle_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5793 switch (prop_type
) {
5794 case OFPBPT_EXPERIMENTER
:
5795 if (prop_len
<= 12) {
5796 expert_add_info(pinfo
, prop_item
, &ei_openflow_v5_length_too_short
);
5800 /* uint32_t experimenter; */
5801 proto_tree_add_item(tree
, hf_openflow_v5_bundle_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5804 /* uint32_t exp_type; */
5805 proto_tree_add_item(tree
, hf_openflow_v5_bundle_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5808 /* uint32_t experimenter_data[0]; */
5809 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_bundle_prop_undecoded
,
5810 tvb
, offset
, prop_len
- 12, "Experimenter bundle prop body.");
5811 offset
+= prop_len
- 12;
5815 if (prop_len
<= 4) {
5816 expert_add_info(pinfo
, prop_item
, &ei_openflow_v5_length_too_short
);
5820 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_bundle_prop_undecoded
,
5821 tvb
, offset
, prop_len
- 4, "Unknown bundle prop body.");
5822 offset
+= prop_len
- 4;
5831 static const value_string openflow_v5_bundle_control_type_values
[] = {
5832 { 0, "OFPBCT_OPEN_REQUEST" },
5833 { 1, "OFPBCT_OPEN_REPLY" },
5834 { 2, "OFPBCT_CLOSE_REQUEST" },
5835 { 3, "OFPBCT_CLOSE_REPLY" },
5836 { 4, "OFPBCT_COMMIT_REQUEST" },
5837 { 5, "OFPBCT_COMMIT_REPLY" },
5838 { 6, "OFPBCT_DISCARD_REQUEST" },
5839 { 7, "OFPBCT_DISCARD_REPLY" },
5844 #define OFPBF_ATOMIC 1<<0
5845 #define OFPBF_ORDERED 1<<1
5847 static const value_string openflow_v5_bundle_control_flags
[] = {
5848 { OFPBF_ATOMIC
, "OFPBF_ATOMIC" },
5849 { OFPBF_ORDERED
, "OFPBF_ORDERED" },
5855 dissect_openflow_bundle_control_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5858 proto_tree
*flags_tree
;
5860 /* uint32_t bundle_id; */
5861 proto_tree_add_item(tree
, hf_openflow_v5_bundle_control_bundle_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5864 /* uint16_t type; */
5865 proto_tree_add_item(tree
, hf_openflow_v5_bundle_control_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5868 /* uint16_t flags; */
5869 ti
= proto_tree_add_item(tree
, hf_openflow_v5_bundle_control_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5870 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_bundle_control_flags
);
5872 proto_tree_add_item(flags_tree
, hf_openflow_v5_bundle_control_flags_atomic
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5873 proto_tree_add_item(flags_tree
, hf_openflow_v5_bundle_control_flags_ordered
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5876 /* struct ofp_bundle_prop_header properties[0]; */
5877 while (offset
< length
) {
5878 offset
= dissect_openflow_bundle_prop_v5(tvb
, pinfo
, tree
, offset
, length
);
5885 // NOLINTNEXTLINE(misc-no-recursion)
5886 dissect_openflow_bundle_add_v5(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
5889 proto_tree
*flags_tree
, *msg_tree
;
5892 /* uint32_t bundle_id; */
5893 proto_tree_add_item(tree
, hf_openflow_v5_bundle_add_bundle_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
5897 proto_tree_add_item(tree
, hf_openflow_v5_bundle_add_pad
, tvb
, offset
, 2, ENC_NA
);
5900 /* uint16_t flags; */
5901 ti
= proto_tree_add_item(tree
, hf_openflow_v5_bundle_add_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5902 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v5_bundle_add_flags
);
5904 proto_tree_add_item(flags_tree
, hf_openflow_v5_bundle_add_flags_atomic
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5905 proto_tree_add_item(flags_tree
, hf_openflow_v5_bundle_add_flags_ordered
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
5908 /* struct ofp_header message; */
5909 msg_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v5_bundle_add_message
, &ti
, "Message");
5912 offset
= dissect_openflow_message_v5(tvb
, pinfo
, msg_tree
, offset
);
5913 proto_item_set_len(ti
, offset
- msg_begin
);
5915 /* struct ofp_bundle_prop_header properties[0]; */
5916 while (offset
< length
) {
5917 offset
= dissect_openflow_bundle_prop_v5(tvb
, pinfo
, tree
, offset
, length
);
5924 // NOLINTNEXTLINE(misc-no-recursion)
5925 dissect_openflow_message_v5(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int offset
)
5931 type
= tvb_get_uint8(tvb
, offset
+ 1);
5932 length
= tvb_get_ntohs(tvb
, offset
+ 2);
5933 msg_end
= offset
+ length
;
5935 offset
= dissect_openflow_header_v5(tvb
, pinfo
, tree
, offset
, length
);
5939 dissect_openflow_hello_v5(tvb
, pinfo
, tree
, offset
, length
);
5942 dissect_openflow_error_v5(tvb
, pinfo
, tree
, offset
, length
);
5944 case OFPT_ECHO_REQUEST
:
5945 case OFPT_ECHO_REPLY
:
5946 dissect_openflow_echo_v5(tvb
, pinfo
, tree
, offset
, length
);
5948 case OFPT_EXPERIMENTER
:
5949 dissect_openflow_experimenter_v5(tvb
, pinfo
, tree
, offset
, length
);
5951 case OFPT_FEATURES_REQUEST
:
5952 /* message has no body */
5954 case OFPT_FEATURES_REPLY
:
5955 dissect_openflow_switch_features_v5(tvb
, pinfo
, tree
, offset
, length
);
5957 case OFPT_GET_CONFIG_REQUEST
:
5958 /* message has no body */
5960 case OFPT_GET_CONFIG_REPLY
:
5961 case OFPT_SET_CONFIG
:
5962 dissect_openflow_switch_config_v5(tvb
, pinfo
, tree
, offset
, length
);
5964 case OFPT_PACKET_IN
:
5965 dissect_openflow_packet_in_v5(tvb
, pinfo
, tree
, offset
, length
);
5967 case OFPT_FLOW_REMOVED
:
5968 dissect_openflow_flow_removed_v5(tvb
, pinfo
, tree
, offset
, length
);
5970 case OFPT_PORT_STATUS
:
5971 dissect_openflow_port_status_v5(tvb
, pinfo
, tree
, offset
, length
);
5973 case OFPT_PACKET_OUT
:
5974 dissect_openflow_packet_out_v5(tvb
, pinfo
, tree
, offset
, length
);
5977 dissect_openflow_flowmod_v5(tvb
, pinfo
, tree
, offset
, length
);
5979 case OFPT_GROUP_MOD
:
5980 dissect_openflow_groupmod_v5(tvb
, pinfo
, tree
, offset
, length
);
5983 dissect_openflow_portmod_v5(tvb
, pinfo
, tree
, offset
, length
);
5985 case OFPT_TABLE_MOD
:
5986 dissect_openflow_tablemod_v5(tvb
, pinfo
, tree
, offset
, length
);
5988 case OFPT_MULTIPART_REQUEST
:
5989 dissect_openflow_multipart_request_v5(tvb
, pinfo
, tree
, offset
, length
);
5991 case OFPT_MULTIPART_REPLY
:
5992 dissect_openflow_multipart_reply_v5(tvb
, pinfo
, tree
, offset
, length
);
5994 case OFPT_BARRIER_REQUEST
:
5995 case OFPT_BARRIER_REPLY
:
5996 /* message has no body */
5998 case OFPT_ROLE_REQUEST
:
5999 dissect_openflow_role_request_v5(tvb
, pinfo
, tree
, offset
, length
);
6001 case OFPT_ROLE_REPLY
:
6002 dissect_openflow_role_reply_v5(tvb
, pinfo
, tree
, offset
, length
);
6004 case OFPT_GET_ASYNC_REQUEST
:
6005 /* message has no body */
6007 case OFPT_GET_ASYNC_REPLY
:
6008 case OFPT_SET_ASYNC
:
6009 dissect_openflow_async_config_v5(tvb
, pinfo
, tree
, offset
, length
);
6011 case OFPT_METER_MOD
:
6012 dissect_openflow_metermod_v5(tvb
, pinfo
, tree
, offset
, length
);
6014 case OFPT_ROLE_STATUS
:
6015 dissect_openflow_role_status_v5(tvb
, pinfo
, tree
, offset
, length
);
6017 case OFPT_TABLE_STATUS
:
6018 dissect_openflow_table_status_v5(tvb
, pinfo
, tree
, offset
, length
);
6020 case OFPT_REQUESTFORWARD
:
6021 dissect_openflow_requestforward_v5(tvb
, pinfo
, tree
, offset
, length
);
6023 case OFPT_BUNDLE_CONTROL
:
6024 dissect_openflow_bundle_control_v5(tvb
, pinfo
, tree
, offset
, length
);
6026 case OFPT_BUNDLE_ADD_MESSAGE
:
6027 dissect_openflow_bundle_add_v5(tvb
, pinfo
, tree
, offset
, length
);
6032 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v5_message_undecoded
,
6033 tvb
, offset
, length
- 8, "Unknown message body.");
6044 dissect_openflow_v5(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
6047 proto_tree
*openflow_tree
;
6050 type
= tvb_get_uint8(tvb
, 1);
6052 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "Type: %s",
6053 val_to_str_ext_const(type
, &openflow_v5_type_values_ext
, "Unknown message type"));
6055 ti
= proto_tree_add_item(tree
, proto_openflow_v5
, tvb
, 0, -1, ENC_NA
);
6056 openflow_tree
= proto_item_add_subtree(ti
, ett_openflow_v5
);
6058 dissect_openflow_message_v5(tvb
, pinfo
, openflow_tree
, 0);
6060 return tvb_reported_length(tvb
);
6066 * Register the protocol with Wireshark.
6069 proto_register_openflow_v5(void)
6071 static hf_register_info hf
[] = {
6072 { &hf_openflow_v5_version
,
6073 { "Version", "openflow_v5.version",
6074 FT_UINT8
, BASE_HEX
, VALS(openflow_v5_version_values
), 0x0,
6077 { &hf_openflow_v5_type
,
6078 { "Type", "openflow_v5.type",
6079 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &openflow_v5_type_values_ext
, 0x0,
6082 { &hf_openflow_v5_xid
,
6083 { "Transaction ID", "openflow_v5.xid",
6084 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6087 { &hf_openflow_v5_length
,
6088 { "Length", "openflow_v5.length",
6089 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6092 { &hf_openflow_v5_oxm_class
,
6093 { "Class", "openflow_v5.oxm.class",
6094 FT_UINT16
, BASE_HEX
, VALS(openflow_v5_oxm_class_values
), 0x0,
6097 { &hf_openflow_v5_oxm_field
,
6098 { "Field", "openflow_v5.oxm.field",
6099 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6102 { &hf_openflow_v5_oxm_field_basic
,
6103 { "Field", "openflow_v5.oxm.field",
6104 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &openflow_v5_oxm_basic_field_values_ext
, 0x0,
6107 { &hf_openflow_v5_oxm_hm
,
6108 { "Has mask", "openflow_v5.oxm.hm",
6109 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
6112 { &hf_openflow_v5_oxm_length
,
6113 { "Length", "openflow_v5.oxm.length",
6114 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6117 { &hf_openflow_v5_oxm_experimenter_experimenter
,
6118 { "Experimenter", "openflow_v5.oxm_experimenter.experimenter",
6119 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6122 { &hf_openflow_v5_oxm_experimenter_value
,
6123 { "Experimenter Value", "openflow_v5.oxm_experimenter.value",
6124 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6127 { &hf_openflow_v5_oxm_value
,
6128 { "Value", "openflow_v5.oxm.value",
6129 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6132 { &hf_openflow_v5_oxm_value_etheraddr
,
6133 { "Value", "openflow_v5.oxm.value_etheraddr",
6134 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
6137 { &hf_openflow_v5_oxm_value_ethertype
,
6138 { "Value", "openflow_v5.oxm.value_ethertype",
6139 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6142 { &hf_openflow_v5_oxm_value_vlan_present
,
6143 { "OFPVID_PRESENT", "openflow_v5.oxm.value_vlan_present",
6144 FT_BOOLEAN
, 16, NULL
, OFPVID_PRESENT
,
6147 { &hf_openflow_v5_oxm_value_vlan_vid
,
6148 { "Value", "openflow_v5.oxm.value_vlan_vid",
6149 FT_UINT16
, BASE_DEC
, NULL
, 0x0fff,
6152 { &hf_openflow_v5_oxm_value_ipv4addr
,
6153 { "Value", "openflow_v5.oxm.value_ipv4addr",
6154 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
6157 { &hf_openflow_v5_oxm_value_ipv6addr
,
6158 { "Value", "openflow_v5.oxm.value_ipv6addr",
6159 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
6162 { &hf_openflow_v5_oxm_value_ipproto
,
6163 { "Value", "openflow_v5.oxm.value_ipproto",
6164 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &ipproto_val_ext
, 0x0,
6167 { &hf_openflow_v5_oxm_value_uint16
,
6168 { "Value", "openflow_v5.oxm.value_uint16",
6169 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6172 { &hf_openflow_v5_oxm_value_uint24
,
6173 { "Value", "openflow_v5.oxm.value_uint24",
6174 FT_UINT24
, BASE_DEC
, NULL
, 0x0,
6177 { &hf_openflow_v5_oxm_value_uint32
,
6178 { "Value", "openflow_v5.oxm.value_uint32",
6179 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6182 { &hf_openflow_v5_oxm_mask
,
6183 { "Mask", "openflow_v5.oxm.mask",
6184 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6187 { &hf_openflow_v5_oxm_mask_etheraddr
,
6188 { "Mask", "openflow_v5.oxm.ether_mask",
6189 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
6192 { &hf_openflow_v5_oxm_mask_ipv4addr
,
6193 { "Mask", "openflow_v5.oxm.ipv4_mask",
6194 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
6197 { &hf_openflow_v5_oxm_mask_ipv6addr
,
6198 { "Mask", "openflow_v5.oxm.ipv6_mask",
6199 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
6202 { &hf_openflow_v5_oxm_mask_vlan
,
6203 { "Mask", "openflow_v5.oxm.vlan_mask",
6204 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
6207 { &hf_openflow_v5_match_type
,
6208 { "Type", "openflow_v5.match.type",
6209 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_match_type_values
), 0x0,
6212 { &hf_openflow_v5_match_length
,
6213 { "Length", "openflow_v5.match.length",
6214 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6217 { &hf_openflow_v5_match_pad
,
6218 { "Pad", "openflow_v5.match.pad",
6219 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6222 { &hf_openflow_v5_action_type
,
6223 { "Type", "openflow_v5.action.type",
6224 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_action_type_values
), 0x0,
6227 { &hf_openflow_v5_action_length
,
6228 { "Length", "openflow_v5.action.length",
6229 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6232 { &hf_openflow_v5_action_experimenter_experimenter
,
6233 { "Experimenter", "openflow_v5.action_experimenter.experimenter",
6234 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6237 { &hf_openflow_v5_action_output_port
,
6238 { "Port", "openflow_v5.action.output.port",
6239 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
6242 { &hf_openflow_v5_action_output_max_len
,
6243 { "Max length", "openflow_v5.action.output.max_len",
6244 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_controller_max_len_reserved_values
), 0x0,
6247 { &hf_openflow_v5_action_output_pad
,
6248 { "Pad", "openflow_v5.action.output.pad",
6249 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6252 { &hf_openflow_v5_action_copy_ttl_out_pad
,
6253 { "Pad", "openflow_v5.action.copy_ttl_out.pad",
6254 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6257 { &hf_openflow_v5_action_copy_ttl_in_pad
,
6258 { "Pad", "openflow_v5.action.copy_ttl_in.pad",
6259 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6262 { &hf_openflow_v5_action_set_mpls_ttl_ttl
,
6263 { "TTL", "openflow_v5.action.set_mpls_ttl.ttl",
6264 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6267 { &hf_openflow_v5_action_set_mpls_ttl_pad
,
6268 { "Pad", "openflow_v5.action.set_mpls_ttl.pad",
6269 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6272 { &hf_openflow_v5_action_dec_mpls_ttl_pad
,
6273 { "Pad", "openflow_v5.action.dec_mpls_ttl.pad",
6274 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6277 { &hf_openflow_v5_action_push_vlan_ethertype
,
6278 { "Ethertype", "openflow_v5.action.push_vlan.ethertype",
6279 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6282 { &hf_openflow_v5_action_push_vlan_pad
,
6283 { "Pad", "openflow_v5.action.push_vlan.pad",
6284 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6287 { &hf_openflow_v5_action_pop_vlan_pad
,
6288 { "Pad", "openflow_v5.action.pop_vlan.pad",
6289 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6292 { &hf_openflow_v5_action_push_mpls_ethertype
,
6293 { "Ethertype", "openflow_v5.action.push_mpls.ethertype",
6294 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6297 { &hf_openflow_v5_action_push_mpls_pad
,
6298 { "Pad", "openflow_v5.action.push_mpls.pad",
6299 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6302 { &hf_openflow_v5_action_pop_mpls_ethertype
,
6303 { "Ethertype", "openflow_v5.action.pop_mpls.ethertype",
6304 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6307 { &hf_openflow_v5_action_pop_mpls_pad
,
6308 { "Pad", "openflow_v5.action.pop_mpls.pad",
6309 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6312 { &hf_openflow_v5_action_set_queue_queue_id
,
6313 { "Queue ID", "openflow_v5.action.set_queue.queue_id",
6314 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6317 { &hf_openflow_v5_action_group_group_id
,
6318 { "Group ID", "openflow_v5.action.group.group_id",
6319 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
6322 { &hf_openflow_v5_action_set_nw_ttl_ttl
,
6323 { "TTL", "openflow_v5.action.set_nw_ttl.ttl",
6324 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6327 { &hf_openflow_v5_action_set_nw_ttl_pad
,
6328 { "Pad", "openflow_v5.action.set_nw_ttl.pad",
6329 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6332 { &hf_openflow_v5_action_dec_nw_ttl_pad
,
6333 { "Pad", "openflow_v5.action.dec_nw_ttl.pad",
6334 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6337 { &hf_openflow_v5_action_set_field_pad
,
6338 { "Pad", "openflow_v5.action.set_field.pad",
6339 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6342 { &hf_openflow_v5_action_push_pbb_ethertype
,
6343 { "Ethertype", "openflow_v5.action.push_pbb.ethertype",
6344 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
6347 { &hf_openflow_v5_action_push_pbb_pad
,
6348 { "Pad", "openflow_v5.action.push_pbb.pad",
6349 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6352 { &hf_openflow_v5_action_pop_pbb_pad
,
6353 { "Pad", "openflow_v5.action.pop_pbb.pad",
6354 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6357 { &hf_openflow_v5_instruction_type
,
6358 { "Type", "openflow_v5.instruction.type",
6359 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_instruction_type_values
), 0x0,
6362 { &hf_openflow_v5_instruction_length
,
6363 { "Length", "openflow_v5.instruction.length",
6364 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6367 { &hf_openflow_v5_instruction_experimenter_experimenter
,
6368 { "Experimenter", "openflow_v5.instruction_experimenter.experimenter",
6369 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6372 { &hf_openflow_v5_instruction_goto_table_table_id
,
6373 { "Table ID", "openflow_v5.instruction.goto_table.table_id",
6374 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6377 { &hf_openflow_v5_instruction_goto_table_pad
,
6378 { "Pad", "openflow_v5.instruction.goto_table.pad",
6379 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6382 { &hf_openflow_v5_instruction_write_metadata_pad
,
6383 { "Pad", "openflow_v5.instruction.write_metadata.pad",
6384 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6387 { &hf_openflow_v5_instruction_write_metadata_value
,
6388 { "Value", "openflow_v5.instruction.write_metadata.value",
6389 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
6392 { &hf_openflow_v5_instruction_write_metadata_mask
,
6393 { "Mask", "openflow_v5.instruction.write_metadata.mask",
6394 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
6397 { &hf_openflow_v5_instruction_actions_pad
,
6398 { "Pad", "openflow_v5.instruction.actions.pad",
6399 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6402 { &hf_openflow_v5_instruction_meter_meter_id
,
6403 { "Meter ID", "openflow_v5.instruction.meter.meter_id",
6404 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_meter_id_reserved_values
), 0x0,
6407 { &hf_openflow_v5_port_desc_prop_type
,
6408 { "Type", "openflow_v5.port.desc_prop.type",
6409 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_port_desc_prop_type_values
), 0x0,
6412 { &hf_openflow_v5_port_desc_prop_length
,
6413 { "Length", "openflow_v5.port.desc_prop.length",
6414 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6417 { &hf_openflow_v5_port_desc_prop_ethernet_pad
,
6418 { "Pad", "openflow_v5.port.desc_prop.ethernet.pad",
6419 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6422 { &hf_openflow_v5_port_desc_prop_ethernet_current
,
6423 { "Current", "openflow_v5.port.desc_prop.ethernet.current",
6424 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6427 { &hf_openflow_v5_port_desc_prop_ethernet_current_10mb_hd
,
6428 { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.current.10mb_hd",
6429 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
6432 { &hf_openflow_v5_port_desc_prop_ethernet_current_10mb_fd
,
6433 { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.current.10mb_fd",
6434 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
6437 { &hf_openflow_v5_port_desc_prop_ethernet_current_100mb_hd
,
6438 { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.current.100mb_hd",
6439 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
6442 { &hf_openflow_v5_port_desc_prop_ethernet_current_100mb_fd
,
6443 { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.current.100mb_fd",
6444 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
6447 { &hf_openflow_v5_port_desc_prop_ethernet_current_1gb_hd
,
6448 { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.current.1gb_hd",
6449 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
6452 { &hf_openflow_v5_port_desc_prop_ethernet_current_1gb_fd
,
6453 { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.current.1gb_fd",
6454 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
6457 { &hf_openflow_v5_port_desc_prop_ethernet_current_10gb_fd
,
6458 { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.current.10gb_fd",
6459 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
6462 { &hf_openflow_v5_port_desc_prop_ethernet_current_40gb_fd
,
6463 { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.current.40gb_fd",
6464 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
6467 { &hf_openflow_v5_port_desc_prop_ethernet_current_100gb_fd
,
6468 { "OFPPF_100_GB_FD", "openflow_v5.port.desc_prop.ethernet.current.100_gb_fd",
6469 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
6472 { &hf_openflow_v5_port_desc_prop_ethernet_current_1tb_fd
,
6473 { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.current.1tb_fd",
6474 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
6477 { &hf_openflow_v5_port_desc_prop_ethernet_current_other
,
6478 { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.current.other",
6479 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
6482 { &hf_openflow_v5_port_desc_prop_ethernet_current_copper
,
6483 { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.current.copper",
6484 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
6487 { &hf_openflow_v5_port_desc_prop_ethernet_current_fiber
,
6488 { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.current.fiber",
6489 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
6492 { &hf_openflow_v5_port_desc_prop_ethernet_current_autoneg
,
6493 { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.current.autoneg",
6494 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
6497 { &hf_openflow_v5_port_desc_prop_ethernet_current_pause
,
6498 { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.current.pause",
6499 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
6502 { &hf_openflow_v5_port_desc_prop_ethernet_current_pause_asym
,
6503 { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.current.pause_asym",
6504 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
6507 { &hf_openflow_v5_port_desc_prop_ethernet_advertised
,
6508 { "Advertised", "openflow_v5.port.desc_prop.ethernet.advertised",
6509 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6512 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_hd
,
6513 { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.advertised.10mb_hd",
6514 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
6517 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_fd
,
6518 { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.10mb_fd",
6519 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
6522 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_hd
,
6523 { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.advertised.100mb_hd",
6524 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
6527 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_fd
,
6528 { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.100mb_fd",
6529 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
6532 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_hd
,
6533 { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.advertised.1gb_hd",
6534 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
6537 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_fd
,
6538 { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.1gb_fd",
6539 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
6542 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_10gb_fd
,
6543 { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.10gb_fd",
6544 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
6547 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_40gb_fd
,
6548 { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.40gb_fd",
6549 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
6552 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_100gb_fd
,
6553 { "OFPPF_100GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.100gb_fd",
6554 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
6557 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_1tb_fd
,
6558 { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.1tb_fd",
6559 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
6562 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_other
,
6563 { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.advertised.other",
6564 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
6567 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_copper
,
6568 { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.advertised.copper",
6569 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
6572 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_fiber
,
6573 { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.advertised.fiber",
6574 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
6577 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_autoneg
,
6578 { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.advertised.autoneg",
6579 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
6582 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_pause
,
6583 { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.advertised.pause",
6584 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
6587 { &hf_openflow_v5_port_desc_prop_ethernet_advertised_pause_asym
,
6588 { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.advertised.pause_asym",
6589 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
6592 { &hf_openflow_v5_port_desc_prop_ethernet_supported
,
6593 { "Supported", "openflow_v5.port.desc_prop.ethernet.supported",
6594 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6597 { &hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_hd
,
6598 { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.supported.10mb_hd",
6599 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
6602 { &hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_fd
,
6603 { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.supported.10mb_fd",
6604 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
6607 { &hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_hd
,
6608 { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.supported.100mb_hd",
6609 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
6612 { &hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_fd
,
6613 { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.supported.100mb_fd",
6614 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
6617 { &hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_hd
,
6618 { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.supported.1gb_hd",
6619 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
6622 { &hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_fd
,
6623 { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.1gb_fd",
6624 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
6627 { &hf_openflow_v5_port_desc_prop_ethernet_supported_10gb_fd
,
6628 { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.10gb_fd",
6629 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
6632 { &hf_openflow_v5_port_desc_prop_ethernet_supported_40gb_fd
,
6633 { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.40gb_fd",
6634 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
6637 { &hf_openflow_v5_port_desc_prop_ethernet_supported_100gb_fd
,
6638 { "OFPPF_100GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.100gb_fd",
6639 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
6642 { &hf_openflow_v5_port_desc_prop_ethernet_supported_1tb_fd
,
6643 { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.supported.1tb_fd",
6644 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
6647 { &hf_openflow_v5_port_desc_prop_ethernet_supported_other
,
6648 { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.supported.other",
6649 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
6652 { &hf_openflow_v5_port_desc_prop_ethernet_supported_copper
,
6653 { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.supported.copper",
6654 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
6657 { &hf_openflow_v5_port_desc_prop_ethernet_supported_fiber
,
6658 { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.supported.fiber",
6659 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
6662 { &hf_openflow_v5_port_desc_prop_ethernet_supported_autoneg
,
6663 { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.supported.autoneg",
6664 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
6667 { &hf_openflow_v5_port_desc_prop_ethernet_supported_pause
,
6668 { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.supported.pause",
6669 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
6672 { &hf_openflow_v5_port_desc_prop_ethernet_supported_pause_asym
,
6673 { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.supported.pause_asym",
6674 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
6677 { &hf_openflow_v5_port_desc_prop_ethernet_peer
,
6678 { "Peer", "openflow_v5.port.desc_prop.ethernet.peer",
6679 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6682 { &hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_hd
,
6683 { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.peer.10mb_hd",
6684 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
6687 { &hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_fd
,
6688 { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.peer.10mb_fd",
6689 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
6692 { &hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_hd
,
6693 { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.peer.100mb_hd",
6694 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
6697 { &hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_fd
,
6698 { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.peer.100mb_fd",
6699 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
6702 { &hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_hd
,
6703 { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.peer.1gb_hd",
6704 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
6707 { &hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_fd
,
6708 { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.1gb_fd",
6709 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
6712 { &hf_openflow_v5_port_desc_prop_ethernet_peer_10gb_fd
,
6713 { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.10gb_fd",
6714 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
6717 { &hf_openflow_v5_port_desc_prop_ethernet_peer_40gb_fd
,
6718 { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.40gb_fd",
6719 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
6722 { &hf_openflow_v5_port_desc_prop_ethernet_peer_100gb_fd
,
6723 { "OFPPF_100GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.100gb_fd",
6724 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
6727 { &hf_openflow_v5_port_desc_prop_ethernet_peer_1tb_fd
,
6728 { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.peer.1tb_fd",
6729 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
6732 { &hf_openflow_v5_port_desc_prop_ethernet_peer_other
,
6733 { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.peer.other",
6734 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
6737 { &hf_openflow_v5_port_desc_prop_ethernet_peer_copper
,
6738 { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.peer.copper",
6739 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
6742 { &hf_openflow_v5_port_desc_prop_ethernet_peer_fiber
,
6743 { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.peer.fiber",
6744 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
6747 { &hf_openflow_v5_port_desc_prop_ethernet_peer_autoneg
,
6748 { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.peer.autoneg",
6749 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
6752 { &hf_openflow_v5_port_desc_prop_ethernet_peer_pause
,
6753 { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.peer.pause",
6754 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
6757 { &hf_openflow_v5_port_desc_prop_ethernet_peer_pause_asym
,
6758 { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.peer.pause_asym",
6759 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
6762 { &hf_openflow_v5_port_desc_prop_ethernet_curr_speed
,
6763 { "Curr speed", "openflow_v5.port.desc_prop.ethernet.curr_speed",
6764 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6767 { &hf_openflow_v5_port_desc_prop_ethernet_max_speed
,
6768 { "Max speed", "openflow_v5.port.desc_prop.ethernet.max_speed",
6769 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6772 { &hf_openflow_v5_port_desc_prop_optical_pad
,
6773 { "Pad", "openflow_v5.port.desc_prop.optical.pad",
6774 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6777 { &hf_openflow_v5_port_desc_prop_optical_supported
,
6778 { "Supported", "openflow_v5.port.desc_prop.optical.supported",
6779 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6782 { &hf_openflow_v5_port_desc_prop_optical_supported_rx_tune
,
6783 { "OFPOPF_RX_TUNE", "openflow_v5.port.desc_prop.optical.supported.rx_tune",
6784 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_RX_TUNE
,
6787 { &hf_openflow_v5_port_desc_prop_optical_supported_tx_tune
,
6788 { "OFPOPF_TX_TUNE", "openflow_v5.port.desc_prop.optical.supported.tx_tune",
6789 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_TUNE
,
6792 { &hf_openflow_v5_port_desc_prop_optical_supported_tx_pwr
,
6793 { "OFPOPF_TX_PWR", "openflow_v5.port.desc_prop.optical.supported.tx_pwr",
6794 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_PWR
,
6797 { &hf_openflow_v5_port_desc_prop_optical_supported_use_freq
,
6798 { "OFPOPF_USE_FREQ", "openflow_v5.port.desc_prop.optical.supported.use_freq",
6799 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_USE_FREQ
,
6802 { &hf_openflow_v5_port_desc_prop_optical_tx_min_freq_lmda
,
6803 { "Tx. Min. Freq. Lambda", "openflow_v5.port.desc_prop.optical.tx_min_freq_lmda",
6804 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6807 { &hf_openflow_v5_port_desc_prop_optical_tx_max_freq_lmda
,
6808 { "Tx. Max. Freq. Lambda", "openflow_v5.port.desc_prop.optical.tx_max_freq_lmda",
6809 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6812 { &hf_openflow_v5_port_desc_prop_optical_tx_grid_freq_lmda
,
6813 { "Tx. Grid Freq. Lambda", "openflow_v5.port.desc_prop.optical.tx_grid_freq_lmda",
6814 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6817 { &hf_openflow_v5_port_desc_prop_optical_rx_min_freq_lmda
,
6818 { "Rx. Min. Freq. Lambda", "openflow_v5.port.desc_prop.optical.rx_min_freq_lmda",
6819 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6822 { &hf_openflow_v5_port_desc_prop_optical_rx_max_freq_lmda
,
6823 { "Rx. Max. Freq Lambda", "openflow_v5.port.desc_prop.optical.rx_max_freq_lmda",
6824 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6827 { &hf_openflow_v5_port_desc_prop_optical_rx_grid_freq_lmda
,
6828 { "Rx. Grid Freq. Lambda", "openflow_v5.port.desc_prop.optical.rx_grid_freq_lambda",
6829 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6832 { &hf_openflow_v5_port_desc_prop_optical_tx_pwr_min
,
6833 { "Tx. Power Min.", "openflow_v5.port.desc_prop.optical.tx_pwr_min",
6834 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6837 { &hf_openflow_v5_port_desc_prop_optical_tx_pwr_max
,
6838 { "Tx. Power Max.", "openflow_v5.port.desc_prop.optical.tx_pwr_max",
6839 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6842 { &hf_openflow_v5_port_desc_prop_experimenter_experimenter
,
6843 { "Experimenter", "openflow_v5.port_desc_prop.experimenter.experimenter",
6844 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6847 { &hf_openflow_v5_port_desc_prop_experimenter_exp_type
,
6848 { "Exp. type", "openflow_v5.port_desc_prop.experimenter.exp_type",
6849 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6852 { &hf_openflow_v5_port_stats_prop_type
,
6853 { "Type", "openflow_v5.port.stats_prop.type",
6854 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_port_stats_prop_type_values
), 0x0,
6857 { &hf_openflow_v5_port_stats_prop_length
,
6858 { "Length", "openflow_v5.port.stats_prop.length",
6859 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6862 { &hf_openflow_v5_port_stats_prop_ethernet_pad
,
6863 { "Pad", "openflow_v5.port.stats_prop.ethernet.pad",
6864 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6867 { &hf_openflow_v5_port_stats_prop_ethernet_rx_frame_err
,
6868 { "Rx. Frame Error", "openflow_v5.port.stats_prop.ethernet.rx_frame_err",
6869 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6872 { &hf_openflow_v5_port_stats_prop_ethernet_rx_over_err
,
6873 { "Rx. Over Error", "openflow_v5.port.stats_prop.ethernet.rx_over_err",
6874 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6877 { &hf_openflow_v5_port_stats_prop_ethernet_rx_crc_err
,
6878 { "Rx. CRC Error", "openflow_v5.port.stats_prop.ethernet.rx_crc_err",
6879 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6882 { &hf_openflow_v5_port_stats_prop_ethernet_collisions
,
6883 { "Collisions", "openflow_v5.port.stats_prop.ethernet.collisions",
6884 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6887 { &hf_openflow_v5_port_stats_prop_optical_pad
,
6888 { "Pad", "openflow_v5.port.stats_prop.optical.pad",
6889 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6892 { &hf_openflow_v5_port_stats_prop_optical_flags
,
6893 { "Flags", "openflow_v5.port.desc_prop.optical.supported",
6894 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6897 { &hf_openflow_v5_port_stats_prop_optical_flags_rx_tune
,
6898 { "OFPOSF_RX_TUNE", "openflow_v5.port.stats_prop.optical.flags.rx_tune",
6899 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_RX_TUNE
,
6902 { &hf_openflow_v5_port_stats_prop_optical_flags_tx_tune
,
6903 { "OFPOSF_TX_TUNE", "openflow_v5.port.stats_prop.optical.flags.tx_tune",
6904 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_TUNE
,
6907 { &hf_openflow_v5_port_stats_prop_optical_flags_tx_pwr
,
6908 { "OFPOSF_TX_PWR", "openflow_v5.port.stats_prop.optical.flags.tx_pwr",
6909 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_PWR
,
6912 { &hf_openflow_v5_port_stats_prop_optical_flags_rx_pwr
,
6913 { "OFPOSF_RX_PWR", "openflow_v5.port.stats_prop.optical.flags.rx_pwr",
6914 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_RX_PWR
,
6917 { &hf_openflow_v5_port_stats_prop_optical_flags_tx_bias
,
6918 { "OFPOSF_TX_BIAS", "openflow_v5.port.stats_prop.optical.flags.tx_bias",
6919 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_BIAS
,
6922 { &hf_openflow_v5_port_stats_prop_optical_flags_tx_temp
,
6923 { "OFPOSF_TX_TEMP", "openflow_v5.port.stats_prop.optical.flags.tx_temp",
6924 FT_UINT32
, BASE_HEX
, NULL
, OFPOSF_TX_TEMP
,
6927 { &hf_openflow_v5_port_stats_prop_optical_tx_freq_lmda
,
6928 { "Tx. Freq. Lambda", "openflow_v5.port.stats_prop.optical.tx_freq_lmda",
6929 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6932 { &hf_openflow_v5_port_stats_prop_optical_tx_offset
,
6933 { "Tx. Offset", "openflow_v5.port.stats_prop.optical.tx_offset",
6934 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6937 { &hf_openflow_v5_port_stats_prop_optical_tx_grid_span
,
6938 { "Tx. Grid Spacing", "openflow_v5.port.stats_prop.optical.tx_grid_span",
6939 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6942 { &hf_openflow_v5_port_stats_prop_optical_rx_freq_lmda
,
6943 { "Rx. Freq. Lambda", "openflow_v5.port.stats_prop.optical.rx_freq_lmda",
6944 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6947 { &hf_openflow_v5_port_stats_prop_optical_rx_offset
,
6948 { "Rx. Offset", "openflow_v5.port.stats_prop.optical.rx_offset",
6949 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6952 { &hf_openflow_v5_port_stats_prop_optical_rx_grid_span
,
6953 { "Rx. Grid Spacing", "openflow_v5.port.stats_prop.optical.rx_grid_span",
6954 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6957 { &hf_openflow_v5_port_stats_prop_optical_tx_pwr
,
6958 { "Tx. Power", "openflow_v5.port.stats_prop.optical.tx_pwr",
6959 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6962 { &hf_openflow_v5_port_stats_prop_optical_rx_pwr
,
6963 { "Rx. Power", "openflow_v5.port.stats_prop.optical.rx_pwr",
6964 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6967 { &hf_openflow_v5_port_stats_prop_optical_bias_current
,
6968 { "Tx. Bias Current", "openflow_v5.port.stats_prop.optical.bias_current",
6969 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6972 { &hf_openflow_v5_port_stats_prop_optical_temperature
,
6973 { "Tx. Laser Temperature", "openflow_v5.port.stats_prop.optical.temperature",
6974 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6977 { &hf_openflow_v5_port_stats_prop_experimenter_experimenter
,
6978 { "Experimenter", "openflow_v5.port_stats_prop.experimenter.experimenter",
6979 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6982 { &hf_openflow_v5_port_stats_prop_experimenter_exp_type
,
6983 { "Exp. type", "openflow_v5.port_stats_prop.experimenter.exp_type",
6984 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6987 { &hf_openflow_v5_port_port_no
,
6988 { "Port no", "openflow_v5.port.port_no",
6989 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
6992 { &hf_openflow_v5_port_pad
,
6993 { "Pad", "openflow_v5.port.pad",
6994 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6997 { &hf_openflow_v5_port_length
,
6998 { "Length", "openflow_v5.port.length",
6999 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7002 { &hf_openflow_v5_port_hw_addr
,
7003 { "Hw addr", "openflow_v5.port.hw_addr",
7004 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
7007 { &hf_openflow_v5_port_pad2
,
7008 { "Pad2", "openflow_v5.port.pad2",
7009 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7012 { &hf_openflow_v5_port_name
,
7013 { "Name", "openflow_v5.port.name",
7014 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7017 { &hf_openflow_v5_port_config
,
7018 { "Config", "openflow_v5.port.config",
7019 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7022 { &hf_openflow_v5_port_config_port_down
,
7023 { "OFPPC_PORT_DOWN", "openflow_v5.port.config.port_down",
7024 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
7027 { &hf_openflow_v5_port_config_no_recv
,
7028 { "OFPPC_NO_RECV", "openflow_v5.port.config.no_recv",
7029 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
7032 { &hf_openflow_v5_port_config_no_fwd
,
7033 { "OFPPC_NO_FWD", "openflow_v5.port.config.no_fwd",
7034 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
7037 { &hf_openflow_v5_port_config_no_packet_in
,
7038 { "OFPPC_NO_PACKET_IN", "openflow_v5.port.config.no_packet_in",
7039 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
7042 { &hf_openflow_v5_port_state
,
7043 { "State", "openflow_v5.port.sate",
7044 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7047 { &hf_openflow_v5_port_state_link_down
,
7048 { "OFPPS_LINK_DOWN", "openflow_v5.port.state.link_down",
7049 FT_BOOLEAN
, 32, NULL
, OFPPS_LINK_DOWN
,
7052 { &hf_openflow_v5_port_state_blocked
,
7053 { "OFPPS_BLOCKED", "openflow_v5.port.state.blocked",
7054 FT_BOOLEAN
, 32, NULL
, OFPPS_BLOCKED
,
7057 { &hf_openflow_v5_port_state_live
,
7058 { "OFPPS_LIVE", "openflow_v5.port.state.live",
7059 FT_BOOLEAN
, 32, NULL
, OFPPS_LIVE
,
7062 { &hf_openflow_v5_meter_band_type
,
7063 { "Type", "openflow_v5.meter_band.type",
7064 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_meter_band_type_values
), 0x0,
7067 { &hf_openflow_v5_meter_band_len
,
7068 { "Length", "openflow_v5.meter_band.length",
7069 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7072 { &hf_openflow_v5_meter_band_rate
,
7073 { "Rate", "openflow_v5.meter_band.rate",
7074 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7077 { &hf_openflow_v5_meter_band_burst_size
,
7078 { "Burst size", "openflow_v5.meter_band.burst_size",
7079 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7082 { &hf_openflow_v5_meter_band_drop_pad
,
7083 { "Pad", "openflow_v5.meter_band.drop.pad",
7084 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7087 { &hf_openflow_v5_meter_band_dscp_remark_prec_level
,
7088 { "Precedence level", "openflow_v5.meter_band.dscp_remark.prec_level",
7089 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7092 { &hf_openflow_v5_meter_band_dscp_remark_pad
,
7093 { "Pad", "openflow_v5.meter_band.dscp_remark.pad",
7094 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7097 { &hf_openflow_v5_meter_band_experimenter_experimenter
,
7098 { "Experimenter", "openflow_v5.meter_band.experimenter.experimenter",
7099 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7102 { &hf_openflow_v5_hello_element_type
,
7103 { "Type", "openflow_v5.hello_element.type",
7104 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_hello_element_type_values
), 0x0,
7107 { &hf_openflow_v5_hello_element_length
,
7108 { "Length", "openflow_v5.hello_element.length",
7109 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7112 { &hf_openflow_v5_hello_element_version_bitmap
,
7113 { "Bitmap", "openflow_v5.hello_element.version.bitmap",
7114 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7117 { &hf_openflow_v5_hello_element_pad
,
7118 { "Pad", "openflow_v5.hello_element.pad",
7119 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7122 { &hf_openflow_v5_error_type
,
7123 { "Type", "openflow_v5.error.type",
7124 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_type_values
), 0x0,
7127 { &hf_openflow_v5_error_hello_failed_code
,
7128 { "Code", "openflow_v5.error.code",
7129 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_hello_failed_code_values
), 0x0,
7132 { &hf_openflow_v5_error_bad_request_code
,
7133 { "Code", "openflow_v5.error.code",
7134 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_bad_request_code_values
), 0x0,
7137 { &hf_openflow_v5_error_bad_action_code
,
7138 { "Code", "openflow_v5.error.code",
7139 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_bad_action_code_values
), 0x0,
7142 { &hf_openflow_v5_error_bad_instruction_code
,
7143 { "Code", "openflow_v5.error.code",
7144 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_bad_instruction_code_values
), 0x0,
7147 { &hf_openflow_v5_error_bad_match_code
,
7148 { "Code", "openflow_v5.error.code",
7149 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_bad_match_code_values
), 0x0,
7152 { &hf_openflow_v5_error_flow_mod_failed_code
,
7153 { "Code", "openflow_v5.error.code",
7154 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_flow_mod_failed_code_values
), 0x0,
7157 { &hf_openflow_v5_error_group_mod_failed_code
,
7158 { "Code", "openflow_v5.error.code",
7159 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_group_mod_failed_code_values
), 0x0,
7162 { &hf_openflow_v5_error_port_mod_failed_code
,
7163 { "Code", "openflow_v5.error.code",
7164 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_port_mod_failed_code_values
), 0x0,
7167 { &hf_openflow_v5_error_table_mod_failed_code
,
7168 { "Code", "openflow_v5.error.code",
7169 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_table_mod_failed_code_values
), 0x0,
7172 { &hf_openflow_v5_error_queue_op_failed_code
,
7173 { "Code", "openflow_v5.error.code",
7174 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_queue_op_failed_code_values
), 0x0,
7177 { &hf_openflow_v5_error_switch_config_failed_code
,
7178 { "Code", "openflow_v5.error.code",
7179 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_switch_config_failed_code_values
), 0x0,
7182 { &hf_openflow_v5_error_role_request_failed_code
,
7183 { "Code", "openflow_v5.error.code",
7184 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_role_request_failed_code_values
), 0x0,
7187 { &hf_openflow_v5_error_meter_mod_failed_code
,
7188 { "Code", "openflow_v5.error.code",
7189 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_meter_mod_failed_code_values
), 0x0,
7192 { &hf_openflow_v5_error_table_features_failed_code
,
7193 { "Code", "openflow_v5.error.code",
7194 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_table_features_failed_code_values
), 0x0,
7197 { &hf_openflow_v5_error_bad_property_code
,
7198 { "Code", "openflow_v5.error.code",
7199 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_bad_property_code_values
), 0x0,
7202 { &hf_openflow_v5_error_async_config_failed_code
,
7203 { "Code", "openflow_v5.error.code",
7204 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_async_config_failed_code_values
), 0x0,
7207 { &hf_openflow_v5_error_flow_monitor_failed_code
,
7208 { "Code", "openflow_v5.error.code",
7209 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_flow_monitor_failed_code_values
), 0x0,
7212 { &hf_openflow_v5_error_bundle_failed_code
,
7213 { "Code", "openflow_v5.error.code",
7214 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_error_bundle_failed_code_values
), 0x0,
7217 { &hf_openflow_v5_error_code
,
7218 { "Code", "openflow_v5.error.code",
7219 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7222 { &hf_openflow_v5_error_data_text
,
7223 { "Data", "openflow_v5.error.data",
7224 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7227 { &hf_openflow_v5_echo_data
,
7228 { "Data", "openflow_v5.echo.data",
7229 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7232 { &hf_openflow_v5_error_data_body
,
7233 { "Body", "openflow_v5.error.data.body",
7234 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7237 { &hf_openflow_v5_error_experimenter
,
7238 { "Experimenter", "openflow_v5.error.experimenter",
7239 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7242 { &hf_openflow_v5_experimenter_experimenter
,
7243 { "Experimenter", "openflow_v5.experimenter.experimenter",
7244 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7247 { &hf_openflow_v5_experimenter_exp_type
,
7248 { "Experimenter type", "openflow_v5.experimenter.exp_type",
7249 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7252 { &hf_openflow_v5_switch_features_datapath_id
,
7253 { "datapath_id", "openflow_v5.switch_features.datapath_id",
7254 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7257 { &hf_openflow_v5_switch_features_n_buffers
,
7258 { "n_buffers", "openflow_v5.switch_features.n_buffers",
7259 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7262 { &hf_openflow_v5_switch_features_n_tables
,
7263 { "n_tables", "openflow_v5.switch_features.n_tables",
7264 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7267 { &hf_openflow_v5_switch_features_auxiliary_id
,
7268 { "auxiliary_id", "openflow_v5.switch_features.auxiliary_id",
7269 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7272 { &hf_openflow_v5_switch_features_pad
,
7273 { "Pad", "openflow_v5.switch_features.pad",
7274 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7277 { &hf_openflow_v5_switch_features_capabilities
,
7278 { "capabilities", "openflow_v5.switch_features.capabilities",
7279 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7282 { &hf_openflow_v5_switch_features_capabilities_flow_stats
,
7283 { "OFPC_FLOW_STATS", "openflow_v5.switch_features.capabilities.flow_stats",
7284 FT_BOOLEAN
, 32, NULL
, OFPC_FLOW_STATS
,
7287 { &hf_openflow_v5_switch_features_capabilities_table_stats
,
7288 { "OFPC_TABLE_STATS", "openflow_v5.switch_features.capabilities.table_stats",
7289 FT_BOOLEAN
, 32, NULL
, OFPC_TABLE_STATS
,
7292 { &hf_openflow_v5_switch_features_capabilities_port_stats
,
7293 { "OFPC_PORT_STATS", "openflow_v5.switch_features.capabilities.port_stats",
7294 FT_BOOLEAN
, 32, NULL
, OFPC_PORT_STATS
,
7297 { &hf_openflow_v5_switch_features_capabilities_group_stats
,
7298 { "OFPC_GROUP_STATS", "openflow_v5.switch_features.capabilities.group_stats",
7299 FT_BOOLEAN
, 32, NULL
, OFPC_GROUP_STATS
,
7302 { &hf_openflow_v5_switch_features_capabilities_ip_reasm
,
7303 { "OFPC_IP_REASM", "openflow_v5.switch_features.capabilities.ip_reasm",
7304 FT_BOOLEAN
, 32, NULL
, OFPC_IP_REASM
,
7307 { &hf_openflow_v5_switch_features_capabilities_queue_stats
,
7308 { "OFPC_QUEUE_STATS", "openflow_v5.switch_features.capabilities.queue_stats",
7309 FT_BOOLEAN
, 32, NULL
, OFPC_QUEUE_STATS
,
7312 { &hf_openflow_v5_switch_features_capabilities_port_blocked
,
7313 { "OFPC_PORT_BLOCKED", "openflow_v5.switch_features.capabilities.port_blocked",
7314 FT_BOOLEAN
, 32, NULL
, OFPC_PORT_BLOCKED
,
7317 { &hf_openflow_v5_switch_features_reserved
,
7318 { "Reserved", "openflow_v5.switch_features_reserved",
7319 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7322 { &hf_openflow_v5_switch_config_flags
,
7323 { "Flags", "openflow_v5.switch_config.flags",
7324 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
7327 { &hf_openflow_v5_switch_config_flags_fragments
,
7328 { "IP Fragments", "openflow_v5.switch_config.flags.fragments",
7329 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_switch_config_fragments_values
), 0x0,
7332 { &hf_openflow_v5_switch_config_miss_send_len
,
7333 { "Miss send length", "openflow_v5.switch_config.miss_send_len",
7334 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_controller_max_len_reserved_values
), 0x0,
7337 { &hf_openflow_v5_packet_in_buffer_id
,
7338 { "Buffer ID", "openflow_v5.packet_in.buffer_id",
7339 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_buffer_reserved_values
), 0x0,
7342 { &hf_openflow_v5_packet_in_total_len
,
7343 { "Total length", "openflow_v5.packet_in.total_len",
7344 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7347 { &hf_openflow_v5_packet_in_reason
,
7348 { "Reason", "openflow_v5.packet_in.reason",
7349 FT_UINT8
, BASE_DEC
, VALS(openflow_v5_packet_in_reason_values
), 0x0,
7352 { &hf_openflow_v5_packet_in_table_id
,
7353 { "Table ID", "openflow_v5.packet_in.table_id",
7354 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7357 { &hf_openflow_v5_packet_in_cookie
,
7358 { "Cookie", "openflow_v5.packet_in.cookie",
7359 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7362 { &hf_openflow_v5_packet_in_pad
,
7363 { "Pad", "openflow_v5.packet_in.pad",
7364 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7367 { &hf_openflow_v5_flow_removed_cookie
,
7368 { "Cookie", "openflow_v5.flow_removed.cookie",
7369 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7372 { &hf_openflow_v5_flow_removed_priority
,
7373 { "Priority", "openflow_v5.flow_removed.priority",
7374 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7377 { &hf_openflow_v5_flow_removed_reason
,
7378 { "Reason", "openflow_v5.flow_removed.reason",
7379 FT_UINT8
, BASE_DEC
, VALS(openflow_v5_flow_removed_reason_values
), 0x0,
7382 { &hf_openflow_v5_flow_removed_table_id
,
7383 { "Table ID", "openflow_v5.flow_removed.table_id",
7384 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7387 { &hf_openflow_v5_flow_removed_duration_sec
,
7388 { "Duration sec", "openflow_v5.flow_removed.duration_sec",
7389 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7392 { &hf_openflow_v5_flow_removed_duration_nsec
,
7393 { "Duration nsec", "openflow_v5.flow_removed.duration_nsec",
7394 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7397 { &hf_openflow_v5_flow_removed_idle_timeout
,
7398 { "Idle timeout", "openflow_v5.flow_removed.idle_timeout",
7399 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7402 { &hf_openflow_v5_flow_removed_hard_timeout
,
7403 { "Hard timeout", "openflow_v5.flow_removed.hard_timeout",
7404 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7407 { &hf_openflow_v5_flow_removed_packet_count
,
7408 { "Packet count", "openflow_v5.flow_removed.packet_count",
7409 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
7412 { &hf_openflow_v5_flow_removed_byte_count
,
7413 { "Byte count", "openflow_v5.flow_removed.byte_count",
7414 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
7417 { &hf_openflow_v5_port_status_reason
,
7418 { "Reason", "openflow_v5.port_status.reason",
7419 FT_UINT8
, BASE_DEC
, VALS(openflow_v5_port_status_reason_values
), 0x0,
7422 { &hf_openflow_v5_port_status_pad
,
7423 { "Pad", "openflow_v5.port_status.pad",
7424 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7427 { &hf_openflow_v5_packet_out_buffer_id
,
7428 { "Buffer ID", "openflow_v5.packet_out.buffer_id",
7429 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_buffer_reserved_values
), 0x0,
7432 { &hf_openflow_v5_packet_out_in_port
,
7433 { "In port", "openflow_v5.packet_out.in_port",
7434 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
7437 { &hf_openflow_v5_packet_out_acts_len
,
7438 { "Actions length", "openflow_v5.packet_out.acts_len",
7439 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7442 { &hf_openflow_v5_packet_out_pad
,
7443 { "Pad", "openflow_v5.packet_out.pad",
7444 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7447 { &hf_openflow_v5_flowmod_cookie
,
7448 { "Cookie", "openflow_v5.flowmod.cookie",
7449 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7452 { &hf_openflow_v5_flowmod_cookie_mask
,
7453 { "Cookie mask", "openflow_v5.flowmod.cookie_mask",
7454 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7457 { &hf_openflow_v5_flowmod_table_id
,
7458 { "Table ID", "openflow_v5.flowmod.table_id",
7459 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
7462 { &hf_openflow_v5_flowmod_command
,
7463 { "Command", "openflow_v5.flowmod.command",
7464 FT_UINT8
, BASE_DEC
, VALS(openflow_v5_flowmod_command_values
), 0x0,
7467 { &hf_openflow_v5_flowmod_idle_timeout
,
7468 { "Idle timeout", "openflow_v5.flowmod.idle_timeout",
7469 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7472 { &hf_openflow_v5_flowmod_hard_timeout
,
7473 { "Hard timeout", "openflow_v5.flowmod.hard_timeout",
7474 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7477 { &hf_openflow_v5_flowmod_priority
,
7478 { "Priority", "openflow_v5.flowmod.priority",
7479 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7482 { &hf_openflow_v5_flowmod_buffer_id
,
7483 { "Buffer ID", "openflow_v5.flowmod.buffer_id",
7484 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_buffer_reserved_values
), 0x0,
7487 { &hf_openflow_v5_flowmod_out_port
,
7488 { "Out port", "openflow_v5.flowmod.out_port",
7489 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
7492 { &hf_openflow_v5_flowmod_out_group
,
7493 { "Out group", "openflow_v5.flowmod.out_group",
7494 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
7497 { &hf_openflow_v5_flowmod_flags
,
7498 { "Flags", "openflow_v5.flowmod.flags",
7499 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
7502 { &hf_openflow_v5_flowmod_flags_send_flow_rem
,
7503 { "Send flow removed", "openflow_v5.flowmod.flags.send_flow_rem",
7504 FT_BOOLEAN
, 16, NULL
, OFPFF_SEND_FLOW_REM
,
7507 { &hf_openflow_v5_flowmod_flags_check_overlap
,
7508 { "Check overlap", "openflow_v5.flowmod.flags.check_overlap",
7509 FT_BOOLEAN
, 16, NULL
, OFPFF_CHECK_OVERLAP
,
7512 { &hf_openflow_v5_flowmod_flags_reset_counts
,
7513 { "Reset counts", "openflow_v5.flowmod.flags.reset_counts",
7514 FT_BOOLEAN
, 16, NULL
, OFPFF_RESET_COUNTS
,
7517 { &hf_openflow_v5_flowmod_flags_no_packet_counts
,
7518 { "Don't count packets", "openflow_v5.flowmod.flags.no_packet_counts",
7519 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_PKT_COUNTS
,
7522 { &hf_openflow_v5_flowmod_flags_no_byte_counts
,
7523 { "Don't count bytes", "openflow_v5.flowmod.flags.no_byte_counts",
7524 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_BYT_COUNTS
,
7527 { &hf_openflow_v5_flowmod_importance
,
7528 { "Importance", "openflow_v5.flowmod.importance",
7529 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7532 { &hf_openflow_v5_bucket_length
,
7533 { "Length", "openflow_v5.bucket.length",
7534 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7537 { &hf_openflow_v5_bucket_weight
,
7538 { "Weight", "openflow_v5.bucket.weight",
7539 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7542 { &hf_openflow_v5_bucket_watch_port
,
7543 { "Watch port", "openflow_v5.bucket.watch_port",
7544 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
7547 { &hf_openflow_v5_bucket_watch_group
,
7548 { "Watch group", "openflow_v5.bucket.watch_group",
7549 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
7552 { &hf_openflow_v5_bucket_pad
,
7553 { "Pad", "openflow_v5.bucket.pad",
7554 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7557 { &hf_openflow_v5_groupmod_command
,
7558 { "Command", "openflow_v5.groupmod.command",
7559 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_groupmod_command_values
), 0x0,
7562 { &hf_openflow_v5_groupmod_type
,
7563 { "Type", "openflow_v5.groupmod.type",
7564 FT_UINT8
, BASE_DEC
, VALS(openflow_v5_group_type_values
), 0x0,
7567 { &hf_openflow_v5_groupmod_pad
,
7568 { "Pad", "openflow_v5.groupmod.pad",
7569 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7572 { &hf_openflow_v5_groupmod_group_id
,
7573 { "Group ID", "openflow_v5.groupmod.group_id",
7574 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
7577 { &hf_openflow_v5_portmod_prop_type
,
7578 { "Type", "openflow_v5.portmod.prop.type",
7579 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_portmod_prop_type_values
), 0x0,
7582 { &hf_openflow_v5_portmod_prop_length
,
7583 { "Length", "openflow_v5.portmod.prop.length",
7584 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7587 { &hf_openflow_v5_portmod_prop_ethernet_advertise
,
7588 { "Advertise", "openflow_v5.portmod.prop_ethernet.advertise",
7589 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7592 { &hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_hd
,
7593 { "OFPPF_10MB_HD", "openflow_v5.portmod.prop_ethernet.advertise.10mb_hd",
7594 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
7597 { &hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_fd
,
7598 { "OFPPF_10MB_FD", "openflow_v5.portmod.prop_ethernet.advertise.10mb_fd",
7599 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
7602 { &hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_hd
,
7603 { "OFPPF_100MB_HD", "openflow_v5.portmod.prop_ethernet.advertise.100mb_hd",
7604 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
7607 { &hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_fd
,
7608 { "OFPPF_100MB_FD", "openflow_v5.portmod.prop_ethernet.advertise.100mb_fd",
7609 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
7612 { &hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_hd
,
7613 { "OFPPF_1GB_HD", "openflow_v5.portmod.prop_ethernet.advertise.1gb_hd",
7614 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
7617 { &hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_fd
,
7618 { "OFPPF_1GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.1gb_fd",
7619 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
7622 { &hf_openflow_v5_portmod_prop_ethernet_advertise_10gb_fd
,
7623 { "OFPPF_10_GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.10gb_fd",
7624 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
7627 { &hf_openflow_v5_portmod_prop_ethernet_advertise_40gb_fd
,
7628 { "OFPPF_40GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.40gb_fd",
7629 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
7632 { &hf_openflow_v5_portmod_prop_ethernet_advertise_100gb_fd
,
7633 { "OFPPF_100_GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.100_gb_fd",
7634 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
7637 { &hf_openflow_v5_portmod_prop_ethernet_advertise_1tb_fd
,
7638 { "OFPPF_1TB_FD", "openflow_v5.portmod.prop_ethernet.advertise.1tb_fd",
7639 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
7642 { &hf_openflow_v5_portmod_prop_ethernet_advertise_other
,
7643 { "OFPPF_OTHER", "openflow_v5.portmod.prop_ethernet.advertise.other",
7644 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
7647 { &hf_openflow_v5_portmod_prop_ethernet_advertise_copper
,
7648 { "OFPPF_COPPER", "openflow_v5.portmod.prop_ethernet.advertise.copper",
7649 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
7652 { &hf_openflow_v5_portmod_prop_ethernet_advertise_fiber
,
7653 { "OFPPF_FIBER", "openflow_v5.portmod.prop_ethernet.advertise.fiber",
7654 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
7657 { &hf_openflow_v5_portmod_prop_ethernet_advertise_autoneg
,
7658 { "OFPPF_AUTONEG", "openflow_v5.portmod.prop_ethernet.advertise.autoneg",
7659 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
7662 { &hf_openflow_v5_portmod_prop_ethernet_advertise_pause
,
7663 { "OFPPF_PAUSE", "openflow_v5.portmod.prop_ethernet.advertise.pause",
7664 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
7667 { &hf_openflow_v5_portmod_prop_ethernet_advertise_pause_asym
,
7668 { "OFPPF_PAUSE_ASYM", "openflow_v5.portmod.prop_ethernet.advertise.pause_asym",
7669 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
7672 { &hf_openflow_v5_portmod_prop_optical_configure
,
7673 { "Configure", "openflow_v5.portmod.prop.optical.configure",
7674 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7677 { &hf_openflow_v5_portmod_prop_optical_configure_rx_tune
,
7678 { "OFPOPF_RX_TUNE", "openflow_v5.portmod.prop.optical.configure.rx_tune",
7679 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_RX_TUNE
,
7682 { &hf_openflow_v5_portmod_prop_optical_configure_tx_tune
,
7683 { "OFPOPF_TX_TUNE", "openflow_v5.portmod.prop.optical.configure.tx_tune",
7684 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_TUNE
,
7687 { &hf_openflow_v5_portmod_prop_optical_configure_tx_pwr
,
7688 { "OFPOPF_TX_PWR", "openflow_v5.portmod.prop.optical.configure.tx_pwr",
7689 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_TX_PWR
,
7692 { &hf_openflow_v5_portmod_prop_optical_configure_use_freq
,
7693 { "OFPOPF_USE_FREQ", "openflow_v5.portmod.prop.optical.configure.use_freq",
7694 FT_UINT32
, BASE_HEX
, NULL
, OFPOPF_USE_FREQ
,
7697 { &hf_openflow_v5_portmod_prop_optical_freq_lmda
,
7698 { "Freq. lambda", "openflow_v5.portmod.prop.optical.freq_lmda",
7699 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7702 { &hf_openflow_v5_portmod_prop_optical_fl_offset
,
7703 { "Freq. offset", "openflow_v5.portmod.prop.optical.fl_offset",
7704 FT_INT32
, BASE_DEC
, NULL
, 0x0,
7707 { &hf_openflow_v5_portmod_prop_optical_grid_span
,
7708 { "Grid span", "openflow_v5.portmod.prop.optical.grid_span",
7709 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7712 { &hf_openflow_v5_portmod_prop_optical_tx_pwr
,
7713 { "Tx power", "openflow_v5.portmod.prop.optical.tx_pwr",
7714 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7717 { &hf_openflow_v5_portmod_prop_experimenter_experimenter
,
7718 { "Experimenter", "openflow_v5.portmod.prop.experimenter.experimenter",
7719 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7722 { &hf_openflow_v5_portmod_prop_experimenter_exp_type
,
7723 { "Exp. type", "openflow_v5.portmod.prop.experimenter.exp_type",
7724 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7727 { &hf_openflow_v5_portmod_port_no
,
7728 { "Port no", "openflow_v5.portmod.port_no",
7729 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
7732 { &hf_openflow_v5_portmod_pad
,
7733 { "Pad", "openflow_v5.portmod.pad",
7734 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7737 { &hf_openflow_v5_portmod_hw_addr
,
7738 { "Hw addr", "openflow_v5.portmod.hw_addr",
7739 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
7742 { &hf_openflow_v5_portmod_pad2
,
7743 { "Pad", "openflow_v5.portmod.pad2",
7744 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7747 { &hf_openflow_v5_portmod_config
,
7748 { "Config", "openflow_v5.portmod.config",
7749 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7752 { &hf_openflow_v5_portmod_config_port_down
,
7753 { "OFPPC_PORT_DOWN", "openflow_v5.portmod.config.port_down",
7754 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
7757 { &hf_openflow_v5_portmod_config_no_recv
,
7758 { "OFPPC_NO_RECV", "openflow_v5.portmod.config.no_recv",
7759 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
7762 { &hf_openflow_v5_portmod_config_no_fwd
,
7763 { "OFPPC_NO_FWD", "openflow_v5.portmod.config.no_fwd",
7764 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
7767 { &hf_openflow_v5_portmod_config_no_packet_in
,
7768 { "OFPPC_NO_PACKET_IN", "openflow_v5.portmod.config.no_packet_in",
7769 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
7772 { &hf_openflow_v5_portmod_mask
,
7773 { "Mask", "openflow_v5.portmod.mask",
7774 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7777 { &hf_openflow_v5_portmod_mask_port_down
,
7778 { "OFPPC_PORT_DOWN", "openflow_v5.portmod.mask.port_down",
7779 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
7782 { &hf_openflow_v5_portmod_mask_no_recv
,
7783 { "OFPPC_NO_RECV", "openflow_v5.portmod.mask.no_recv",
7784 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
7787 { &hf_openflow_v5_portmod_mask_no_fwd
,
7788 { "OFPPC_NO_FWD", "openflow_v5.portmod.mask.no_fwd",
7789 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
7792 { &hf_openflow_v5_portmod_mask_no_packet_in
,
7793 { "OFPPC_NO_PACKET_IN", "openflow_v5.portmod.mask.no_packet_in",
7794 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
7797 { &hf_openflow_v5_tablemod_table_id
,
7798 { "Table ID", "openflow_v5.tablemod.table_id",
7799 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
7802 { &hf_openflow_v5_tablemod_pad
,
7803 { "Pad", "openflow_v5.tablemod.pad",
7804 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7807 { &hf_openflow_v5_tablemod_config
,
7808 { "Config", "openflow_v5.tablemod.config",
7809 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7812 { &hf_openflow_v5_tablemod_config_eviction
,
7813 { "OFPTC_EVICTION", "openflow_v5.tablemod.config.eviction",
7814 FT_BOOLEAN
, 32, NULL
, OFPTC_EVICTION
,
7817 { &hf_openflow_v5_tablemod_config_vacancy_events
,
7818 { "OFPTC_VACANCY_EVENTS", "openflow_v5.tablemod.config.vacancy_events",
7819 FT_BOOLEAN
, 32, NULL
, OFPTC_VACANCY_EVENTS
,
7822 { &hf_openflow_v5_tablemod_prop_type
,
7823 { "Type", "openflow_v5.tablemod_prop.type",
7824 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_tablemod_prop_type_values
), 0x0,
7827 { &hf_openflow_v5_tablemod_prop_length
,
7828 { "Length", "openflow_v5.tablemod_prop.length",
7829 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7832 { &hf_openflow_v5_tablemod_prop_eviction_flags
,
7833 { "Flags", "openflow_v5.tablemod.prop.eviction.flags",
7834 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7837 { &hf_openflow_v5_tablemod_prop_eviction_flags_other
,
7838 { "OFPTMPEF_OTHER", "openflow_v5.tablemod.prop.eviction.flags.other",
7839 FT_BOOLEAN
, 32, NULL
, OFPTMPEF_OTHER
,
7842 { &hf_openflow_v5_tablemod_prop_eviction_flags_importance
,
7843 { "OFPTMPEF_IMPORTANCE", "openflow_v5.tablemod.prop.eviction.flags.importance",
7844 FT_BOOLEAN
, 32, NULL
, OFPTMPEF_IMPORTANCE
,
7847 { &hf_openflow_v5_tablemod_prop_eviction_flags_lifetime
,
7848 { "OFPTMPEF_LIFETIME", "openflow_v5.tablemod.prop.eviction.flags.lifetime",
7849 FT_BOOLEAN
, 32, NULL
, OFPTMPEF_LIFETIME
,
7852 { &hf_openflow_v5_tablemod_prop_vacancy_vacancy_down
,
7853 { "Vacancy down", "openflow_v5.tablemod.prop.vacancy.vacancy_down",
7854 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7857 { &hf_openflow_v5_tablemod_prop_vacancy_vacancy_up
,
7858 { "Vacancy up", "openflow_v5.tablemod.prop.vacancy.vacancy_up",
7859 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7862 { &hf_openflow_v5_tablemod_prop_vacancy_vacancy
,
7863 { "Vacancy", "openflow_v5.tablemod.prop.vacancy.vacancy",
7864 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7867 { &hf_openflow_v5_tablemod_prop_vacancy_pad
,
7868 { "Pad", "openflow_v5.tablemod.prop.vacancy.pad",
7869 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7872 { &hf_openflow_v5_tablemod_prop_experimenter_experimenter
,
7873 { "Experimenter", "openflow_v5.tablemod.prop.experimenter.experimenter",
7874 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7877 { &hf_openflow_v5_tablemod_prop_experimenter_exp_type
,
7878 { "Exp. type", "openflow_v5.tablemod.prop.experimenter.exp_type",
7879 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7882 { &hf_openflow_v5_flow_stats_request_table_id
,
7883 { "Table ID", "openflow_v5.flow_stats_request.table_id",
7884 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
7887 { &hf_openflow_v5_flow_stats_request_pad
,
7888 { "Pad", "openflow_v5.flow_stats_request.pad",
7889 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7892 { &hf_openflow_v5_flow_stats_request_out_port
,
7893 { "Out port", "openflow_v5.flow_stats_request.out_port",
7894 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
7897 { &hf_openflow_v5_flow_stats_request_out_group
,
7898 { "Out group", "openflow_v5.flow_stats_request.out_group",
7899 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
7902 { &hf_openflow_v5_flow_stats_request_pad2
,
7903 { "Pad", "openflow_v5.flow_stats_request.pad2",
7904 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7907 { &hf_openflow_v5_flow_stats_request_cookie
,
7908 { "Cookie", "openflow_v5.flow_stats_request.cookie",
7909 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7912 { &hf_openflow_v5_flow_stats_request_cookie_mask
,
7913 { "Cookie mask", "openflow_v5.flow_stats_request.cookie_mask",
7914 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7917 { &hf_openflow_v5_aggregate_stats_request_table_id
,
7918 { "Table ID", "openflow_v5.aggregate_stats_request.table_id",
7919 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
7922 { &hf_openflow_v5_aggregate_stats_request_pad
,
7923 { "Pad", "openflow_v5.aggregate_stats_request.pad",
7924 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7927 { &hf_openflow_v5_aggregate_stats_request_out_port
,
7928 { "Out port", "openflow_v5.aggregate_stats_request.out_port",
7929 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
7932 { &hf_openflow_v5_aggregate_stats_request_out_group
,
7933 { "Out group", "openflow_v5.aggregate_stats_request.out_group",
7934 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
7937 { &hf_openflow_v5_aggregate_stats_request_pad2
,
7938 { "Pad", "openflow_v5.aggregate_stats_request.pad2",
7939 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7942 { &hf_openflow_v5_aggregate_stats_request_cookie
,
7943 { "Cookie", "openflow_v5.aggregate_stats_request.cookie",
7944 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7947 { &hf_openflow_v5_aggregate_stats_request_cookie_mask
,
7948 { "Cookie mask", "openflow_v5.aggregate_stats_request.cookie_mask",
7949 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7952 { &hf_openflow_v5_table_feature_prop_type
,
7953 { "Type", "openflow_v5.table_feature_prop.type",
7954 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_table_feature_prop_type_values
), 0x0,
7957 { &hf_openflow_v5_table_feature_prop_length
,
7958 { "Length", "openflow_v5.table_feature_prop.length",
7959 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7962 { &hf_openflow_v5_table_feature_prop_next_tables_next_table_id
,
7963 { "Next table ID", "openflow_v5.table_feature_prop.next_tables.next_table_id",
7964 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7967 { &hf_openflow_v5_table_feature_prop_table_sync_from_table_id
,
7968 { "Sync table ID", "openflow_v5.table_feature_prop.table_sync_from.table_id",
7969 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7972 { &hf_openflow_v5_table_feature_prop_experimenter_experimenter
,
7973 { "Experimenter", "openflow_v5.table_feature_prop.experimenter.experimenter",
7974 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7977 { &hf_openflow_v5_table_feature_prop_experimenter_exp_type
,
7978 { "Experimenter type", "openflow_v5.table_feature_prop.experimenter.exp_type",
7979 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7982 { &hf_openflow_v5_table_feature_prop_pad
,
7983 { "Pad", "openflow_v5.table_feature_prop.pad",
7984 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7987 { &hf_openflow_v5_table_features_length
,
7988 { "Length", "openflow_v5.table_features.length",
7989 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7992 { &hf_openflow_v5_table_features_table_id
,
7993 { "Table ID", "openflow_v5.table_features.table_id",
7994 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7997 { &hf_openflow_v5_table_features_pad
,
7998 { "Pad", "openflow_v5.table_features.pad",
7999 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8002 { &hf_openflow_v5_table_features_name
,
8003 { "Name", "openflow_v5.table_features.name",
8004 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8007 { &hf_openflow_v5_table_features_metadata_match
,
8008 { "Metadata match", "openflow_v5.table_features.metadata_match",
8009 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8012 { &hf_openflow_v5_table_features_metadata_write
,
8013 { "Metadata write", "openflow_v5.table_features.metadata_write",
8014 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8017 { &hf_openflow_v5_table_features_capabilities
,
8018 { "Capabilities", "openflow_v5.table_features.capabilities",
8019 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8022 { &hf_openflow_v5_table_features_capabilities_eviction
,
8023 { "OFPTC_EVICTION", "openflow_v5.table_features.capabilities.eviction",
8024 FT_UINT32
, BASE_HEX
, NULL
, OFPTC_EVICTION
,
8027 { &hf_openflow_v5_table_features_capabilities_vacancy_events
,
8028 { "OFPTC_VACANCY_EVENTS", "openflow_v5.table_features.capabilities.vacancy_events",
8029 FT_UINT32
, BASE_HEX
, NULL
, OFPTC_VACANCY_EVENTS
,
8032 { &hf_openflow_v5_table_features_max_entries
,
8033 { "Max entries", "openflow_v5.table_features.max_entries",
8034 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8037 { &hf_openflow_v5_port_stats_request_port_no
,
8038 { "Port number", "openflow_v5.port_stats_request.port_no",
8039 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
8042 { &hf_openflow_v5_port_stats_request_pad
,
8043 { "Pad", "openflow_v5.port_stats_request.pad",
8044 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8047 { &hf_openflow_v5_queue_stats_request_port_no
,
8048 { "Port number", "openflow_v5.queue_stats_request.port_no",
8049 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
8052 { &hf_openflow_v5_queue_stats_request_queue_id
,
8053 { "Queue ID", "openflow_v5.queue_stats_request.queue_id",
8054 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_queue_reserved_values
), 0x0,
8057 { &hf_openflow_v5_group_stats_request_group_id
,
8058 { "Group ID", "openflow_v5.group_stats_request.group_id",
8059 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
8062 { &hf_openflow_v5_group_stats_request_pad
,
8063 { "Pad", "openflow_v5.group_stats_request.pad",
8064 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8067 { &hf_openflow_v5_meter_stats_request_meter_id
,
8068 { "Meter ID", "openflow_v5.meter_stats_request.meter_id",
8069 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_meter_id_reserved_values
), 0x0,
8072 { &hf_openflow_v5_meter_stats_request_pad
,
8073 { "Pad", "openflow_v5.meter_stats_request.pad",
8074 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8077 { &hf_openflow_v5_meter_config_request_meter_id
,
8078 { "Meter ID", "openflow_v5.meter_config_request.meter_id",
8079 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_meter_id_reserved_values
), 0x0,
8082 { &hf_openflow_v5_meter_config_request_pad
,
8083 { "Pad", "openflow_v5.meter_config_request.pad",
8084 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8087 { &hf_openflow_v5_queue_desc_request_port_no
,
8088 { "Port number", "openflow_v5.queue_desc_request.port_no",
8089 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
8092 { &hf_openflow_v5_queue_desc_request_queue_id
,
8093 { "Queue ID", "openflow_v5.queue_desc_request.queue_id",
8094 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_queue_reserved_values
), 0x0,
8097 { &hf_openflow_v5_flow_monitor_request_monitor_id
,
8098 { "Monitor ID", "openflow_v5.flow_monitor_request.monitor_id",
8099 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8102 { &hf_openflow_v5_flow_monitor_request_out_port
,
8103 { "Out port", "openflow_v5.flow_monitor_request.out_port",
8104 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
8107 { &hf_openflow_v5_flow_monitor_request_out_group
,
8108 { "Out group", "openflow_v5.flow_monitor_request.out_group",
8109 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
8112 { &hf_openflow_v5_flow_monitor_request_flags
,
8113 { "Flags", "openflow_v5.flow_monitor_request.flags",
8114 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8117 { &hf_openflow_v5_flow_monitor_request_flags_initial
,
8118 { "OFPFMF_INITIAL", "openflow_v5.flow_monitor_request.flags.initial",
8119 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_INITIAL
,
8122 { &hf_openflow_v5_flow_monitor_request_flags_add
,
8123 { "OFPFMF_ADD", "openflow_v5.flow_monitor_request.flags.add",
8124 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_ADD
,
8127 { &hf_openflow_v5_flow_monitor_request_flags_removed
,
8128 { "OFPFMF_REMOVED", "openflow_v5.flow_monitor_request.flags.removed",
8129 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_REMOVED
,
8132 { &hf_openflow_v5_flow_monitor_request_flags_modify
,
8133 { "OFPFMF_MODIFY", "openflow_v5.flow_monitor_request.flags.modify",
8134 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_MODIFY
,
8137 { &hf_openflow_v5_flow_monitor_request_flags_instructions
,
8138 { "OFPFMF_INSTRUCTIONS", "openflow_v5.flow_monitor_request.flags.instructions",
8139 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_INSTRUCTIONS
,
8142 { &hf_openflow_v5_flow_monitor_request_flags_no_abbrev
,
8143 { "OFPFMF_NO_ABBREV", "openflow_v5.flow_monitor_request.flags.no_abbrev",
8144 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_NO_ABBREV
,
8147 { &hf_openflow_v5_flow_monitor_request_flags_only_own
,
8148 { "OFPFMF_ONLY_OWN", "openflow_v5.flow_monitor_request.flags.only_own",
8149 FT_UINT16
, BASE_HEX
, NULL
, OFPFMF_ONLY_OWN
,
8152 { &hf_openflow_v5_flow_monitor_request_table_id
,
8153 { "Table ID", "openflow_v5.flow_monitor_request.table_id",
8154 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
8157 { &hf_openflow_v5_flow_monitor_request_command
,
8158 { "Command", "openflow_v5.flow_monitor_request.command",
8159 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_flow_monitor_request_command_values
), 0x0,
8162 { &hf_openflow_v5_multipart_request_type
,
8163 { "Type", "openflow_v5.multipart_request.type",
8164 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_multipart_type_values
), 0x0,
8167 { &hf_openflow_v5_multipart_request_flags
,
8168 { "Flags", "openflow_v5.multipart_request.flags",
8169 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8172 { &hf_openflow_v5_multipart_request_flags_more
,
8173 { "OFPMPF_REQ_MORE", "openflow_v5.multipart_request.flags.more",
8174 FT_UINT16
, BASE_HEX
, NULL
, OFPMPF_REQ_MORE
,
8177 { &hf_openflow_v5_multipart_request_pad
,
8178 { "Pad", "openflow_v5.multipart_request.pad",
8179 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8182 { &hf_openflow_v5_multipart_request_experimenter_experimenter
,
8183 { "Experimenter", "openflow_v5.multipart_request.experimenter.experimenter",
8184 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8187 { &hf_openflow_v5_multipart_request_experimenter_exp_type
,
8188 { "Experimenter type", "openflow_v5.multipart_request.experimenter.exp_type",
8189 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8192 { &hf_openflow_v5_switch_description_mfr_desc
,
8193 { "Manufacturer desc.", "openflow_v5.switch_description.mfr_desc",
8194 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8197 { &hf_openflow_v5_switch_description_hw_desc
,
8198 { "Hardware desc.", "openflow_v5.switch_description.hw_desc",
8199 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8202 { &hf_openflow_v5_switch_description_sw_desc
,
8203 { "Software desc.", "openflow_v5.switch_description.sw_desc",
8204 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8207 { &hf_openflow_v5_switch_description_serial_num
,
8208 { "Serial no.", "openflow_v5.switch_description.serial_num",
8209 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8212 { &hf_openflow_v5_switch_description_dp_desc
,
8213 { "Datapath desc.", "openflow_v5.switch_description.dp_desc",
8214 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8217 { &hf_openflow_v5_flow_stats_length
,
8218 { "Length", "openflow_v5.flow_stats.length",
8219 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8222 { &hf_openflow_v5_flow_stats_table_id
,
8223 { "Table ID", "openflow_v5.flow_stats.table_id",
8224 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8227 { &hf_openflow_v5_flow_stats_pad
,
8228 { "Pad", "openflow_v5.flow_stats.pad",
8229 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8232 { &hf_openflow_v5_flow_stats_duration_sec
,
8233 { "Duration sec", "openflow_v5.flow_stats.duration_sec",
8234 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8237 { &hf_openflow_v5_flow_stats_duration_nsec
,
8238 { "Duration nsec", "openflow_v5.flow_stats.duration_nsec",
8239 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8242 { &hf_openflow_v5_flow_stats_priority
,
8243 { "Priority", "openflow_v5.flow_stats.priority",
8244 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8247 { &hf_openflow_v5_flow_stats_idle_timeout
,
8248 { "Idle timeout", "openflow_v5.flow_stats.idle_timeout",
8249 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8252 { &hf_openflow_v5_flow_stats_hard_timeout
,
8253 { "Hard timeout", "openflow_v5.flow_stats.hard_timeout",
8254 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8257 { &hf_openflow_v5_flow_stats_flags
,
8258 { "Flags", "openflow_v5.flow_stats.flags",
8259 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8262 { &hf_openflow_v5_flow_stats_flags_send_flow_rem
,
8263 { "Send flow removed", "openflow_v5.flow_stats.flags.send_flow_rem",
8264 FT_BOOLEAN
, 16, NULL
, OFPFF_SEND_FLOW_REM
,
8267 { &hf_openflow_v5_flow_stats_flags_check_overlap
,
8268 { "Check overlap", "openflow_v5.flow_stats.flags.check_overlap",
8269 FT_BOOLEAN
, 16, NULL
, OFPFF_CHECK_OVERLAP
,
8272 { &hf_openflow_v5_flow_stats_flags_reset_counts
,
8273 { "Reset counts", "openflow_v5.flow_stats.flags.reset_counts",
8274 FT_BOOLEAN
, 16, NULL
, OFPFF_RESET_COUNTS
,
8277 { &hf_openflow_v5_flow_stats_flags_no_packet_counts
,
8278 { "Don't count packets", "openflow_v5.flow_stats.flags.no_packet_counts",
8279 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_PKT_COUNTS
,
8282 { &hf_openflow_v5_flow_stats_flags_no_byte_counts
,
8283 { "Don't count bytes", "openflow_v5.flow_stats.flags.no_byte_counts",
8284 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_BYT_COUNTS
,
8287 { &hf_openflow_v5_flow_stats_importance
,
8288 { "Importance", "openflow_v5.flow_stats.importance",
8289 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8292 { &hf_openflow_v5_flow_stats_pad2
,
8293 { "Pad", "openflow_v5.flow_stats.pad2",
8294 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8297 { &hf_openflow_v5_flow_stats_cookie
,
8298 { "Cookie", "openflow_v5.flow_stats.cookie",
8299 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
8302 { &hf_openflow_v5_flow_stats_packet_count
,
8303 { "Packet count", "openflow_v5.flow_stats.packet_count",
8304 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8307 { &hf_openflow_v5_flow_stats_byte_count
,
8308 { "Byte count", "openflow_v5.flow_stats.byte_count",
8309 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8312 { &hf_openflow_v5_aggregate_stats_packet_count
,
8313 { "Packet count", "openflow_v5.aggregate_stats.packet_count",
8314 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8317 { &hf_openflow_v5_aggregate_stats_byte_count
,
8318 { "Byte count", "openflow_v5.aggregate_stats.byte_count",
8319 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8322 { &hf_openflow_v5_aggregate_stats_flow_count
,
8323 { "Flow count", "openflow_v5.aggregate_stats.flow_count",
8324 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8327 { &hf_openflow_v5_aggregate_stats_pad
,
8328 { "Pad", "openflow_v5.aggregate_stats.pad",
8329 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8332 { &hf_openflow_v5_table_stats_table_id
,
8333 { "Table ID", "openflow_v5.table_stats.table_id",
8334 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
8337 { &hf_openflow_v5_table_stats_pad
,
8338 { "Pad", "openflow_v5.table_stats.pad",
8339 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8342 { &hf_openflow_v5_table_stats_active_count
,
8343 { "Active count", "openflow_v5.table_stats.active_count",
8344 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8347 { &hf_openflow_v5_table_stats_lookup_count
,
8348 { "Lookup count", "openflow_v5.table_stats.lookup_count",
8349 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8352 { &hf_openflow_v5_table_stats_match_count
,
8353 { "Match count", "openflow_v5.table_stats.match_count",
8354 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8357 { &hf_openflow_v5_port_stats_length
,
8358 { "Length", "openflow_v5.port_stats.length",
8359 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8362 { &hf_openflow_v5_port_stats_pad
,
8363 { "Pad", "openflow_v5.port_stats.pad",
8364 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8367 { &hf_openflow_v5_port_stats_port_no
,
8368 { "Port number", "openflow_v5.port_stats.port_no",
8369 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
8372 { &hf_openflow_v5_port_stats_duration_sec
,
8373 { "Duration sec", "openflow_v5.port_stats.duration_sec",
8374 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8377 { &hf_openflow_v5_port_stats_duration_nsec
,
8378 { "Duration nsec", "openflow_v5.port_stats.duration_nsec",
8379 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8382 { &hf_openflow_v5_port_stats_rx_packets
,
8383 { "Rx packets", "openflow_v5.port_stats.rx_packets",
8384 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8387 { &hf_openflow_v5_port_stats_tx_packets
,
8388 { "Tx packets", "openflow_v5.port_stats.tx_packets",
8389 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8392 { &hf_openflow_v5_port_stats_rx_bytes
,
8393 { "Rx bytes", "openflow_v5.port_stats.rx_bytes",
8394 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8397 { &hf_openflow_v5_port_stats_tx_bytes
,
8398 { "Tx bytes", "openflow_v5.port_stats.tx_bytes",
8399 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8402 { &hf_openflow_v5_port_stats_rx_dropped
,
8403 { "Rx dropped", "openflow_v5.port_stats.rx_dropped",
8404 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8407 { &hf_openflow_v5_port_stats_tx_dropped
,
8408 { "Tx dropped", "openflow_v5.port_stats.tx_dropped",
8409 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8412 { &hf_openflow_v5_port_stats_rx_errors
,
8413 { "Rx errors", "openflow_v5.port_stats.rx_errors",
8414 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8417 { &hf_openflow_v5_port_stats_tx_errors
,
8418 { "Tx errors", "openflow_v5.port_stats.tx_errors",
8419 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8422 { &hf_openflow_v5_queue_stats_length
,
8423 { "Length", "openflow_v5.queue_stats.length",
8424 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8427 { &hf_openflow_v5_queue_stats_pad
,
8428 { "Pad", "openflow_v5.queue_stats.pad",
8429 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8432 { &hf_openflow_v5_queue_stats_port_no
,
8433 { "Port number", "openflow_v5.queue_stats.port_no",
8434 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
8437 { &hf_openflow_v5_queue_stats_queue_id
,
8438 { "Queue ID", "openflow_v5.queue_stats.queue_id",
8439 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_queue_reserved_values
), 0x0,
8442 { &hf_openflow_v5_queue_stats_tx_bytes
,
8443 { "Tx bytes", "openflow_v5.queue_stats.tx_bytes",
8444 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8447 { &hf_openflow_v5_queue_stats_tx_packets
,
8448 { "Tx packets", "openflow_v5.quee_stats.tx_packets",
8449 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8452 { &hf_openflow_v5_queue_stats_tx_errors
,
8453 { "Tx errors", "openflow_v5.port_stats.tx_errors",
8454 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8457 { &hf_openflow_v5_queue_stats_duration_sec
,
8458 { "Duration sec", "openflow_v5.queue_stats.duration_sec",
8459 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8462 { &hf_openflow_v5_queue_stats_duration_nsec
,
8463 { "Duration nsec", "openflow_v5.queue_stats.duration_nsec",
8464 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8467 { &hf_openflow_v5_queue_stats_prop_type
,
8468 { "Type", "openflow_v5.queue_stats_prop.type",
8469 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_queue_stats_prop_type_values
), 0x0,
8472 { &hf_openflow_v5_queue_stats_prop_length
,
8473 { "Length", "openflow_v5.queue_stats_prop.length",
8474 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8477 { &hf_openflow_v5_queue_stats_prop_experimenter_experimenter
,
8478 { "Experimenter", "openflow_v5.queue_stats_prop.experimenter.experimenter",
8479 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8482 { &hf_openflow_v5_queue_stats_prop_experimenter_exp_type
,
8483 { "Experimenter type", "openflow_v5.queue_stats_prop.experimenter.exp_type",
8484 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8487 { &hf_openflow_v5_bucket_counter_packet_count
,
8488 { "Packet count", "openflow_v5.bucket_counter.packet_count",
8489 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8492 { &hf_openflow_v5_bucket_counter_byte_count
,
8493 { "Byte count", "openflow_v5.bucket_counter.byte_count",
8494 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8497 { &hf_openflow_v5_group_stats_length
,
8498 { "Length", "openflow_v5.group_stats.length",
8499 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8502 { &hf_openflow_v5_group_stats_pad
,
8503 { "Pad", "openflow_v5.group_stats.pad",
8504 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8507 { &hf_openflow_v5_group_stats_group_id
,
8508 { "Group ID", "openflow_v5.group_stats.group_id",
8509 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
8512 { &hf_openflow_v5_group_stats_ref_count
,
8513 { "Ref. count", "openflow_v5.group_stats.ref_count",
8514 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8517 { &hf_openflow_v5_group_stats_pad2
,
8518 { "Pad", "openflow_v5.group_stats.pad2",
8519 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8522 { &hf_openflow_v5_group_stats_packet_count
,
8523 { "Packet count", "openflow_v5.group_stats.packet_count",
8524 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8527 { &hf_openflow_v5_group_stats_byte_count
,
8528 { "Byte count", "openflow_v5.group_stats.byte_count",
8529 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8532 { &hf_openflow_v5_group_desc_length
,
8533 { "Length", "openflow_v5.group_desc.length",
8534 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8537 { &hf_openflow_v5_group_desc_type
,
8538 { "Type", "openflow_v5.group_desc.type",
8539 FT_UINT8
, BASE_DEC
, VALS(openflow_v5_group_type_values
), 0x0,
8542 { &hf_openflow_v5_group_desc_pad
,
8543 { "Pad", "openflow_v5.group_desc.pad2",
8544 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8547 { &hf_openflow_v5_group_desc_group_id
,
8548 { "Group ID", "openflow_v5.group_desc.group_id",
8549 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_group_reserved_values
), 0x0,
8552 { &hf_openflow_v5_group_features_types
,
8553 { "Types", "openflow_v5.group_features.types",
8554 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8557 { &hf_openflow_v5_group_features_types_all
,
8558 { "OFPGT_ALL", "openflow_v5.group_features.types.all",
8559 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_ALL
,
8562 { &hf_openflow_v5_group_features_types_select
,
8563 { "OFPGT_SELECT", "openflow_v5.group_features.types.select",
8564 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_SELECT
,
8567 { &hf_openflow_v5_group_features_types_indirect
,
8568 { "OFPGT_INDIRECT", "openflow_v5.group_features.types.indirect",
8569 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_INDIRECT
,
8572 { &hf_openflow_v5_group_features_types_ff
,
8573 { "OFPGT_FF", "openflow_v5.group_features.types.ff",
8574 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_FF
,
8577 { &hf_openflow_v5_group_features_capabilities
,
8578 { "Capabilities", "openflow_v5.group_features.capabilities",
8579 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8582 { &hf_openflow_v5_group_features_capabilities_select_weight
,
8583 { "OFPGFC_SELECT_WEIGHT", "openflow_v5.group_features.capabilities.select_weight",
8584 FT_BOOLEAN
, 32, NULL
, OFPGFC_SELECT_WEIGHT
,
8587 { &hf_openflow_v5_group_features_capabilities_select_liveness
,
8588 { "OFPGFC_SELECT_LIVENESS", "openflow_v5.group_features.capabilities.select_liveness",
8589 FT_BOOLEAN
, 32, NULL
, OFPGFC_SELECT_LIVENESS
,
8592 { &hf_openflow_v5_group_features_capabilities_chaining
,
8593 { "OFPGFC_CHAINING", "openflow_v5.group_features.capabilities.chaining",
8594 FT_BOOLEAN
, 32, NULL
, OFPGFC_CHAINING
,
8597 { &hf_openflow_v5_group_features_capabilities_chaining_checks
,
8598 { "OFPGFC_CHAINING_CHECKS", "openflow_v5.group_features.capabilities.chaining_checks",
8599 FT_BOOLEAN
, 32, NULL
, OFPGFC_CHAINING_CHECKS
,
8602 { &hf_openflow_v5_group_features_max_groups_all
,
8603 { "Max groups (all)", "openflow_v5.group_stats.max_groups.all",
8604 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8607 { &hf_openflow_v5_group_features_max_groups_select
,
8608 { "Max groups (select)", "openflow_v5.group_stats.max_groups.select",
8609 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8612 { &hf_openflow_v5_group_features_max_groups_indirect
,
8613 { "Max groups (indirect)", "openflow_v5.group_stats.max_groups.indirect",
8614 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8617 { &hf_openflow_v5_group_features_max_groups_ff
,
8618 { "Max groups (ff)", "openflow_v5.group_stats.max_groups.ff",
8619 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8622 { &hf_openflow_v5_group_features_actions_all
,
8623 { "Actions (all)", "openflow_v5.group_features.actions.all",
8624 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8627 { &hf_openflow_v5_group_features_actions_all_output
,
8628 { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.all.output",
8629 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
8632 { &hf_openflow_v5_group_features_actions_all_copy_ttl_out
,
8633 { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.all.copy_ttl_out",
8634 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
8637 { &hf_openflow_v5_group_features_actions_all_copy_ttl_in
,
8638 { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.all.copy_ttl_in",
8639 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
8642 { &hf_openflow_v5_group_features_actions_all_set_mpls_ttl
,
8643 { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.all.set_mpls_ttl",
8644 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
8647 { &hf_openflow_v5_group_features_actions_all_dec_mpls_ttl
,
8648 { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.all.dec_mpls_ttl",
8649 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
8652 { &hf_openflow_v5_group_features_actions_all_push_vlan
,
8653 { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.all.push_vlan",
8654 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
8657 { &hf_openflow_v5_group_features_actions_all_pop_vlan
,
8658 { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.all.pop_vlan",
8659 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
8662 { &hf_openflow_v5_group_features_actions_all_push_mpls
,
8663 { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.all.push_mpls",
8664 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
8667 { &hf_openflow_v5_group_features_actions_all_pop_mpls
,
8668 { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.all.pop_mpls",
8669 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
8672 { &hf_openflow_v5_group_features_actions_all_set_queue
,
8673 { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.all.set_queue",
8674 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
8677 { &hf_openflow_v5_group_features_actions_all_group
,
8678 { "OFPAT_GROUP", "openflow_v5.group_features.actions.all.group",
8679 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
8682 { &hf_openflow_v5_group_features_actions_all_set_nw_ttl
,
8683 { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.all.set_nw_ttl",
8684 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
8687 { &hf_openflow_v5_group_features_actions_all_dec_nw_ttl
,
8688 { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.all.dec_nw_ttl",
8689 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
8692 { &hf_openflow_v5_group_features_actions_all_set_field
,
8693 { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.all.set_field",
8694 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
8697 { &hf_openflow_v5_group_features_actions_all_push_pbb
,
8698 { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.all.push_pbb",
8699 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
8702 { &hf_openflow_v5_group_features_actions_all_pop_pbb
,
8703 { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.all.pop_pbb",
8704 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
8707 { &hf_openflow_v5_group_features_actions_select
,
8708 { "Actions (select)", "openflow_v5.group_features.actions.select",
8709 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8712 { &hf_openflow_v5_group_features_actions_select_output
,
8713 { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.select.output",
8714 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
8717 { &hf_openflow_v5_group_features_actions_select_copy_ttl_out
,
8718 { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.select.copy_ttl_out",
8719 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
8722 { &hf_openflow_v5_group_features_actions_select_copy_ttl_in
,
8723 { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.select.copy_ttl_in",
8724 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
8727 { &hf_openflow_v5_group_features_actions_select_set_mpls_ttl
,
8728 { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.select.set_mpls_ttl",
8729 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
8732 { &hf_openflow_v5_group_features_actions_select_dec_mpls_ttl
,
8733 { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.select.dec_mpls_ttl",
8734 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
8737 { &hf_openflow_v5_group_features_actions_select_push_vlan
,
8738 { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.select.push_vlan",
8739 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
8742 { &hf_openflow_v5_group_features_actions_select_pop_vlan
,
8743 { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.select.pop_vlan",
8744 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
8747 { &hf_openflow_v5_group_features_actions_select_push_mpls
,
8748 { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.select.push_mpls",
8749 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
8752 { &hf_openflow_v5_group_features_actions_select_pop_mpls
,
8753 { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.select.pop_mpls",
8754 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
8757 { &hf_openflow_v5_group_features_actions_select_set_queue
,
8758 { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.select.set_queue",
8759 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
8762 { &hf_openflow_v5_group_features_actions_select_group
,
8763 { "OFPAT_GROUP", "openflow_v5.group_features.actions.select.group",
8764 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
8767 { &hf_openflow_v5_group_features_actions_select_set_nw_ttl
,
8768 { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.select.set_nw_ttl",
8769 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
8772 { &hf_openflow_v5_group_features_actions_select_dec_nw_ttl
,
8773 { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.select.dec_nw_ttl",
8774 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
8777 { &hf_openflow_v5_group_features_actions_select_set_field
,
8778 { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.select.set_field",
8779 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
8782 { &hf_openflow_v5_group_features_actions_select_push_pbb
,
8783 { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.select.push_pbb",
8784 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
8787 { &hf_openflow_v5_group_features_actions_select_pop_pbb
,
8788 { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.select.pop_pbb",
8789 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
8792 { &hf_openflow_v5_group_features_actions_indirect
,
8793 { "Actions (indirect)", "openflow_v5.group_features.actions.indirect",
8794 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8797 { &hf_openflow_v5_group_features_actions_indirect_output
,
8798 { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.indirect.output",
8799 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
8802 { &hf_openflow_v5_group_features_actions_indirect_copy_ttl_out
,
8803 { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.indirect.copy_ttl_out",
8804 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
8807 { &hf_openflow_v5_group_features_actions_indirect_copy_ttl_in
,
8808 { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.indirect.copy_ttl_in",
8809 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
8812 { &hf_openflow_v5_group_features_actions_indirect_set_mpls_ttl
,
8813 { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.indirect.set_mpls_ttl",
8814 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
8817 { &hf_openflow_v5_group_features_actions_indirect_dec_mpls_ttl
,
8818 { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.indirect.dec_mpls_ttl",
8819 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
8822 { &hf_openflow_v5_group_features_actions_indirect_push_vlan
,
8823 { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.indirect.push_vlan",
8824 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
8827 { &hf_openflow_v5_group_features_actions_indirect_pop_vlan
,
8828 { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.indirect.pop_vlan",
8829 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
8832 { &hf_openflow_v5_group_features_actions_indirect_push_mpls
,
8833 { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.indirect.push_mpls",
8834 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
8837 { &hf_openflow_v5_group_features_actions_indirect_pop_mpls
,
8838 { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.indirect.pop_mpls",
8839 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
8842 { &hf_openflow_v5_group_features_actions_indirect_set_queue
,
8843 { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.indirect.set_queue",
8844 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
8847 { &hf_openflow_v5_group_features_actions_indirect_group
,
8848 { "OFPAT_GROUP", "openflow_v5.group_features.actions.indirect.group",
8849 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
8852 { &hf_openflow_v5_group_features_actions_indirect_set_nw_ttl
,
8853 { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.indirect.set_nw_ttl",
8854 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
8857 { &hf_openflow_v5_group_features_actions_indirect_dec_nw_ttl
,
8858 { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.indirect.dec_nw_ttl",
8859 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
8862 { &hf_openflow_v5_group_features_actions_indirect_set_field
,
8863 { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.indirect.set_field",
8864 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
8867 { &hf_openflow_v5_group_features_actions_indirect_push_pbb
,
8868 { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.indirect.push_pbb",
8869 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
8872 { &hf_openflow_v5_group_features_actions_indirect_pop_pbb
,
8873 { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.indirect.pop_pbb",
8874 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
8877 { &hf_openflow_v5_group_features_actions_ff
,
8878 { "Actions (ff)", "openflow_v5.group_features.actions.ff",
8879 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8882 { &hf_openflow_v5_group_features_actions_ff_output
,
8883 { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.ff.output",
8884 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
8887 { &hf_openflow_v5_group_features_actions_ff_copy_ttl_out
,
8888 { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.ff.copy_ttl_out",
8889 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
8892 { &hf_openflow_v5_group_features_actions_ff_copy_ttl_in
,
8893 { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.ff.copy_ttl_in",
8894 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
8897 { &hf_openflow_v5_group_features_actions_ff_set_mpls_ttl
,
8898 { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.ff.set_mpls_ttl",
8899 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
8902 { &hf_openflow_v5_group_features_actions_ff_dec_mpls_ttl
,
8903 { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.ff.dec_mpls_ttl",
8904 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
8907 { &hf_openflow_v5_group_features_actions_ff_push_vlan
,
8908 { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.ff.push_vlan",
8909 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
8912 { &hf_openflow_v5_group_features_actions_ff_pop_vlan
,
8913 { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.ff.pop_vlan",
8914 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
8917 { &hf_openflow_v5_group_features_actions_ff_push_mpls
,
8918 { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.ff.push_mpls",
8919 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
8922 { &hf_openflow_v5_group_features_actions_ff_pop_mpls
,
8923 { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.ff.pop_mpls",
8924 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
8927 { &hf_openflow_v5_group_features_actions_ff_set_queue
,
8928 { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.ff.set_queue",
8929 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
8932 { &hf_openflow_v5_group_features_actions_ff_group
,
8933 { "OFPAT_GROUP", "openflow_v5.group_features.actions.ff.group",
8934 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
8937 { &hf_openflow_v5_group_features_actions_ff_set_nw_ttl
,
8938 { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.ff.set_nw_ttl",
8939 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
8942 { &hf_openflow_v5_group_features_actions_ff_dec_nw_ttl
,
8943 { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.ff.dec_nw_ttl",
8944 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
8947 { &hf_openflow_v5_group_features_actions_ff_set_field
,
8948 { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.ff.set_field",
8949 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
8952 { &hf_openflow_v5_group_features_actions_ff_push_pbb
,
8953 { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.ff.push_pbb",
8954 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
8957 { &hf_openflow_v5_group_features_actions_ff_pop_pbb
,
8958 { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.ff.pop_pbb",
8959 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
8962 { &hf_openflow_v5_meter_band_stats_packet_band_count
,
8963 { "Packet count", "openflow_v5.meter_band_stats.packet_band_count",
8964 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8967 { &hf_openflow_v5_meter_band_stats_byte_band_count
,
8968 { "Byte count", "openflow_v5.meter_band_stats.byte_band_count",
8969 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8972 { &hf_openflow_v5_meter_stats_meter_id
,
8973 { "Meter ID", "openflow_v5.meter_stats.meter_id",
8974 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_meter_id_reserved_values
), 0x0,
8977 { &hf_openflow_v5_meter_stats_len
,
8978 { "Length", "openflow_v5.meter_stats.length",
8979 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8982 { &hf_openflow_v5_meter_stats_pad
,
8983 { "Pad", "openflow_v5.meter_stats.pad",
8984 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8987 { &hf_openflow_v5_meter_stats_flow_count
,
8988 { "Flow count", "openflow_v5.meter_stats.flow_count",
8989 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8992 { &hf_openflow_v5_meter_stats_packet_in_count
,
8993 { "Packet in count", "openflow_v5.meter_stats.packet_in_count",
8994 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
8997 { &hf_openflow_v5_meter_stats_byte_in_count
,
8998 { "Byte in count", "openflow_v5.meter_stats.byte_in_count",
8999 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9002 { &hf_openflow_v5_meter_stats_duration_sec
,
9003 { "Duration sec", "openflow_v5.meter_stats.duration_sec",
9004 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9007 { &hf_openflow_v5_meter_stats_duration_nsec
,
9008 { "Duration nsec", "openflow_v5.meter_stats.duration_nsec",
9009 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9012 { &hf_openflow_v5_meter_config_len
,
9013 { "Length", "openflow_v5.meter_config.len",
9014 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9017 { &hf_openflow_v5_meter_config_flags
,
9018 { "Flags", "openflow_v5.meter_config.flags",
9019 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9022 { &hf_openflow_v5_meter_config_flags_kbps
,
9023 { "OFPMF_KBPS", "openflow_v5.meter_config.flags.kbps",
9024 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
9027 { &hf_openflow_v5_meter_config_flags_pktps
,
9028 { "OFPMF_PKTPS", "openflow_v5.meter_config.flags.ptkps",
9029 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
9032 { &hf_openflow_v5_meter_config_flags_burst
,
9033 { "OFPMF_BURST", "openflow_v5.meter_config.flags.burst",
9034 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
9037 { &hf_openflow_v5_meter_config_flags_stats
,
9038 { "OFPMF_STATS", "openflow_v5.meter_config.flags.stats",
9039 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
9042 { &hf_openflow_v5_meter_config_meter_id
,
9043 { "Meter ID", "openflow_v5.meter_config.meter_id",
9044 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_meter_id_reserved_values
), 0x0,
9047 { &hf_openflow_v5_meter_features_max_meter
,
9048 { "Max meters", "openflow_v5.meter_features.max_meter",
9049 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9052 { &hf_openflow_v5_meter_features_band_types
,
9053 { "Band types", "openflow_v5.features.band_types",
9054 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9057 { &hf_openflow_v5_meter_features_band_types_drop
,
9058 { "OFPMBT_DROP", "openflow_v5.meter_features.band_types.drop",
9059 FT_BOOLEAN
, 32, NULL
, 1 << OFPMBT_DROP
,
9062 { &hf_openflow_v5_meter_features_band_types_dscp_remark
,
9063 { "OFPMBT_DSCP_REMARK", "openflow_v5.meter_features.band_types.dscp_remark",
9064 FT_BOOLEAN
, 32, NULL
, 1 << OFPMBT_DSCP_REMARK
,
9067 { &hf_openflow_v5_meter_features_capabilities
,
9068 { "Capabilities", "openflow_v5.meter_features.capabilities",
9069 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9072 { &hf_openflow_v5_meter_features_capabilities_kbps
,
9073 { "OFPMF_KBPS", "openflow_v5.meter_features.capabilities.kbps",
9074 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
9077 { &hf_openflow_v5_meter_features_capabilities_pktps
,
9078 { "OFPMF_PKTPS", "openflow_v5.meter_features.capabilities.ptkps",
9079 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
9082 { &hf_openflow_v5_meter_features_capabilities_burst
,
9083 { "OFPMF_BURST", "openflow_v5.meter_features.capabilities.burst",
9084 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
9087 { &hf_openflow_v5_meter_features_capabilities_stats
,
9088 { "OFPMF_STATS", "openflow_v5.meter_features.capabilities.stats",
9089 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
9092 { &hf_openflow_v5_meter_features_max_bands
,
9093 { "Max bands", "openflow_v5.meter_features.max_bands",
9094 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9097 { &hf_openflow_v5_meter_features_max_color
,
9098 { "Max colors", "openflow_v5.meter_features.max_color",
9099 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9102 { &hf_openflow_v5_meter_features_pad
,
9103 { "Pad", "openflow_v5.meter_features.pad",
9104 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9107 { &hf_openflow_v5_flow_update_length
,
9108 { "Length", "openflow_v5.flow_update.length",
9109 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9112 { &hf_openflow_v5_flow_update_event
,
9113 { "Length", "openflow_v5.flow_update.event",
9114 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_flow_monitor_events
), 0x0,
9117 { &hf_openflow_v5_flow_update_full_table_id
,
9118 { "Table ID", "openflow_v5.flow_update.full.table_id",
9119 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
9122 { &hf_openflow_v5_flow_update_full_reason
,
9123 { "Reason", "openflow_v5.flow_update.full.reason",
9124 FT_UINT8
, BASE_DEC
, VALS(openflow_v5_flow_removed_reason_values
), 0x0,
9127 { &hf_openflow_v5_flow_update_full_zero
,
9128 { "Zero", "openflow_v5.flow_update.full.zero",
9129 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9132 { &hf_openflow_v5_flow_update_full_idle_timeout
,
9133 { "Idle timeout", "openflow_v5.flow_update.full.idle_timeout",
9134 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9137 { &hf_openflow_v5_flow_update_full_hard_timeout
,
9138 { "Hard timeout", "openflow_v5.flow_update.full.hard_timeout",
9139 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9142 { &hf_openflow_v5_flow_update_full_priority
,
9143 { "Priority", "openflow_v5.flow_update.full.priority",
9144 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9147 { &hf_openflow_v5_flow_update_full_zeros
,
9148 { "Zeros", "openflow_v5.flow_update.full.zeros",
9149 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9152 { &hf_openflow_v5_flow_update_full_cookie
,
9153 { "Cookie", "openflow_v5.flow_update.full.cookie",
9154 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
9157 { &hf_openflow_v5_flow_update_abbrev_xid
,
9158 { "Transaction ID", "openflow_v5.flow_update.abbrev.xid",
9159 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9162 { &hf_openflow_v5_flow_update_paused_zeros
,
9163 { "Zeros", "openflow_v5.flow_update.paused.zeros",
9164 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9167 { &hf_openflow_v5_multipart_reply_type
,
9168 { "Type", "openflow_v5.multipart_reply.type",
9169 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_multipart_type_values
), 0x0,
9172 { &hf_openflow_v5_multipart_reply_flags
,
9173 { "Flags", "openflow_v5.multipart_reply.flags",
9174 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
9177 { &hf_openflow_v5_multipart_reply_flags_more
,
9178 { "OFPMPF_REPLY_MORE", "openflow_v5.multipart_reply.flags.more",
9179 FT_UINT16
, BASE_HEX
, NULL
, OFPMPF_REPLY_MORE
,
9182 { &hf_openflow_v5_multipart_reply_pad
,
9183 { "Pad", "openflow_v5.multipart_reply.pad",
9184 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9187 { &hf_openflow_v5_multipart_reply_experimenter_experimenter
,
9188 { "Experimenter", "openflow_v5.multipart_reply.experimenter.experimenter",
9189 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9192 { &hf_openflow_v5_multipart_reply_experimenter_exp_type
,
9193 { "Experimenter type", "openflow_v5.multipart_reply.experimenter.exp_type",
9194 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9197 { &hf_openflow_v5_table_desc_length
,
9198 { "Length", "openflow_v5.table_desc.length",
9199 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9202 { &hf_openflow_v5_table_desc_table_id
,
9203 { "Table ID", "openflow_v5.table_desc.table_id",
9204 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_table_reserved_values
), 0x0,
9207 { &hf_openflow_v5_table_desc_pad
,
9208 { "Pad", "openflow_v5.table_desc.pad",
9209 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9212 { &hf_openflow_v5_table_desc_config
,
9213 { "Config", "openflow_v5.table_desc.config",
9214 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9217 { &hf_openflow_v5_table_desc_config_eviction
,
9218 { "OFPTC_EVICTION", "openflow_v5.table_desc.config.eviction",
9219 FT_BOOLEAN
, 32, NULL
, OFPTC_EVICTION
,
9222 { &hf_openflow_v5_table_desc_config_vacancy_events
,
9223 { "OFPTC_VACANCY_EVENTS", "openflow_v5.table_desc.config.vacancy_events",
9224 FT_BOOLEAN
, 32, NULL
, OFPTC_VACANCY_EVENTS
,
9227 { &hf_openflow_v5_queue_desc_port_no
,
9228 { "Port", "openflow_v5.queue_desc.port_no",
9229 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_port_reserved_values
), 0x0,
9232 { &hf_openflow_v5_queue_desc_queue_id
,
9233 { "Queue ID", "openflow_v5.queue_desc.queue_id",
9234 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_queue_reserved_values
), 0x0,
9237 { &hf_openflow_v5_queue_desc_len
,
9238 { "Length", "openflow_v5.queue_desc.len",
9239 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9242 { &hf_openflow_v5_queue_desc_pad
,
9243 { "Pad", "openflow_v5.queue_desc.pad",
9244 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9247 { &hf_openflow_v5_queue_desc_prop_property
,
9248 { "Property", "openflow_v5.queue_desc_prop.property",
9249 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_queue_desc_prop_property_values
), 0x0,
9252 { &hf_openflow_v5_queue_desc_prop_len
,
9253 { "Length", "openflow_v5.queue_desc_prop.len",
9254 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9257 { &hf_openflow_v5_queue_desc_prop_pad
,
9258 { "Pad", "openflow_v5.queue_desc_prop.pad",
9259 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9262 { &hf_openflow_v5_queue_desc_prop_min_rate_rate
,
9263 { "Rate", "openflow_v5.queue_desc_prop.min_rate.rate",
9264 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_queue_desc_prop_min_rate_reserved_values
), 0x0,
9267 { &hf_openflow_v5_queue_desc_prop_min_rate_pad
,
9268 { "Pad", "openflow_v5.queue_desc_prop.min_rate.pad",
9269 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9272 { &hf_openflow_v5_queue_desc_prop_max_rate_rate
,
9273 { "Rate", "openflow_v5.queue_desc_prop.max_rate.rate",
9274 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_queue_desc_prop_max_rate_reserved_values
), 0x0,
9277 { &hf_openflow_v5_queue_desc_prop_max_rate_pad
,
9278 { "Pad", "openflow_v5.queue_desc_prop.max_rate.pad",
9279 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9282 { &hf_openflow_v5_queue_desc_prop_experimenter_experimenter
,
9283 { "Experimenter", "openflow_v5.queue_desc_prop.experimenter.experimenter",
9284 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9287 { &hf_openflow_v5_queue_desc_prop_experimenter_exp_type
,
9288 { "Exp type", "openflow_v5.queue_desc_prop.experimenter.exp_type",
9289 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9292 { &hf_openflow_v5_role_request_role
,
9293 { "Role", "openflow_v5.role_request.role",
9294 FT_UINT32
, BASE_HEX
, VALS(openflow_v5_controller_role_values
), 0x0,
9297 { &hf_openflow_v5_role_request_pad
,
9298 { "Pad", "openflow_v5.role_request.pad",
9299 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9302 { &hf_openflow_v5_role_request_generation_id
,
9303 { "Generation ID", "openflow_v5.role_request.generation_id",
9304 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
9307 { &hf_openflow_v5_role_reply_role
,
9308 { "Role", "openflow_v5.role_reply.role",
9309 FT_UINT32
, BASE_HEX
, VALS(openflow_v5_controller_role_values
), 0x0,
9312 { &hf_openflow_v5_role_reply_pad
,
9313 { "Pad", "openflow_v5.role_reply.pad",
9314 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9317 { &hf_openflow_v5_role_reply_generation_id
,
9318 { "Generation ID", "openflow_v5.role_reply.generation_id",
9319 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
9322 { &hf_openflow_v5_async_config_prop_type
,
9323 { "Type", "openflow_v5.async_config_prop.type",
9324 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_async_config_prop_type_values
), 0x0,
9327 { &hf_openflow_v5_async_config_prop_length
,
9328 { "Length", "openflow_v5.async_config_prop.length",
9329 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9332 { &hf_openflow_v5_async_config_prop_reason_packet_in_mask
,
9333 { "Mask", "openflow_v5.async_config_prop.reason.packet_in.mask",
9334 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9337 { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_table_miss
,
9338 { "OFPR_TABLE_MISS", "openflow_v5.async_config_prop.reason.packet_in.mask.table_miss",
9339 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_TABLE_MISS
,
9342 { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_apply_action
,
9343 { "OFPR_APPLY_ACTION", "openflow_v5.async_config_prop.reason.packet_in.mask.apply_action",
9344 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_APPLY_ACTION
,
9347 { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_invalid_ttl
,
9348 { "OFPR_INVALID_TTL", "openflow_v5.async_config_prop.reason.packet_in.mask.invalid_ttl",
9349 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_INVALID_TTL
,
9352 { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_action_set
,
9353 { "OFPR_ACTION_SET", "openflow_v5.async_config_prop.reason.packet_in.mask.action_set",
9354 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_ACTION_SET
,
9357 { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_group
,
9358 { "OFPR_GROUP", "openflow_v5.async_config_prop.reason.packet_in.mask.group",
9359 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_GROUP
,
9362 { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_packet_out
,
9363 { "OFPR_PACKET_OUT", "openflow_v5.async_config_prop.reason.packet_in.mask.packet_out",
9364 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_PACKET_OUT
,
9367 { &hf_openflow_v5_async_config_prop_reason_port_status_mask
,
9368 { "Mask", "openflow_v5.async_config_prop.reason.port_status.mask",
9369 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9372 { &hf_openflow_v5_async_config_prop_reason_port_status_mask_add
,
9373 { "OFPPR_ADD", "openflow_v5.async_config_prop.reason.port_status.mask.add",
9374 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_ADD
,
9377 { &hf_openflow_v5_async_config_prop_reason_port_status_mask_delete
,
9378 { "OFPPR_DELETE", "openflow_v5.async_config_prop.reason.port_status.mask.delete",
9379 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_DELETE
,
9382 { &hf_openflow_v5_async_config_prop_reason_port_status_mask_modify
,
9383 { "OFPPR_MODIFY", "openflow_v5.async_config_prop.reason.port_status.mask.modify",
9384 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_MODIFY
,
9387 { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask
,
9388 { "Mask", "openflow_v5.async_config_prop.reason.flow_removed.mask",
9389 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9392 { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_idle_timeout
,
9393 { "OFPRR_IDLE_TIMEOUT", "openflow_v5.async_config_prop.reason.flow_removed.mask.idle_timeout",
9394 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_IDLE_TIMEOUT
,
9397 { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_hard_timeout
,
9398 { "OFPRR_HARD_TIMEOUT", "openflow_v5.async_config_prop.reason.flow_removed.mask.hard_timeout",
9399 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_HARD_TIMEOUT
,
9402 { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_delete
,
9403 { "OFPRR_DELETE", "openflow_v5.async_config_prop.reason.flow_removed.mask.delete",
9404 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_DELETE
,
9407 { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_group_delete
,
9408 { "OFPRR_GROUP_DELETE", "openflow_v5.async_config_prop.reason.flow_removed.mask.group_delete",
9409 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_GROUP_DELETE
,
9412 { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_meter_delete
,
9413 { "OFPRR_METER_DELETE", "openflow_v5.async_config_prop.reason.flow_removed.mask.meter_delete",
9414 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_METER_DELETE
,
9417 { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_eviction
,
9418 { "OFPRR_EVICTION", "openflow_v5.async_config_prop.reason.flow_removed.mask.eviction",
9419 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_EVICTION
,
9422 { &hf_openflow_v5_async_config_prop_reason_role_status_mask
,
9423 { "Mask", "openflow_v5.async_config_prop.reason.role_status.mask",
9424 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9427 { &hf_openflow_v5_async_config_prop_reason_role_status_mask_master_request
,
9428 { "OFPCRR_MASTER_REQUEST", "openflow_v5.async_config_prop.reason.role_status.mask.master_request",
9429 FT_BOOLEAN
, 32, NULL
, 1 << OFPCRR_MASTER_REQUEST
,
9432 { &hf_openflow_v5_async_config_prop_reason_role_status_mask_config
,
9433 { "OFPCRR_CONFIG", "openflow_v5.async_config_prop.reason.role_status.mask.config",
9434 FT_BOOLEAN
, 32, NULL
, 1 << OFPCRR_CONFIG
,
9437 { &hf_openflow_v5_async_config_prop_reason_role_status_mask_experimenter
,
9438 { "OFPCRR_EXPERIMENTER", "openflow_v5.async_config_prop.reason.role_status.mask.experimenter",
9439 FT_BOOLEAN
, 32, NULL
, 1 << OFPCRR_EXPERIMENTER
,
9442 { &hf_openflow_v5_async_config_prop_reason_table_status_mask
,
9443 { "Mask", "openflow_v5.async_config_prop.reason.table_status.mask",
9444 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9448 { &hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_down
,
9449 { "OFPTR_VACANCY_DOWN", "openflow_v5.async_config_prop.reason.table_status.mask.vacancy_u",
9450 FT_BOOLEAN
, 32, NULL
, 1 << OFPTR_VACANCY_DOWN
,
9453 { &hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_up
,
9454 { "OFPTR_VACANCY_UP", "openflow_v5.async_config_prop.reason.table_status.mask.vacancy_up",
9455 FT_BOOLEAN
, 32, NULL
, 1 << OFPTR_VACANCY_UP
,
9458 { &hf_openflow_v5_async_config_prop_reason_requestforward_mask
,
9459 { "Mask", "openflow_v5.async_config_prop.reason.requestforward.mask",
9460 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9463 { &hf_openflow_v5_async_config_prop_reason_requestforward_mask_group_mod
,
9464 { "OFPRFR_GROUP_MOD", "openflow_v5.async_config_prop.reason.requestforward.mask.group_mod",
9465 FT_BOOLEAN
, 32, NULL
, 1 << OFPRFR_GROUP_MOD
,
9468 { &hf_openflow_v5_async_config_prop_reason_requestforward_mask_meter_mod
,
9469 { "OFPRFR_METER_MOD", "openflow_v5.async_config_prop.reason.requestforward.mask.meter_mod",
9470 FT_BOOLEAN
, 32, NULL
, 1 << OFPRFR_METER_MOD
,
9473 { &hf_openflow_v5_async_config_prop_experimenter_experimenter
,
9474 { "Experimenter", "openflow_v5.async_config_prop.experimenter.experimenter",
9475 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9478 { &hf_openflow_v5_async_config_prop_experimenter_exp_type
,
9479 { "Exp type", "openflow_v5.async_config_prop.experimenter.exp_type",
9480 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9483 { &hf_openflow_v5_metermod_command
,
9484 { "Command", "openflow_v5.metermod.command",
9485 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_metermod_command_values
), 0x0,
9488 { &hf_openflow_v5_metermod_flags
,
9489 { "Flags", "openflow_v5.metermod.flags",
9490 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9493 { &hf_openflow_v5_metermod_flags_kbps
,
9494 { "OFPMF_KBPS", "openflow_v5.metermod.flags.kbps",
9495 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
9498 { &hf_openflow_v5_metermod_flags_pktps
,
9499 { "OFPMF_PKTPS", "openflow_v5.metermod.flags.ptkps",
9500 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
9503 { &hf_openflow_v5_metermod_flags_burst
,
9504 { "OFPMF_BURST", "openflow_v5.metermod.flags.burst",
9505 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
9508 { &hf_openflow_v5_metermod_flags_stats
,
9509 { "OFPMF_STATS", "openflow_v5.metermod.flags.stats",
9510 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
9513 { &hf_openflow_v5_metermod_meter_id
,
9514 { "Meter ID", "openflow_v5.metermod.meter_id",
9515 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v5_meter_id_reserved_values
), 0x0,
9518 { &hf_openflow_v5_role_status_role
,
9519 { "Role", "openflow_v5.role_status.role",
9520 FT_UINT32
, BASE_HEX
, VALS(openflow_v5_controller_role_values
), 0x0,
9523 { &hf_openflow_v5_role_status_reason
,
9524 { "Reason", "openflow_v5.role_status.reason",
9525 FT_UINT8
, BASE_HEX
, VALS(openflow_v5_role_status_reason_values
), 0x0,
9528 { &hf_openflow_v5_role_status_pad
,
9529 { "Pad", "openflow_v5.role_status.pad",
9530 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9533 { &hf_openflow_v5_role_status_generation_id
,
9534 { "Generation ID", "openflow_v5.role_status.generation_id",
9535 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
9538 { &hf_openflow_v5_table_status_reason
,
9539 { "Reason", "openflow_v5.table_status.reason",
9540 FT_UINT8
, BASE_HEX
, VALS(openflow_v5_table_status_reason_values
), 0x0,
9543 { &hf_openflow_v5_table_status_pad
,
9544 { "Pad", "openflow_v5.table_status.pad",
9545 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9548 { &hf_openflow_v5_bundle_control_bundle_id
,
9549 { "Bundle ID", "openflow_v5.bundle_control.bundle_id",
9550 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9553 { &hf_openflow_v5_bundle_control_type
,
9554 { "Type", "openflow_v5.bundle_control.type",
9555 FT_UINT16
, BASE_HEX
, VALS(openflow_v5_bundle_control_type_values
), 0x0,
9558 { &hf_openflow_v5_bundle_control_flags
,
9559 { "Flags", "openflow_v5.bundle_control.flags",
9560 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
9563 { &hf_openflow_v5_bundle_control_flags_atomic
,
9564 { "OFPBF_ATOMIC", "openflow_v5.bundle_control.flags.atomic",
9565 FT_BOOLEAN
, 16, NULL
, OFPBF_ATOMIC
,
9568 { &hf_openflow_v5_bundle_control_flags_ordered
,
9569 { "OFPBF_ORDERED", "openflow_v5.bundle_control.flags.ordered",
9570 FT_BOOLEAN
, 16, NULL
, OFPBF_ORDERED
,
9573 { &hf_openflow_v5_bundle_prop_type
,
9574 { "Type", "openflow_v5.bundle_prop.type",
9575 FT_UINT16
, BASE_DEC
, VALS(openflow_v5_bundle_prop_type_values
), 0x0,
9578 { &hf_openflow_v5_bundle_prop_length
,
9579 { "Length", "openflow_v5.bundle_prop.length",
9580 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9583 { &hf_openflow_v5_bundle_prop_experimenter_experimenter
,
9584 { "Experimenter", "openflow_v5.bundle_prop.experimenter.experimenter",
9585 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9588 { &hf_openflow_v5_bundle_prop_experimenter_exp_type
,
9589 { "Exp type", "openflow_v5.bundle_prop.experimenter.exp_type",
9590 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9593 { &hf_openflow_v5_bundle_add_bundle_id
,
9594 { "Bundle ID", "openflow_v5.bundle_add.bundle_id",
9595 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9598 { &hf_openflow_v5_bundle_add_pad
,
9599 { "Pad", "openflow_v5.table_status.pad",
9600 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9603 { &hf_openflow_v5_bundle_add_flags
,
9604 { "Flags", "openflow_v5.bundle_add.flags",
9605 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
9608 { &hf_openflow_v5_bundle_add_flags_atomic
,
9609 { "OFPBF_ATOMIC", "openflow_v5.bundle_add.flags.atomic",
9610 FT_BOOLEAN
, 16, NULL
, OFPBF_ATOMIC
,
9613 { &hf_openflow_v5_bundle_add_flags_ordered
,
9614 { "OFPBF_ORDERED", "openflow_v5.bundle_add.flags.ordered",
9615 FT_BOOLEAN
, 16, NULL
, OFPBF_ORDERED
,
9620 static int *ett
[] = {
9622 &ett_openflow_v5_flowmod_flags
,
9623 &ett_openflow_v5_bucket
,
9624 &ett_openflow_v5_oxm
,
9625 &ett_openflow_v5_match
,
9626 &ett_openflow_v5_action
,
9627 &ett_openflow_v5_instruction
,
9628 &ett_openflow_v5_port
,
9629 &ett_openflow_v5_port_desc_prop
,
9630 &ett_openflow_v5_port_desc_prop_ethernet_current
,
9631 &ett_openflow_v5_port_desc_prop_ethernet_advertised
,
9632 &ett_openflow_v5_port_desc_prop_ethernet_supported
,
9633 &ett_openflow_v5_port_desc_prop_ethernet_peer
,
9634 &ett_openflow_v5_port_desc_prop_optical_supported
,
9635 &ett_openflow_v5_port_stats_prop
,
9636 &ett_openflow_v5_port_stats_prop_optical_flags
,
9637 &ett_openflow_v5_port_config
,
9638 &ett_openflow_v5_port_state
,
9639 &ett_openflow_v5_meter_band
,
9640 &ett_openflow_v5_hello_element
,
9641 &ett_openflow_v5_error_data
,
9642 &ett_openflow_v5_switch_features_capabilities
,
9643 &ett_openflow_v5_switch_config_flags
,
9644 &ett_openflow_v5_packet_in_data
,
9645 &ett_openflow_v5_packet_out_data
,
9646 &ett_openflow_v5_portmod_prop
,
9647 &ett_openflow_v5_portmod_prop_ethernet_advertise
,
9648 &ett_openflow_v5_portmod_prop_optical_configure
,
9649 &ett_openflow_v5_portmod_config
,
9650 &ett_openflow_v5_portmod_mask
,
9651 &ett_openflow_v5_tablemod_config
,
9652 &ett_openflow_v5_tablemod_prop
,
9653 &ett_openflow_v5_tablemod_prop_eviction_flags
,
9654 &ett_openflow_v5_table_features
,
9655 &ett_openflow_v5_table_features_capabilities
,
9656 &ett_openflow_v5_table_feature_prop
,
9657 &ett_openflow_v5_table_feature_prop_instruction_id
,
9658 &ett_openflow_v5_table_feature_prop_action_id
,
9659 &ett_openflow_v5_table_feature_prop_oxm_id
,
9660 &ett_openflow_v5_flow_monitor_request_flags
,
9661 &ett_openflow_v5_multipart_request_flags
,
9662 &ett_openflow_v5_flow_stats
,
9663 &ett_openflow_v5_flow_stats_flags
,
9664 &ett_openflow_v5_table_stats
,
9665 &ett_openflow_v5_port_stats
,
9666 &ett_openflow_v5_queue_stats
,
9667 &ett_openflow_v5_queue_stats_prop
,
9668 &ett_openflow_v5_bucket_counter
,
9669 &ett_openflow_v5_group_stats
,
9670 &ett_openflow_v5_group_desc
,
9671 &ett_openflow_v5_group_features_types
,
9672 &ett_openflow_v5_group_features_capabilities
,
9673 &ett_openflow_v5_group_features_actions_all
,
9674 &ett_openflow_v5_group_features_actions_select
,
9675 &ett_openflow_v5_group_features_actions_indirect
,
9676 &ett_openflow_v5_group_features_actions_ff
,
9677 &ett_openflow_v5_meter_band_stats
,
9678 &ett_openflow_v5_meter_stats
,
9679 &ett_openflow_v5_meter_config
,
9680 &ett_openflow_v5_meter_config_flags
,
9681 &ett_openflow_v5_meter_features_band_types
,
9682 &ett_openflow_v5_meter_features_capabilities
,
9683 &ett_openflow_v5_flow_update
,
9684 &ett_openflow_v5_multipart_reply_flags
,
9685 &ett_openflow_v5_table_desc
,
9686 &ett_openflow_v5_table_desc_config
,
9687 &ett_openflow_v5_queue_desc
,
9688 &ett_openflow_v5_queue_desc_prop
,
9689 &ett_openflow_v5_async_config_prop
,
9690 &ett_openflow_v5_async_config_prop_reason_packet_in_mask
,
9691 &ett_openflow_v5_async_config_prop_reason_port_status_mask
,
9692 &ett_openflow_v5_async_config_prop_reason_flow_removed_mask
,
9693 &ett_openflow_v5_async_config_prop_reason_role_status_mask
,
9694 &ett_openflow_v5_async_config_prop_reason_table_status_mask
,
9695 &ett_openflow_v5_async_config_prop_reason_requestforward_mask
,
9696 &ett_openflow_v5_metermod_flags
,
9697 &ett_openflow_v5_requestforward_request
,
9698 &ett_openflow_v5_bundle_control_flags
,
9699 &ett_openflow_v5_bundle_prop
,
9700 &ett_openflow_v5_bundle_add_flags
,
9701 &ett_openflow_v5_bundle_add_message
9704 static ei_register_info ei
[] = {
9705 { &ei_openflow_v5_oxm_undecoded
,
9706 { "openflow_v5.oxm.undecoded", PI_UNDECODED
, PI_NOTE
,
9707 "Unknown OMX body.", EXPFILL
}
9709 { &ei_openflow_v5_match_undecoded
,
9710 { "openflow_v5.match.undecoded", PI_UNDECODED
, PI_NOTE
,
9711 "Unknown match body.", EXPFILL
}
9713 { &ei_openflow_v5_action_undecoded
,
9714 { "openflow_v5.action.undecoded", PI_UNDECODED
, PI_NOTE
,
9715 "Unknown action body.", EXPFILL
}
9717 { &ei_openflow_v5_instruction_undecoded
,
9718 { "openflow_v5.instruction.undecoded", PI_UNDECODED
, PI_NOTE
,
9719 "Unknown instruction body.", EXPFILL
}
9721 { &ei_openflow_v5_port_desc_prop_undecoded
,
9722 { "openflow_v5.port.desc_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9723 "Unknown port desc. property body.", EXPFILL
}
9725 { &ei_openflow_v5_port_stats_prop_undecoded
,
9726 { "openflow_v5.port.stats_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9727 "Unknown port stats. property body.", EXPFILL
}
9729 { &ei_openflow_v5_meter_band_undecoded
,
9730 { "openflow_v5.meter_band.undecoded", PI_UNDECODED
, PI_NOTE
,
9731 "Unknown meter band body.", EXPFILL
}
9733 { &ei_openflow_v5_hello_element_undecoded
,
9734 { "openflow_v5.hello_element.undecoded", PI_UNDECODED
, PI_NOTE
,
9735 "Unknown hello element body.", EXPFILL
}
9737 { &ei_openflow_v5_error_undecoded
,
9738 { "openflow_v5.error.undecoded", PI_UNDECODED
, PI_NOTE
,
9739 "Unknown error data.", EXPFILL
}
9741 { &ei_openflow_v5_experimenter_undecoded
,
9742 { "openflow_v5.experimenter.undecoded", PI_UNDECODED
, PI_NOTE
,
9743 "Unknown experimenter body.", EXPFILL
}
9745 { &ei_openflow_v5_portmod_prop_undecoded
,
9746 { "openflow_v5.portmod_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9747 "Unknown portmod property body.", EXPFILL
}
9749 { &ei_openflow_v5_tablemod_prop_undecoded
,
9750 { "openflow_v5.tablemod_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9751 "Unknown tablemod property body.", EXPFILL
}
9753 { &ei_openflow_v5_table_feature_prop_undecoded
,
9754 { "openflow_v5.table_feature_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9755 "Unknown table feature property body.", EXPFILL
}
9757 { &ei_openflow_v5_multipart_request_undecoded
,
9758 { "openflow_v5.multipart_request.undecoded", PI_UNDECODED
, PI_NOTE
,
9759 "Unknown multipart request body.", EXPFILL
}
9761 { &ei_openflow_v5_queue_stats_prop_undecoded
,
9762 { "openflow_v5.queue_stats_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9763 "Unknown queue stats prop body.", EXPFILL
}
9765 { &ei_openflow_v5_flow_update_undecoded
,
9766 { "openflow_v5.flow_update.undecoded", PI_UNDECODED
, PI_NOTE
,
9767 "Unknown flow update body.", EXPFILL
}
9769 { &ei_openflow_v5_multipart_reply_undecoded
,
9770 { "openflow_v5.multipart_reply.undecoded", PI_UNDECODED
, PI_NOTE
,
9771 "Unknown multipart reply body.", EXPFILL
}
9773 { &ei_openflow_v5_queue_desc_prop_undecoded
,
9774 { "openflow_v5.queue_desc_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9775 "Unknown queue property body.", EXPFILL
}
9777 { &ei_openflow_v5_async_config_prop_undecoded
,
9778 { "openflow_v5.async_config_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9779 "Unknown async config property body.", EXPFILL
}
9781 {&ei_openflow_v5_bundle_prop_undecoded
,
9782 { "openflow_v5.bundle_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
9783 "Unknown bundle prop body.", EXPFILL
}
9785 {&ei_openflow_v5_message_undecoded
,
9786 { "openflow_v5.message.undecoded", PI_UNDECODED
, PI_NOTE
,
9787 "Unknown message body.", EXPFILL
}
9789 {&ei_openflow_v5_length_too_short
,
9790 { "openflow_v5.message.length_too_short", PI_MALFORMED
, PI_ERROR
,
9791 "Length is too short.", EXPFILL
}
9796 expert_module_t
*expert_openflow_v5
;
9798 /* Register the protocol name and description */
9799 proto_openflow_v5
= proto_register_protocol("OpenFlow 1.4", "openflow_v5", "openflow_v5");
9801 register_dissector("openflow_v5", dissect_openflow_v5
, proto_openflow_v5
);
9803 /* Required function calls to register the header fields and subtrees */
9804 proto_register_field_array(proto_openflow_v5
, hf
, array_length(hf
));
9805 proto_register_subtree_array(ett
, array_length(ett
));
9806 expert_openflow_v5
= expert_register_protocol(proto_openflow_v5
);
9807 expert_register_field_array(expert_openflow_v5
, ei
, array_length(ei
));
9811 proto_reg_handoff_openflow_v5(void)
9813 eth_withoutfcs_handle
= find_dissector_add_dependency("eth_withoutfcs", proto_openflow_v5
);
9817 * Editor modelines - https://www.wireshark.org/tools/modelines.html
9822 * indent-tabs-mode: nil
9825 * vi: set shiftwidth=4 tabstop=8 expandtab:
9826 * :indentSize=4:tabSize=8:noTabs=true: