1 /* packet-openflow_v4.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_v4(void);
23 void proto_reg_handoff_openflow_v4(void);
24 static int dissect_openflow_message_v4(tvbuff_t
*, packet_info
*, proto_tree
*, int);
26 static dissector_handle_t eth_withoutfcs_handle
;
28 static int proto_openflow_v4
;
29 static int hf_openflow_v4_version
;
30 static int hf_openflow_v4_type
;
31 static int hf_openflow_v4_length
;
32 static int hf_openflow_v4_xid
;
33 static int hf_openflow_v4_oxm_class
;
34 static int hf_openflow_v4_oxm_field
;
35 static int hf_openflow_v4_oxm_field_basic
;
36 static int hf_openflow_v4_oxm_hm
;
37 static int hf_openflow_v4_oxm_length
;
38 static int hf_openflow_v4_oxm_experimenter_experimenter
;
39 static int hf_openflow_v4_oxm_experimenter_value
;
40 static int hf_openflow_v4_oxm_value
;
41 static int hf_openflow_v4_oxm_value_etheraddr
;
42 static int hf_openflow_v4_oxm_value_vlan_present
;
43 static int hf_openflow_v4_oxm_value_vlan_vid
;
44 static int hf_openflow_v4_oxm_value_ethertype
;
45 static int hf_openflow_v4_oxm_value_ipv4addr
;
46 static int hf_openflow_v4_oxm_value_ipv6addr
;
47 static int hf_openflow_v4_oxm_value_ipproto
;
48 static int hf_openflow_v4_oxm_value_uint16
;
49 static int hf_openflow_v4_oxm_value_uint24
;
50 static int hf_openflow_v4_oxm_value_uint32
;
51 static int hf_openflow_v4_oxm_mask
;
52 static int hf_openflow_v4_oxm_mask_etheraddr
;
53 static int hf_openflow_v4_oxm_mask_ipv4addr
;
54 static int hf_openflow_v4_oxm_mask_ipv6addr
;
55 static int hf_openflow_v4_oxm_mask_vlan
;
56 static int hf_openflow_v4_match_type
;
57 static int hf_openflow_v4_match_length
;
58 static int hf_openflow_v4_match_pad
;
59 static int hf_openflow_v4_action_type
;
60 static int hf_openflow_v4_action_length
;
61 static int hf_openflow_v4_action_experimenter_experimenter
;
62 static int hf_openflow_v4_action_output_port
;
63 static int hf_openflow_v4_action_output_max_len
;
64 static int hf_openflow_v4_action_output_pad
;
65 static int hf_openflow_v4_action_copy_ttl_out_pad
;
66 static int hf_openflow_v4_action_copy_ttl_in_pad
;
67 static int hf_openflow_v4_action_set_mpls_ttl_ttl
;
68 static int hf_openflow_v4_action_set_mpls_ttl_pad
;
69 static int hf_openflow_v4_action_dec_mpls_ttl_pad
;
70 static int hf_openflow_v4_action_push_vlan_ethertype
;
71 static int hf_openflow_v4_action_push_vlan_pad
;
72 static int hf_openflow_v4_action_pop_vlan_pad
;
73 static int hf_openflow_v4_action_push_mpls_ethertype
;
74 static int hf_openflow_v4_action_push_mpls_pad
;
75 static int hf_openflow_v4_action_pop_mpls_ethertype
;
76 static int hf_openflow_v4_action_pop_mpls_pad
;
77 static int hf_openflow_v4_action_set_queue_queue_id
;
78 static int hf_openflow_v4_action_group_group_id
;
79 static int hf_openflow_v4_action_set_nw_ttl_ttl
;
80 static int hf_openflow_v4_action_set_nw_ttl_pad
;
81 static int hf_openflow_v4_action_dec_nw_ttl_pad
;
82 static int hf_openflow_v4_action_set_field_pad
;
83 static int hf_openflow_v4_action_push_pbb_ethertype
;
84 static int hf_openflow_v4_action_push_pbb_pad
;
85 static int hf_openflow_v4_action_pop_pbb_pad
;
86 static int hf_openflow_v4_instruction_type
;
87 static int hf_openflow_v4_instruction_length
;
88 static int hf_openflow_v4_instruction_experimenter_experimenter
;
89 static int hf_openflow_v4_instruction_goto_table_table_id
;
90 static int hf_openflow_v4_instruction_goto_table_pad
;
91 static int hf_openflow_v4_instruction_write_metadata_pad
;
92 static int hf_openflow_v4_instruction_write_metadata_value
;
93 static int hf_openflow_v4_instruction_write_metadata_mask
;
94 static int hf_openflow_v4_instruction_actions_pad
;
95 static int hf_openflow_v4_instruction_meter_meter_id
;
96 static int hf_openflow_v4_port_port_no
;
97 static int hf_openflow_v4_port_pad
;
98 static int hf_openflow_v4_port_hw_addr
;
99 static int hf_openflow_v4_port_pad2
;
100 static int hf_openflow_v4_port_name
;
101 static int hf_openflow_v4_port_config
;
102 static int hf_openflow_v4_port_config_port_down
;
103 static int hf_openflow_v4_port_config_no_recv
;
104 static int hf_openflow_v4_port_config_no_fwd
;
105 static int hf_openflow_v4_port_config_no_packet_in
;
106 static int hf_openflow_v4_port_state
;
107 static int hf_openflow_v4_port_state_link_down
;
108 static int hf_openflow_v4_port_state_blocked
;
109 static int hf_openflow_v4_port_state_live
;
110 static int hf_openflow_v4_port_current
;
111 static int hf_openflow_v4_port_current_10mb_hd
;
112 static int hf_openflow_v4_port_current_10mb_fd
;
113 static int hf_openflow_v4_port_current_100mb_hd
;
114 static int hf_openflow_v4_port_current_100mb_fd
;
115 static int hf_openflow_v4_port_current_1gb_hd
;
116 static int hf_openflow_v4_port_current_1gb_fd
;
117 static int hf_openflow_v4_port_current_10gb_fd
;
118 static int hf_openflow_v4_port_current_40gb_fd
;
119 static int hf_openflow_v4_port_current_100gb_fd
;
120 static int hf_openflow_v4_port_current_1tb_fd
;
121 static int hf_openflow_v4_port_current_other
;
122 static int hf_openflow_v4_port_current_copper
;
123 static int hf_openflow_v4_port_current_fiber
;
124 static int hf_openflow_v4_port_current_autoneg
;
125 static int hf_openflow_v4_port_current_pause
;
126 static int hf_openflow_v4_port_current_pause_asym
;
127 static int hf_openflow_v4_port_advertised
;
128 static int hf_openflow_v4_port_advertised_10mb_hd
;
129 static int hf_openflow_v4_port_advertised_10mb_fd
;
130 static int hf_openflow_v4_port_advertised_100mb_hd
;
131 static int hf_openflow_v4_port_advertised_100mb_fd
;
132 static int hf_openflow_v4_port_advertised_1gb_hd
;
133 static int hf_openflow_v4_port_advertised_1gb_fd
;
134 static int hf_openflow_v4_port_advertised_10gb_fd
;
135 static int hf_openflow_v4_port_advertised_40gb_fd
;
136 static int hf_openflow_v4_port_advertised_100gb_fd
;
137 static int hf_openflow_v4_port_advertised_1tb_fd
;
138 static int hf_openflow_v4_port_advertised_other
;
139 static int hf_openflow_v4_port_advertised_copper
;
140 static int hf_openflow_v4_port_advertised_fiber
;
141 static int hf_openflow_v4_port_advertised_autoneg
;
142 static int hf_openflow_v4_port_advertised_pause
;
143 static int hf_openflow_v4_port_advertised_pause_asym
;
144 static int hf_openflow_v4_port_supported
;
145 static int hf_openflow_v4_port_supported_10mb_hd
;
146 static int hf_openflow_v4_port_supported_10mb_fd
;
147 static int hf_openflow_v4_port_supported_100mb_hd
;
148 static int hf_openflow_v4_port_supported_100mb_fd
;
149 static int hf_openflow_v4_port_supported_1gb_hd
;
150 static int hf_openflow_v4_port_supported_1gb_fd
;
151 static int hf_openflow_v4_port_supported_10gb_fd
;
152 static int hf_openflow_v4_port_supported_40gb_fd
;
153 static int hf_openflow_v4_port_supported_100gb_fd
;
154 static int hf_openflow_v4_port_supported_1tb_fd
;
155 static int hf_openflow_v4_port_supported_other
;
156 static int hf_openflow_v4_port_supported_copper
;
157 static int hf_openflow_v4_port_supported_fiber
;
158 static int hf_openflow_v4_port_supported_autoneg
;
159 static int hf_openflow_v4_port_supported_pause
;
160 static int hf_openflow_v4_port_supported_pause_asym
;
161 static int hf_openflow_v4_port_peer
;
162 static int hf_openflow_v4_port_peer_10mb_hd
;
163 static int hf_openflow_v4_port_peer_10mb_fd
;
164 static int hf_openflow_v4_port_peer_100mb_hd
;
165 static int hf_openflow_v4_port_peer_100mb_fd
;
166 static int hf_openflow_v4_port_peer_1gb_hd
;
167 static int hf_openflow_v4_port_peer_1gb_fd
;
168 static int hf_openflow_v4_port_peer_10gb_fd
;
169 static int hf_openflow_v4_port_peer_40gb_fd
;
170 static int hf_openflow_v4_port_peer_100gb_fd
;
171 static int hf_openflow_v4_port_peer_1tb_fd
;
172 static int hf_openflow_v4_port_peer_other
;
173 static int hf_openflow_v4_port_peer_copper
;
174 static int hf_openflow_v4_port_peer_fiber
;
175 static int hf_openflow_v4_port_peer_autoneg
;
176 static int hf_openflow_v4_port_peer_pause
;
177 static int hf_openflow_v4_port_peer_pause_asym
;
178 static int hf_openflow_v4_port_curr_speed
;
179 static int hf_openflow_v4_port_max_speed
;
180 static int hf_openflow_v4_meter_band_type
;
181 static int hf_openflow_v4_meter_band_len
;
182 static int hf_openflow_v4_meter_band_rate
;
183 static int hf_openflow_v4_meter_band_burst_size
;
184 static int hf_openflow_v4_meter_band_drop_pad
;
185 static int hf_openflow_v4_meter_band_dscp_remark_prec_level
;
186 static int hf_openflow_v4_meter_band_dscp_remark_pad
;
187 static int hf_openflow_v4_meter_band_experimenter_experimenter
;
188 static int hf_openflow_v4_hello_element_type
;
189 static int hf_openflow_v4_hello_element_length
;
190 static int hf_openflow_v4_hello_element_version_bitmap
;
191 static int hf_openflow_v4_hello_element_pad
;
192 static int hf_openflow_v4_error_type
;
193 static int hf_openflow_v4_error_hello_failed_code
;
194 static int hf_openflow_v4_error_bad_request_code
;
195 static int hf_openflow_v4_error_bad_action_code
;
196 static int hf_openflow_v4_error_bad_instruction_code
;
197 static int hf_openflow_v4_error_bad_match_code
;
198 static int hf_openflow_v4_error_flow_mod_failed_code
;
199 static int hf_openflow_v4_error_group_mod_failed_code
;
200 static int hf_openflow_v4_error_port_mod_failed_code
;
201 static int hf_openflow_v4_error_table_mod_failed_code
;
202 static int hf_openflow_v4_error_queue_op_failed_code
;
203 static int hf_openflow_v4_error_switch_config_failed_code
;
204 static int hf_openflow_v4_error_role_request_failed_code
;
205 static int hf_openflow_v4_error_meter_mod_failed_code
;
206 static int hf_openflow_v4_error_table_features_failed_code
;
207 static int hf_openflow_v4_error_code
;
208 static int hf_openflow_v4_error_data_text
;
209 static int hf_openflow_v4_error_data_body
;
210 static int hf_openflow_v4_error_experimenter
;
211 static int hf_openflow_v4_echo_data
;
212 static int hf_openflow_v4_experimenter_experimenter
;
213 static int hf_openflow_v4_experimenter_exp_type
;
214 static int hf_openflow_v4_switch_features_datapath_id
;
215 static int hf_openflow_v4_switch_features_n_buffers
;
216 static int hf_openflow_v4_switch_features_n_tables
;
217 static int hf_openflow_v4_switch_features_auxiliary_id
;
218 static int hf_openflow_v4_switch_features_pad
;
219 static int hf_openflow_v4_switch_features_capabilities
;
220 static int hf_openflow_v4_switch_features_capabilities_flow_stats
;
221 static int hf_openflow_v4_switch_features_capabilities_table_stats
;
222 static int hf_openflow_v4_switch_features_capabilities_port_stats
;
223 static int hf_openflow_v4_switch_features_capabilities_group_stats
;
224 static int hf_openflow_v4_switch_features_capabilities_ip_reasm
;
225 static int hf_openflow_v4_switch_features_capabilities_queue_stats
;
226 static int hf_openflow_v4_switch_features_capabilities_port_blocked
;
227 static int hf_openflow_v4_switch_features_reserved
;
228 static int hf_openflow_v4_switch_config_flags
;
229 static int hf_openflow_v4_switch_config_flags_fragments
;
230 static int hf_openflow_v4_switch_config_miss_send_len
;
231 static int hf_openflow_v4_packet_in_buffer_id
;
232 static int hf_openflow_v4_packet_in_total_len
;
233 static int hf_openflow_v4_packet_in_reason
;
234 static int hf_openflow_v4_packet_in_table_id
;
235 static int hf_openflow_v4_packet_in_cookie
;
236 static int hf_openflow_v4_packet_in_pad
;
237 static int hf_openflow_v4_flow_removed_cookie
;
238 static int hf_openflow_v4_flow_removed_priority
;
239 static int hf_openflow_v4_flow_removed_reason
;
240 static int hf_openflow_v4_flow_removed_table_id
;
241 static int hf_openflow_v4_flow_removed_duration_sec
;
242 static int hf_openflow_v4_flow_removed_duration_nsec
;
243 static int hf_openflow_v4_flow_removed_idle_timeout
;
244 static int hf_openflow_v4_flow_removed_hard_timeout
;
245 static int hf_openflow_v4_flow_removed_packet_count
;
246 static int hf_openflow_v4_flow_removed_byte_count
;
247 static int hf_openflow_v4_port_status_reason
;
248 static int hf_openflow_v4_port_status_pad
;
249 static int hf_openflow_v4_packet_out_buffer_id
;
250 static int hf_openflow_v4_packet_out_in_port
;
251 static int hf_openflow_v4_packet_out_acts_len
;
252 static int hf_openflow_v4_packet_out_pad
;
253 static int hf_openflow_v4_flowmod_cookie
;
254 static int hf_openflow_v4_flowmod_cookie_mask
;
255 static int hf_openflow_v4_flowmod_table_id
;
256 static int hf_openflow_v4_flowmod_command
;
257 static int hf_openflow_v4_flowmod_idle_timeout
;
258 static int hf_openflow_v4_flowmod_hard_timeout
;
259 static int hf_openflow_v4_flowmod_priority
;
260 static int hf_openflow_v4_flowmod_buffer_id
;
261 static int hf_openflow_v4_flowmod_out_port
;
262 static int hf_openflow_v4_flowmod_out_group
;
263 static int hf_openflow_v4_flowmod_flags
;
264 static int hf_openflow_v4_flowmod_flags_send_flow_rem
;
265 static int hf_openflow_v4_flowmod_flags_check_overlap
;
266 static int hf_openflow_v4_flowmod_flags_reset_counts
;
267 static int hf_openflow_v4_flowmod_flags_no_packet_counts
;
268 static int hf_openflow_v4_flowmod_flags_no_byte_counts
;
269 static int hf_openflow_v4_flowmod_pad
;
270 static int hf_openflow_v4_bucket_length
;
271 static int hf_openflow_v4_bucket_weight
;
272 static int hf_openflow_v4_bucket_watch_port
;
273 static int hf_openflow_v4_bucket_watch_group
;
274 static int hf_openflow_v4_bucket_pad
;
275 static int hf_openflow_v4_groupmod_command
;
276 static int hf_openflow_v4_groupmod_type
;
277 static int hf_openflow_v4_groupmod_pad
;
278 static int hf_openflow_v4_groupmod_group_id
;
279 static int hf_openflow_v4_portmod_port_no
;
280 static int hf_openflow_v4_portmod_pad
;
281 static int hf_openflow_v4_portmod_hw_addr
;
282 static int hf_openflow_v4_portmod_pad2
;
283 static int hf_openflow_v4_portmod_config
;
284 static int hf_openflow_v4_portmod_config_port_down
;
285 static int hf_openflow_v4_portmod_config_no_recv
;
286 static int hf_openflow_v4_portmod_config_no_fwd
;
287 static int hf_openflow_v4_portmod_config_no_packet_in
;
288 static int hf_openflow_v4_portmod_mask
;
289 static int hf_openflow_v4_portmod_mask_port_down
;
290 static int hf_openflow_v4_portmod_mask_no_recv
;
291 static int hf_openflow_v4_portmod_mask_no_fwd
;
292 static int hf_openflow_v4_portmod_mask_no_packet_in
;
293 static int hf_openflow_v4_portmod_advertise
;
294 static int hf_openflow_v4_portmod_advertise_10mb_hd
;
295 static int hf_openflow_v4_portmod_advertise_10mb_fd
;
296 static int hf_openflow_v4_portmod_advertise_100mb_hd
;
297 static int hf_openflow_v4_portmod_advertise_100mb_fd
;
298 static int hf_openflow_v4_portmod_advertise_1gb_hd
;
299 static int hf_openflow_v4_portmod_advertise_1gb_fd
;
300 static int hf_openflow_v4_portmod_advertise_10gb_fd
;
301 static int hf_openflow_v4_portmod_advertise_40gb_fd
;
302 static int hf_openflow_v4_portmod_advertise_100gb_fd
;
303 static int hf_openflow_v4_portmod_advertise_1tb_fd
;
304 static int hf_openflow_v4_portmod_advertise_other
;
305 static int hf_openflow_v4_portmod_advertise_copper
;
306 static int hf_openflow_v4_portmod_advertise_fiber
;
307 static int hf_openflow_v4_portmod_advertise_autoneg
;
308 static int hf_openflow_v4_portmod_advertise_pause
;
309 static int hf_openflow_v4_portmod_advertise_pause_asym
;
310 static int hf_openflow_v4_portmod_pad3
;
311 static int hf_openflow_v4_tablemod_table_id
;
312 static int hf_openflow_v4_tablemod_pad
;
313 static int hf_openflow_v4_tablemod_config
;
314 static int hf_openflow_v4_flow_stats_request_table_id
;
315 static int hf_openflow_v4_flow_stats_request_pad
;
316 static int hf_openflow_v4_flow_stats_request_out_port
;
317 static int hf_openflow_v4_flow_stats_request_out_group
;
318 static int hf_openflow_v4_flow_stats_request_pad2
;
319 static int hf_openflow_v4_flow_stats_request_cookie
;
320 static int hf_openflow_v4_flow_stats_request_cookie_mask
;
321 static int hf_openflow_v4_aggregate_stats_request_table_id
;
322 static int hf_openflow_v4_aggregate_stats_request_pad
;
323 static int hf_openflow_v4_aggregate_stats_request_out_port
;
324 static int hf_openflow_v4_aggregate_stats_request_out_group
;
325 static int hf_openflow_v4_aggregate_stats_request_pad2
;
326 static int hf_openflow_v4_aggregate_stats_request_cookie
;
327 static int hf_openflow_v4_aggregate_stats_request_cookie_mask
;
328 static int hf_openflow_v4_table_feature_prop_type
;
329 static int hf_openflow_v4_table_feature_prop_length
;
330 static int hf_openflow_v4_table_feature_prop_next_tables_next_table_id
;
331 static int hf_openflow_v4_table_feature_prop_experimenter_experimenter
;
332 static int hf_openflow_v4_table_feature_prop_experimenter_exp_type
;
333 static int hf_openflow_v4_table_feature_prop_pad
;
334 static int hf_openflow_v4_table_features_length
;
335 static int hf_openflow_v4_table_features_table_id
;
336 static int hf_openflow_v4_table_features_pad
;
337 static int hf_openflow_v4_table_features_name
;
338 static int hf_openflow_v4_table_features_metadata_match
;
339 static int hf_openflow_v4_table_features_metadata_write
;
340 static int hf_openflow_v4_table_features_config
;
341 static int hf_openflow_v4_table_features_max_entries
;
342 static int hf_openflow_v4_port_stats_request_port_no
;
343 static int hf_openflow_v4_port_stats_request_pad
;
344 static int hf_openflow_v4_queue_stats_request_port_no
;
345 static int hf_openflow_v4_queue_stats_request_queue_id
;
346 static int hf_openflow_v4_group_stats_request_group_id
;
347 static int hf_openflow_v4_group_stats_request_pad
;
348 static int hf_openflow_v4_meter_stats_request_meter_id
;
349 static int hf_openflow_v4_meter_stats_request_pad
;
350 static int hf_openflow_v4_meter_config_request_meter_id
;
351 static int hf_openflow_v4_meter_config_request_pad
;
352 static int hf_openflow_v4_multipart_request_type
;
353 static int hf_openflow_v4_multipart_request_flags
;
354 static int hf_openflow_v4_multipart_request_flags_more
;
355 static int hf_openflow_v4_multipart_request_pad
;
356 static int hf_openflow_v4_multipart_request_experimenter_experimenter
;
357 static int hf_openflow_v4_multipart_request_experimenter_exp_type
;
358 static int hf_openflow_v4_switch_description_mfr_desc
;
359 static int hf_openflow_v4_switch_description_hw_desc
;
360 static int hf_openflow_v4_switch_description_sw_desc
;
361 static int hf_openflow_v4_switch_description_serial_num
;
362 static int hf_openflow_v4_switch_description_dp_desc
;
363 static int hf_openflow_v4_flow_stats_length
;
364 static int hf_openflow_v4_flow_stats_table_id
;
365 static int hf_openflow_v4_flow_stats_pad
;
366 static int hf_openflow_v4_flow_stats_duration_sec
;
367 static int hf_openflow_v4_flow_stats_duration_nsec
;
368 static int hf_openflow_v4_flow_stats_priority
;
369 static int hf_openflow_v4_flow_stats_idle_timeout
;
370 static int hf_openflow_v4_flow_stats_hard_timeout
;
371 static int hf_openflow_v4_flow_stats_flags
;
372 static int hf_openflow_v4_flow_stats_flags_send_flow_rem
;
373 static int hf_openflow_v4_flow_stats_flags_check_overlap
;
374 static int hf_openflow_v4_flow_stats_flags_reset_counts
;
375 static int hf_openflow_v4_flow_stats_flags_no_packet_counts
;
376 static int hf_openflow_v4_flow_stats_flags_no_byte_counts
;
377 static int hf_openflow_v4_flow_stats_pad2
;
378 static int hf_openflow_v4_flow_stats_cookie
;
379 static int hf_openflow_v4_flow_stats_packet_count
;
380 static int hf_openflow_v4_flow_stats_byte_count
;
381 static int hf_openflow_v4_aggregate_stats_packet_count
;
382 static int hf_openflow_v4_aggregate_stats_byte_count
;
383 static int hf_openflow_v4_aggregate_stats_flow_count
;
384 static int hf_openflow_v4_aggregate_stats_pad
;
385 static int hf_openflow_v4_table_stats_table_id
;
386 static int hf_openflow_v4_table_stats_pad
;
387 static int hf_openflow_v4_table_stats_active_count
;
388 static int hf_openflow_v4_table_stats_lookup_count
;
389 static int hf_openflow_v4_table_stats_match_count
;
390 static int hf_openflow_v4_port_stats_port_no
;
391 static int hf_openflow_v4_port_stats_pad
;
392 static int hf_openflow_v4_port_stats_rx_packets
;
393 static int hf_openflow_v4_port_stats_tx_packets
;
394 static int hf_openflow_v4_port_stats_rx_bytes
;
395 static int hf_openflow_v4_port_stats_tx_bytes
;
396 static int hf_openflow_v4_port_stats_rx_dropped
;
397 static int hf_openflow_v4_port_stats_tx_dropped
;
398 static int hf_openflow_v4_port_stats_rx_errors
;
399 static int hf_openflow_v4_port_stats_tx_errors
;
400 static int hf_openflow_v4_port_stats_rx_frame_error
;
401 static int hf_openflow_v4_port_stats_rx_over_error
;
402 static int hf_openflow_v4_port_stats_rx_crc_error
;
403 static int hf_openflow_v4_port_stats_collisions
;
404 static int hf_openflow_v4_port_stats_duration_sec
;
405 static int hf_openflow_v4_port_stats_duration_nsec
;
406 static int hf_openflow_v4_queue_stats_port_no
;
407 static int hf_openflow_v4_queue_stats_queue_id
;
408 static int hf_openflow_v4_queue_stats_tx_bytes
;
409 static int hf_openflow_v4_queue_stats_tx_packets
;
410 static int hf_openflow_v4_queue_stats_tx_errors
;
411 static int hf_openflow_v4_queue_stats_duration_sec
;
412 static int hf_openflow_v4_queue_stats_duration_nsec
;
413 static int hf_openflow_v4_bucket_counter_packet_count
;
414 static int hf_openflow_v4_bucket_counter_byte_count
;
415 static int hf_openflow_v4_group_stats_length
;
416 static int hf_openflow_v4_group_stats_pad
;
417 static int hf_openflow_v4_group_stats_group_id
;
418 static int hf_openflow_v4_group_stats_ref_count
;
419 static int hf_openflow_v4_group_stats_pad2
;
420 static int hf_openflow_v4_group_stats_packet_count
;
421 static int hf_openflow_v4_group_stats_byte_count
;
422 static int hf_openflow_v4_group_desc_length
;
423 static int hf_openflow_v4_group_desc_type
;
424 static int hf_openflow_v4_group_desc_pad
;
425 static int hf_openflow_v4_group_desc_group_id
;
426 static int hf_openflow_v4_group_features_types
;
427 static int hf_openflow_v4_group_features_types_all
;
428 static int hf_openflow_v4_group_features_types_select
;
429 static int hf_openflow_v4_group_features_types_indirect
;
430 static int hf_openflow_v4_group_features_types_ff
;
431 static int hf_openflow_v4_group_features_capabilities
;
432 static int hf_openflow_v4_group_features_capabilities_select_weight
;
433 static int hf_openflow_v4_group_features_capabilities_select_liveness
;
434 static int hf_openflow_v4_group_features_capabilities_chaining
;
435 static int hf_openflow_v4_group_features_capabilities_chaining_checks
;
436 static int hf_openflow_v4_group_features_max_groups_all
;
437 static int hf_openflow_v4_group_features_max_groups_select
;
438 static int hf_openflow_v4_group_features_max_groups_indirect
;
439 static int hf_openflow_v4_group_features_max_groups_ff
;
440 static int hf_openflow_v4_group_features_actions_all
;
441 static int hf_openflow_v4_group_features_actions_all_output
;
442 static int hf_openflow_v4_group_features_actions_all_copy_ttl_out
;
443 static int hf_openflow_v4_group_features_actions_all_copy_ttl_in
;
444 static int hf_openflow_v4_group_features_actions_all_set_mpls_ttl
;
445 static int hf_openflow_v4_group_features_actions_all_dec_mpls_ttl
;
446 static int hf_openflow_v4_group_features_actions_all_push_vlan
;
447 static int hf_openflow_v4_group_features_actions_all_pop_vlan
;
448 static int hf_openflow_v4_group_features_actions_all_push_mpls
;
449 static int hf_openflow_v4_group_features_actions_all_pop_mpls
;
450 static int hf_openflow_v4_group_features_actions_all_set_queue
;
451 static int hf_openflow_v4_group_features_actions_all_group
;
452 static int hf_openflow_v4_group_features_actions_all_set_nw_ttl
;
453 static int hf_openflow_v4_group_features_actions_all_dec_nw_ttl
;
454 static int hf_openflow_v4_group_features_actions_all_set_field
;
455 static int hf_openflow_v4_group_features_actions_all_push_pbb
;
456 static int hf_openflow_v4_group_features_actions_all_pop_pbb
;
457 static int hf_openflow_v4_group_features_actions_select
;
458 static int hf_openflow_v4_group_features_actions_select_output
;
459 static int hf_openflow_v4_group_features_actions_select_copy_ttl_out
;
460 static int hf_openflow_v4_group_features_actions_select_copy_ttl_in
;
461 static int hf_openflow_v4_group_features_actions_select_set_mpls_ttl
;
462 static int hf_openflow_v4_group_features_actions_select_dec_mpls_ttl
;
463 static int hf_openflow_v4_group_features_actions_select_push_vlan
;
464 static int hf_openflow_v4_group_features_actions_select_pop_vlan
;
465 static int hf_openflow_v4_group_features_actions_select_push_mpls
;
466 static int hf_openflow_v4_group_features_actions_select_pop_mpls
;
467 static int hf_openflow_v4_group_features_actions_select_set_queue
;
468 static int hf_openflow_v4_group_features_actions_select_group
;
469 static int hf_openflow_v4_group_features_actions_select_set_nw_ttl
;
470 static int hf_openflow_v4_group_features_actions_select_dec_nw_ttl
;
471 static int hf_openflow_v4_group_features_actions_select_set_field
;
472 static int hf_openflow_v4_group_features_actions_select_push_pbb
;
473 static int hf_openflow_v4_group_features_actions_select_pop_pbb
;
474 static int hf_openflow_v4_group_features_actions_indirect
;
475 static int hf_openflow_v4_group_features_actions_indirect_output
;
476 static int hf_openflow_v4_group_features_actions_indirect_copy_ttl_out
;
477 static int hf_openflow_v4_group_features_actions_indirect_copy_ttl_in
;
478 static int hf_openflow_v4_group_features_actions_indirect_set_mpls_ttl
;
479 static int hf_openflow_v4_group_features_actions_indirect_dec_mpls_ttl
;
480 static int hf_openflow_v4_group_features_actions_indirect_push_vlan
;
481 static int hf_openflow_v4_group_features_actions_indirect_pop_vlan
;
482 static int hf_openflow_v4_group_features_actions_indirect_push_mpls
;
483 static int hf_openflow_v4_group_features_actions_indirect_pop_mpls
;
484 static int hf_openflow_v4_group_features_actions_indirect_set_queue
;
485 static int hf_openflow_v4_group_features_actions_indirect_group
;
486 static int hf_openflow_v4_group_features_actions_indirect_set_nw_ttl
;
487 static int hf_openflow_v4_group_features_actions_indirect_dec_nw_ttl
;
488 static int hf_openflow_v4_group_features_actions_indirect_set_field
;
489 static int hf_openflow_v4_group_features_actions_indirect_push_pbb
;
490 static int hf_openflow_v4_group_features_actions_indirect_pop_pbb
;
491 static int hf_openflow_v4_group_features_actions_ff
;
492 static int hf_openflow_v4_group_features_actions_ff_output
;
493 static int hf_openflow_v4_group_features_actions_ff_copy_ttl_out
;
494 static int hf_openflow_v4_group_features_actions_ff_copy_ttl_in
;
495 static int hf_openflow_v4_group_features_actions_ff_set_mpls_ttl
;
496 static int hf_openflow_v4_group_features_actions_ff_dec_mpls_ttl
;
497 static int hf_openflow_v4_group_features_actions_ff_push_vlan
;
498 static int hf_openflow_v4_group_features_actions_ff_pop_vlan
;
499 static int hf_openflow_v4_group_features_actions_ff_push_mpls
;
500 static int hf_openflow_v4_group_features_actions_ff_pop_mpls
;
501 static int hf_openflow_v4_group_features_actions_ff_set_queue
;
502 static int hf_openflow_v4_group_features_actions_ff_group
;
503 static int hf_openflow_v4_group_features_actions_ff_set_nw_ttl
;
504 static int hf_openflow_v4_group_features_actions_ff_dec_nw_ttl
;
505 static int hf_openflow_v4_group_features_actions_ff_set_field
;
506 static int hf_openflow_v4_group_features_actions_ff_push_pbb
;
507 static int hf_openflow_v4_group_features_actions_ff_pop_pbb
;
508 static int hf_openflow_v4_meter_band_stats_packet_band_count
;
509 static int hf_openflow_v4_meter_band_stats_byte_band_count
;
510 static int hf_openflow_v4_meter_stats_meter_id
;
511 static int hf_openflow_v4_meter_stats_len
;
512 static int hf_openflow_v4_meter_stats_pad
;
513 static int hf_openflow_v4_meter_stats_flow_count
;
514 static int hf_openflow_v4_meter_stats_packet_in_count
;
515 static int hf_openflow_v4_meter_stats_byte_in_count
;
516 static int hf_openflow_v4_meter_stats_duration_sec
;
517 static int hf_openflow_v4_meter_stats_duration_nsec
;
518 static int hf_openflow_v4_meter_config_len
;
519 static int hf_openflow_v4_meter_config_flags
;
520 static int hf_openflow_v4_meter_config_flags_kbps
;
521 static int hf_openflow_v4_meter_config_flags_pktps
;
522 static int hf_openflow_v4_meter_config_flags_burst
;
523 static int hf_openflow_v4_meter_config_flags_stats
;
524 static int hf_openflow_v4_meter_config_meter_id
;
525 static int hf_openflow_v4_meter_features_max_meter
;
526 static int hf_openflow_v4_meter_features_band_types
;
527 static int hf_openflow_v4_meter_features_band_types_drop
;
528 static int hf_openflow_v4_meter_features_band_types_dscp_remark
;
529 static int hf_openflow_v4_meter_features_capabilities
;
530 static int hf_openflow_v4_meter_features_capabilities_kbps
;
531 static int hf_openflow_v4_meter_features_capabilities_pktps
;
532 static int hf_openflow_v4_meter_features_capabilities_burst
;
533 static int hf_openflow_v4_meter_features_capabilities_stats
;
534 static int hf_openflow_v4_meter_features_max_bands
;
535 static int hf_openflow_v4_meter_features_max_color
;
536 static int hf_openflow_v4_meter_features_pad
;
537 static int hf_openflow_v4_multipart_reply_type
;
538 static int hf_openflow_v4_multipart_reply_flags
;
539 static int hf_openflow_v4_multipart_reply_flags_more
;
540 static int hf_openflow_v4_multipart_reply_pad
;
541 static int hf_openflow_v4_multipart_reply_experimenter_experimenter
;
542 static int hf_openflow_v4_multipart_reply_experimenter_exp_type
;
543 static int hf_openflow_v4_queue_get_config_request_port
;
544 static int hf_openflow_v4_queue_get_config_request_pad
;
545 static int hf_openflow_v4_queue_prop_property
;
546 static int hf_openflow_v4_queue_prop_len
;
547 static int hf_openflow_v4_queue_prop_pad
;
548 static int hf_openflow_v4_queue_prop_min_rate_rate
;
549 static int hf_openflow_v4_queue_prop_min_rate_pad
;
550 static int hf_openflow_v4_queue_prop_max_rate_rate
;
551 static int hf_openflow_v4_queue_prop_max_rate_pad
;
552 static int hf_openflow_v4_queue_prop_experimenter_experimenter
;
553 static int hf_openflow_v4_queue_prop_experimenter_pad
;
554 static int hf_openflow_v4_packet_queue_queue_id
;
555 static int hf_openflow_v4_packet_queue_port
;
556 static int hf_openflow_v4_packet_queue_len
;
557 static int hf_openflow_v4_packet_queue_pad
;
558 static int hf_openflow_v4_queue_get_config_reply_port
;
559 static int hf_openflow_v4_queue_get_config_reply_pad
;
560 static int hf_openflow_v4_role_request_role
;
561 static int hf_openflow_v4_role_request_pad
;
562 static int hf_openflow_v4_role_request_generation_id
;
563 static int hf_openflow_v4_role_reply_role
;
564 static int hf_openflow_v4_role_reply_pad
;
565 static int hf_openflow_v4_role_reply_generation_id
;
566 static int hf_openflow_v4_async_config_packet_in_mask_master
;
567 static int hf_openflow_v4_async_config_packet_in_mask_master_no_match
;
568 static int hf_openflow_v4_async_config_packet_in_mask_master_action
;
569 static int hf_openflow_v4_async_config_packet_in_mask_master_invalid_ttl
;
570 static int hf_openflow_v4_async_config_packet_in_mask_slave
;
571 static int hf_openflow_v4_async_config_packet_in_mask_slave_no_match
;
572 static int hf_openflow_v4_async_config_packet_in_mask_slave_action
;
573 static int hf_openflow_v4_async_config_packet_in_mask_slave_invalid_ttl
;
574 static int hf_openflow_v4_async_config_port_status_mask_master
;
575 static int hf_openflow_v4_async_config_port_status_mask_master_add
;
576 static int hf_openflow_v4_async_config_port_status_mask_master_delete
;
577 static int hf_openflow_v4_async_config_port_status_mask_master_modify
;
578 static int hf_openflow_v4_async_config_port_status_mask_slave
;
579 static int hf_openflow_v4_async_config_port_status_mask_slave_add
;
580 static int hf_openflow_v4_async_config_port_status_mask_slave_delete
;
581 static int hf_openflow_v4_async_config_port_status_mask_slave_modify
;
582 static int hf_openflow_v4_async_config_flow_removed_mask_master
;
583 static int hf_openflow_v4_async_config_flow_removed_mask_master_idle_timeout
;
584 static int hf_openflow_v4_async_config_flow_removed_mask_master_hard_timeout
;
585 static int hf_openflow_v4_async_config_flow_removed_mask_master_delete
;
586 static int hf_openflow_v4_async_config_flow_removed_mask_master_group_delete
;
587 static int hf_openflow_v4_async_config_flow_removed_mask_slave
;
588 static int hf_openflow_v4_async_config_flow_removed_mask_slave_idle_timeout
;
589 static int hf_openflow_v4_async_config_flow_removed_mask_slave_hard_timeout
;
590 static int hf_openflow_v4_async_config_flow_removed_mask_slave_delete
;
591 static int hf_openflow_v4_async_config_flow_removed_mask_slave_group_delete
;
592 static int hf_openflow_v4_metermod_command
;
593 static int hf_openflow_v4_metermod_flags
;
594 static int hf_openflow_v4_metermod_flags_kbps
;
595 static int hf_openflow_v4_metermod_flags_pktps
;
596 static int hf_openflow_v4_metermod_flags_burst
;
597 static int hf_openflow_v4_metermod_flags_stats
;
598 static int hf_openflow_v4_metermod_meter_id
;
600 static int ett_openflow_v4
;
601 static int ett_openflow_v4_flowmod_flags
;
602 static int ett_openflow_v4_bucket
;
603 static int ett_openflow_v4_oxm
;
604 static int ett_openflow_v4_match
;
605 static int ett_openflow_v4_action
;
606 static int ett_openflow_v4_instruction
;
607 static int ett_openflow_v4_port
;
608 static int ett_openflow_v4_port_config
;
609 static int ett_openflow_v4_port_state
;
610 static int ett_openflow_v4_port_current
;
611 static int ett_openflow_v4_port_advertised
;
612 static int ett_openflow_v4_port_supported
;
613 static int ett_openflow_v4_port_peer
;
614 static int ett_openflow_v4_meter_band
;
615 static int ett_openflow_v4_hello_element
;
616 static int ett_openflow_v4_error_data
;
617 static int ett_openflow_v4_switch_features_capabilities
;
618 static int ett_openflow_v4_switch_config_flags
;
619 static int ett_openflow_v4_packet_in_data
;
620 static int ett_openflow_v4_packet_out_data
;
621 static int ett_openflow_v4_portmod_config
;
622 static int ett_openflow_v4_portmod_mask
;
623 static int ett_openflow_v4_portmod_advertise
;
624 static int ett_openflow_v4_table_features
;
625 static int ett_openflow_v4_table_feature_prop
;
626 static int ett_openflow_v4_table_feature_prop_instruction_id
;
627 static int ett_openflow_v4_table_feature_prop_action_id
;
628 static int ett_openflow_v4_table_feature_prop_oxm_id
;
629 static int ett_openflow_v4_multipart_request_flags
;
630 static int ett_openflow_v4_flow_stats
;
631 static int ett_openflow_v4_flow_stats_flags
;
632 static int ett_openflow_v4_table_stats
;
633 static int ett_openflow_v4_port_stats
;
634 static int ett_openflow_v4_queue_stats
;
635 static int ett_openflow_v4_bucket_counter
;
636 static int ett_openflow_v4_group_stats
;
637 static int ett_openflow_v4_group_desc
;
638 static int ett_openflow_v4_group_features_types
;
639 static int ett_openflow_v4_group_features_capabilities
;
640 static int ett_openflow_v4_group_features_actions_all
;
641 static int ett_openflow_v4_group_features_actions_select
;
642 static int ett_openflow_v4_group_features_actions_indirect
;
643 static int ett_openflow_v4_group_features_actions_ff
;
644 static int ett_openflow_v4_meter_band_stats
;
645 static int ett_openflow_v4_meter_stats
;
646 static int ett_openflow_v4_meter_config
;
647 static int ett_openflow_v4_meter_config_flags
;
648 static int ett_openflow_v4_meter_features_band_types
;
649 static int ett_openflow_v4_meter_features_capabilities
;
650 static int ett_openflow_v4_multipart_reply_flags
;
651 static int ett_openflow_v4_queue_prop
;
652 static int ett_openflow_v4_packet_queue
;
653 static int ett_openflow_v4_async_config_packet_in_mask_master
;
654 static int ett_openflow_v4_async_config_packet_in_mask_slave
;
655 static int ett_openflow_v4_async_config_port_status_mask_master
;
656 static int ett_openflow_v4_async_config_port_status_mask_slave
;
657 static int ett_openflow_v4_async_config_flow_removed_mask_master
;
658 static int ett_openflow_v4_async_config_flow_removed_mask_slave
;
659 static int ett_openflow_v4_metermod_flags
;
661 static expert_field ei_openflow_v4_match_undecoded
;
662 static expert_field ei_openflow_v4_oxm_undecoded
;
663 static expert_field ei_openflow_v4_action_undecoded
;
664 static expert_field ei_openflow_v4_instruction_undecoded
;
665 static expert_field ei_openflow_v4_meter_band_undecoded
;
666 static expert_field ei_openflow_v4_hello_element_undecoded
;
667 static expert_field ei_openflow_v4_error_undecoded
;
668 static expert_field ei_openflow_v4_experimenter_undecoded
;
669 static expert_field ei_openflow_v4_table_feature_prop_undecoded
;
670 static expert_field ei_openflow_v4_multipart_request_undecoded
;
671 static expert_field ei_openflow_v4_multipart_reply_undecoded
;
672 static expert_field ei_openflow_v4_queue_prop_undecoded
;
673 static expert_field ei_openflow_v4_message_undecoded
;
675 static const value_string openflow_v4_version_values
[] = {
682 #define OFPT_ECHO_REQUEST 2
683 #define OFPT_ECHO_REPLY 3
684 #define OFPT_EXPERIMENTER 4
685 #define OFPT_FEATURES_REQUEST 5
686 #define OFPT_FEATURES_REPLY 6
687 #define OFPT_GET_CONFIG_REQUEST 7
688 #define OFPT_GET_CONFIG_REPLY 8
689 #define OFPT_SET_CONFIG 9
690 #define OFPT_PACKET_IN 10
691 #define OFPT_FLOW_REMOVED 11
692 #define OFPT_PORT_STATUS 12
693 #define OFPT_PACKET_OUT 13
694 #define OFPT_FLOW_MOD 14
695 #define OFPT_GROUP_MOD 15
696 #define OFPT_PORT_MOD 16
697 #define OFPT_TABLE_MOD 17
698 #define OFPT_MULTIPART_REQUEST 18
699 #define OFPT_MULTIPART_REPLY 19
700 #define OFPT_BARRIER_REQUEST 20
701 #define OFPT_BARRIER_REPLY 21
702 #define OFPT_QUEUE_GET_CONFIG_REQUEST 22
703 #define OFPT_QUEUE_GET_CONFIG_REPLY 23
704 #define OFPT_ROLE_REQUEST 24
705 #define OFPT_ROLE_REPLY 25
706 #define OFPT_GET_ASYNC_REQUEST 26
707 #define OFPT_GET_ASYNC_REPLY 27
708 #define OFPT_SET_ASYNC 28
709 #define OFPT_METER_MOD 29
710 static const value_string openflow_v4_type_values
[] = {
711 { OFPT_HELLO
, "OFPT_HELLO" },
712 { OFPT_ERROR
, "OFPT_ERROR" },
713 { OFPT_ECHO_REQUEST
, "OFPT_ECHO_REQUEST" },
714 { OFPT_ECHO_REPLY
, "OFPT_ECHO_REPLY" },
715 { OFPT_EXPERIMENTER
, "OFPT_EXPERIMENTER" },
716 { OFPT_FEATURES_REQUEST
, "OFPT_FEATURES_REQUEST" },
717 { OFPT_FEATURES_REPLY
, "OFPT_FEATURES_REPLY" },
718 { OFPT_GET_CONFIG_REQUEST
, "OFPT_GET_CONFIG_REQUEST" },
719 { OFPT_GET_CONFIG_REPLY
, "OFPT_GET_CONFIG_REPLY" },
720 { OFPT_SET_CONFIG
, "OFPT_SET_CONFIG" },
721 { OFPT_PACKET_IN
, "OFPT_PACKET_IN" },
722 { OFPT_FLOW_REMOVED
, "OFPT_FLOW_REMOVED" },
723 { OFPT_PORT_STATUS
, "OFPT_PORT_STATUS" },
724 { OFPT_PACKET_OUT
, "OFPT_PACKET_OUT" },
725 { OFPT_FLOW_MOD
, "OFPT_FLOW_MOD" },
726 { OFPT_GROUP_MOD
, "OFPT_GROUP_MOD" },
727 { OFPT_PORT_MOD
, "OFPT_PORT_MOD" },
728 { OFPT_TABLE_MOD
, "OFPT_TABLE_MOD" },
729 { OFPT_MULTIPART_REQUEST
, "OFPT_MULTIPART_REQUEST" },
730 { OFPT_MULTIPART_REPLY
, "OFPT_MULTIPART_REPLY" },
731 { OFPT_BARRIER_REQUEST
, "OFPT_BARRIER_REQUEST" },
732 { OFPT_BARRIER_REPLY
, "OFPT_BARRIER_REPLY" },
733 { OFPT_QUEUE_GET_CONFIG_REQUEST
, "OFPT_QUEUE_GET_CONFIG_REQUEST" },
734 { OFPT_QUEUE_GET_CONFIG_REPLY
, "OFPT_QUEUE_GET_CONFIG_REPLY" },
735 { OFPT_ROLE_REQUEST
, "OFPT_ROLE_REQUEST" },
736 { OFPT_ROLE_REPLY
, "OFPT_ROLE_REPLY" },
737 { OFPT_GET_ASYNC_REQUEST
, "OFPT_GET_ASYNC_REQUEST" },
738 { OFPT_GET_ASYNC_REPLY
, "OFPT_GET_ASYNC_REPLY" },
739 { OFPT_SET_ASYNC
, "OFPT_SET_ASYNC" },
740 { OFPT_METER_MOD
, "OFPT_METER_MOD" },
743 static value_string_ext openflow_v4_type_values_ext
= VALUE_STRING_EXT_INIT(openflow_v4_type_values
);
746 dissect_openflow_header_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
748 /* uint8_t version; */
749 proto_tree_add_item(tree
, hf_openflow_v4_version
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
753 proto_tree_add_item(tree
, hf_openflow_v4_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
756 /* uint16_t length; */
757 proto_tree_add_item(tree
, hf_openflow_v4_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
761 proto_tree_add_item(tree
, hf_openflow_v4_xid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
767 #define OFPP_MAX 0xffffff00 /* Last usable port number. */
768 static const value_string openflow_v4_port_reserved_values
[] = {
769 { 0xfffffff8, "OFPP_IN_PORT" },
770 { 0xfffffff9, "OFPP_TABLE" },
771 { 0xfffffffa, "OFPP_NORMAL" },
772 { 0xfffffffb, "OFPP_FLOOD" },
773 { 0xfffffffc, "OFPP_ALL" },
774 { 0xfffffffd, "OFPP_CONTROLLER" },
775 { 0xfffffffe, "OFPP_LOCAL" },
776 { 0xffffffff, "OFPP_ANY" },
780 #define OFPG_MAX 0xffffff00 /* Last usable group number. */
781 static const value_string openflow_v4_group_reserved_values
[] = {
782 { 0xfffffffc, "OFPG_ALL" },
783 { 0xffffffff, "OFPG_ANY" },
787 #define OFPTT_MAX 254 /* Last usable table number. */
788 static const value_string openflow_v4_table_reserved_values
[] = {
794 #define OFP_NO_BUFFER 0xffffffff /* No buffering. */
795 static const value_string openflow_v4_buffer_reserved_values
[] = {
796 { 0xffffffff, "OFP_NO_BUFFER" },
800 #define OFPXMC_NXM_0 0x0000 /* Backward compatibility with NXM */
801 #define OFPXMC_NXM_1 0x0001 /* Backward compatibility with NXM */
802 #define OFPXMC_OPENFLOW_BASIC 0x8000 /* Basic class for OpenFlow */
803 #define OFPXMC_EXPERIMENTER 0xFFFF /* Experimenter class */
804 static const value_string openflow_v4_oxm_class_values
[] = {
805 { 0x0000, "OFPXMC_NMX_0" },
806 { 0x0001, "OFPXMC_NXM_1" },
807 { 0x8000, "OFPXMC_OPENFLOW_BASIC" },
808 { 0xFFFF, "OFPXMC_EXPERIMENTER" },
812 #define OFPXMT_OFB_IN_PORT 0
813 #define OFPXMT_OFB_IN_PHY_PORT 1
814 #define OFPXMT_OFB_METADATA 2
815 #define OFPXMT_OFB_ETH_DST 3
816 #define OFPXMT_OFB_ETH_SRC 4
817 #define OFPXMT_OFB_ETH_TYPE 5
818 #define OFPXMT_OFB_VLAN_VID 6
819 #define OFPXMT_OFB_VLAN_PCP 7
820 #define OFPXMT_OFB_IP_DSCP 8
821 #define OFPXMT_OFB_IP_ECN 9
822 #define OFPXMT_OFB_IP_PROTO 10
823 #define OFPXMT_OFB_IPV4_SRC 11
824 #define OFPXMT_OFB_IPV4_DST 12
825 #define OFPXMT_OFB_TCP_SRC 13
826 #define OFPXMT_OFB_TCP_DST 14
827 #define OFPXMT_OFB_UDP_SRC 15
828 #define OFPXMT_OFB_UDP_DST 16
829 #define OFPXMT_OFB_SCTP_SRC 17
830 #define OFPXMT_OFB_SCTP_DST 18
831 #define OFPXMT_OFB_ICMPV4_TYPE 19
832 #define OFPXMT_OFB_ICMPV4_CODE 20
833 #define OFPXMT_OFB_ARP_OP 21
834 #define OFPXMT_OFB_ARP_SPA 22
835 #define OFPXMT_OFB_ARP_TPA 23
836 #define OFPXMT_OFB_ARP_SHA 24
837 #define OFPXMT_OFB_ARP_THA 25
838 #define OFPXMT_OFB_IPV6_SRC 26
839 #define OFPXMT_OFB_IPV6_DST 27
840 #define OFPXMT_OFB_IPV6_FLABEL 28
841 #define OFPXMT_OFB_ICMPV6_TYPE 29
842 #define OFPXMT_OFB_ICMPV6_CODE 30
843 #define OFPXMT_OFB_IPV6_ND_TARGET 31
844 #define OFPXMT_OFB_IPV6_ND_SLL 32
845 #define OFPXMT_OFB_IPV6_ND_TLL 33
846 #define OFPXMT_OFB_MPLS_LABEL 34
847 #define OFPXMT_OFB_MPLS_TC 35
848 #define OFPXMT_OFP_MPLS_BOS 36
849 #define OFPXMT_OFB_PBB_ISID 37
850 #define OFPXMT_OFB_TUNNEL_ID 38
851 #define OFPXMT_OFB_IPV6_EXTHDR 39
852 static const value_string openflow_v4_oxm_basic_field_values
[] = {
853 { 0, "OFPXMT_OFB_IN_PORT" },
854 { 1, "OFPXMT_OFB_IN_PHY_PORT" },
855 { 2, "OFPXMT_OFB_METADATA" },
856 { 3, "OFPXMT_OFB_ETH_DST" },
857 { 4, "OFPXMT_OFB_ETH_SRC" },
858 { 5, "OFPXMT_OFB_ETH_TYPE" },
859 { 6, "OFPXMT_OFB_VLAN_VID" },
860 { 7, "OFPXMT_OFB_VLAN_PCP" },
861 { 8, "OFPXMT_OFB_IP_DSCP" },
862 { 9, "OFPXMT_OFB_IP_ECN" },
863 { 10, "OFPXMT_OFB_IP_PROTO" },
864 { 11, "OFPXMT_OFB_IPV4_SRC" },
865 { 12, "OFPXMT_OFB_IPV4_DST" },
866 { 13, "OFPXMT_OFB_TCP_SRC" },
867 { 14, "OFPXMT_OFB_TCP_DST" },
868 { 15, "OFPXMT_OFB_UDP_SRC" },
869 { 16, "OFPXMT_OFB_UDP_DST" },
870 { 17, "OFPXMT_OFB_SCTP_SRC" },
871 { 18, "OFPXMT_OFB_SCTP_DST" },
872 { 19, "OFPXMT_OFB_ICMPV4_TYPE" },
873 { 20, "OFPXMT_OFB_ICMPV4_CODE" },
874 { 21, "OFPXMT_OFB_ARP_OP" },
875 { 22, "OFPXMT_OFB_ARP_SPA" },
876 { 23, "OFPXMT_OFB_ARP_TPA" },
877 { 24, "OFPXMT_OFB_ARP_SHA" },
878 { 25, "OFPXMT_OFB_ARP_THA" },
879 { 26, "OFPXMT_OFB_IPV6_SRC" },
880 { 27, "OFPXMT_OFB_IPV6_DST" },
881 { 28, "OFPXMT_OFB_IPV6_FLABEL" },
882 { 29, "OFPXMT_OFB_ICMPV6_TYPE" },
883 { 30, "OFPXMT_OFB_ICMPV6_CODE" },
884 { 31, "OFPXMT_OFB_IPV6_ND_TARGET" },
885 { 32, "OFPXMT_OFB_IPV6_ND_SLL" },
886 { 33, "OFPXMT_OFB_IPV6_ND_TLL" },
887 { 34, "OFPXMT_OFB_MPLS_LABEL" },
888 { 35, "OFPXMT_OFB_MPLS_TC" },
889 { 36, "OFPXMT_OFP_MPLS_BOS" },
890 { 37, "OFPXMT_OFB_PBB_ISID" },
891 { 38, "OFPXMT_OFB_TUNNEL_ID" },
892 { 39, "OFPXMT_OFB_IPV6_EXTHDR" },
895 static value_string_ext openflow_v4_oxm_basic_field_values_ext
= VALUE_STRING_EXT_INIT(openflow_v4_oxm_basic_field_values
);
897 #define OXM_FIELD_MASK 0xfe
898 #define OXM_FIELD_OFFSET 1
899 #define OXM_HM_MASK 0x01
901 dissect_openflow_oxm_header_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
906 oxm_class
= tvb_get_ntohs(tvb
, offset
);
907 proto_tree_add_item(tree
, hf_openflow_v4_oxm_class
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
911 if (oxm_class
== OFPXMC_OPENFLOW_BASIC
) {
912 proto_tree_add_bits_item(tree
, hf_openflow_v4_oxm_field_basic
, tvb
, (offset
* 8), 7, ENC_NA
);
914 proto_tree_add_bits_item(tree
, hf_openflow_v4_oxm_field
, tvb
, (offset
* 8), 7, ENC_NA
);
918 proto_tree_add_bits_item(tree
, hf_openflow_v4_oxm_hm
, tvb
, (offset
* 8) + 7, 1, ENC_NA
);
922 proto_tree_add_item(tree
, hf_openflow_v4_oxm_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
929 #define OFPVID_PRESENT 0x1000
931 dissect_openflow_oxm_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
933 proto_tree
*oxm_tree
;
936 uint8_t oxm_field_hm
;
940 uint8_t field_length
;
942 oxm_class
= tvb_get_ntohs(tvb
, offset
);
943 oxm_field_hm
= tvb_get_uint8(tvb
, offset
+ 2);
944 oxm_length
= tvb_get_uint8(tvb
, offset
+ 3);
945 oxm_end
= offset
+ 4 + oxm_length
;
947 oxm_field
= (oxm_field_hm
& OXM_FIELD_MASK
) >> OXM_FIELD_OFFSET
;
948 oxm_hm
= oxm_field_hm
& OXM_HM_MASK
;
949 field_length
= (oxm_hm
== 0) ? oxm_length
: (oxm_length
/ 2);
951 oxm_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, oxm_length
+ 4, ett_openflow_v4_oxm
, NULL
, "OXM field");
953 offset
= dissect_openflow_oxm_header_v4(tvb
, pinfo
, oxm_tree
, offset
, length
);
955 if (oxm_class
== OFPXMC_OPENFLOW_BASIC
) {
957 case OFPXMT_OFB_IN_PORT
:
958 case OFPXMT_OFB_IN_PHY_PORT
:
959 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_uint32
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
963 case OFPXMT_OFB_ETH_DST
:
964 case OFPXMT_OFB_ETH_SRC
:
965 case OFPXMT_OFB_ARP_SHA
:
966 case OFPXMT_OFB_ARP_THA
:
967 case OFPXMT_OFB_IPV6_ND_SLL
: /*The source link-layer address option in an IPv6 Neighbor Discovery message */
968 case OFPXMT_OFB_IPV6_ND_TLL
: /*The target link-layer address option in an IPv6 Neighbor Discovery message */
969 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_etheraddr
, tvb
, offset
, 6, ENC_NA
);
972 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_mask_etheraddr
, tvb
, offset
, 6, ENC_NA
);
977 case OFPXMT_OFB_ETH_TYPE
:
978 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
982 case OFPXMT_OFB_VLAN_VID
:
983 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_vlan_present
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
984 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_vlan_vid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
987 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_mask_vlan
, tvb
, offset
, 2, ENC_NA
);
992 case OFPXMT_OFB_IP_PROTO
:
993 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_ipproto
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
997 case OFPXMT_OFB_IPV4_SRC
:
998 case OFPXMT_OFB_IPV4_DST
:
999 case OFPXMT_OFB_ARP_SPA
:
1000 case OFPXMT_OFB_ARP_TPA
:
1001 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_ipv4addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1004 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_mask_ipv4addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1009 case OFPXMT_OFB_TCP_SRC
:
1010 case OFPXMT_OFB_TCP_DST
:
1011 case OFPXMT_OFB_UDP_SRC
:
1012 case OFPXMT_OFB_UDP_DST
:
1013 case OFPXMT_OFB_SCTP_SRC
:
1014 case OFPXMT_OFB_SCTP_DST
:
1015 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_uint16
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1019 case OFPXMT_OFB_IPV6_SRC
:
1020 case OFPXMT_OFB_IPV6_DST
:
1021 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_ipv6addr
, tvb
, offset
, 16, ENC_NA
);
1024 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_mask_ipv6addr
, tvb
, offset
, 16, ENC_NA
);
1029 case OFPXMT_OFB_MPLS_LABEL
:
1030 /* size differs in specification and header file */
1031 if (field_length
== 3) {
1032 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_uint24
, tvb
, offset
, 3, ENC_BIG_ENDIAN
);
1034 } else if (field_length
== 4) {
1035 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value_uint32
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1042 if (field_length
> 0) {
1043 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_value
, tvb
, offset
, field_length
, ENC_NA
);
1044 offset
+= field_length
;
1048 if (field_length
> 0 && oxm_hm
!= 0) {
1049 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_mask
, tvb
, offset
, field_length
, ENC_NA
);
1050 offset
+= field_length
;
1055 if(oxm_end
> offset
){
1056 proto_tree_add_expert_format(oxm_tree
, pinfo
, &ei_openflow_v4_oxm_undecoded
,
1057 tvb
, offset
, oxm_end
-offset
, "Undecoded Data");
1061 } else if (oxm_class
== OFPXMC_EXPERIMENTER
) {
1062 /* uint32_t experimenter; */
1063 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1065 proto_tree_add_item(oxm_tree
, hf_openflow_v4_oxm_experimenter_value
, tvb
, offset
, oxm_length
- 4, ENC_NA
);
1066 offset
+=(oxm_length
- 4);
1068 proto_tree_add_expert_format(oxm_tree
, pinfo
, &ei_openflow_v4_oxm_undecoded
,
1069 tvb
, offset
, oxm_length
, "Unknown OXM body.");
1076 #define OFPMT_STANDARD 0 /* Standard Match. Deprecated. */
1077 #define OFPMT_OXM 1 /* OpenFlow Extensible Match */
1078 static const value_string openflow_v4_match_type_values
[] = {
1079 { 0, "OFPMT_STANDARD" },
1085 dissect_openflow_match_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1088 proto_tree
*match_tree
;
1089 uint16_t match_type
;
1090 uint16_t match_length
;
1092 uint16_t pad_length
;
1094 match_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_match
, &ti
, "Match");
1096 /* uint16_t type; */
1097 match_type
= tvb_get_ntohs(tvb
, offset
);
1098 proto_tree_add_item(match_tree
, hf_openflow_v4_match_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1101 /* uint16_t length; (excluding padding) */
1102 match_length
= tvb_get_ntohs(tvb
, offset
);
1103 pad_length
= (match_length
+ 7)/8*8 - match_length
;
1104 proto_item_set_len(ti
, match_length
+ pad_length
);
1105 proto_tree_add_item(match_tree
, hf_openflow_v4_match_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1109 switch (match_type
) {
1110 case OFPMT_STANDARD
:
1111 proto_tree_add_expert_format(match_tree
, pinfo
, &ei_openflow_v4_match_undecoded
,
1112 tvb
, offset
, match_length
- 4, "Standard match body (deprecated).");
1113 if (match_length
> 4)
1114 offset
+=match_length
-4;
1118 fields_end
= offset
+ match_length
- 4;
1119 while(offset
< fields_end
) {
1120 offset
= dissect_openflow_oxm_v4(tvb
, pinfo
, match_tree
, offset
, length
);
1125 proto_tree_add_expert_format(match_tree
, pinfo
, &ei_openflow_v4_match_undecoded
,
1126 tvb
, offset
, match_length
- 4, "Unknown match body.");
1127 if (match_length
> 4)
1128 offset
+=match_length
-4;
1132 /* pad; Exactly ((length + 7)/8*8 - length) (between 0 and 7) bytes of all-zero bytes. */
1133 if (pad_length
> 0) {
1134 proto_tree_add_item(match_tree
, hf_openflow_v4_match_pad
, tvb
, offset
, pad_length
, ENC_NA
);
1141 #define OFPM_MAX 0xffffff00 /* Last usable meter number. */
1142 static const value_string openflow_v4_meter_id_reserved_values
[] = {
1143 { 0xfffffffd, "OFPM_SLOWPATH" },
1144 { 0xfffffffe, "OFPM_CONTROLLER" },
1145 { 0xffffffff, "OFPM_ALL" },
1149 #define OFPMBT_DROP 1
1150 #define OFPMBT_DSCP_REMARK 2
1151 #define OFPMBT_EXPERIMENTER 0xFFFF
1152 static const value_string openflow_v4_meter_band_type_values
[] = {
1153 { OFPMBT_DROP
, "OFPMBT_DROP" },
1154 { OFPMBT_DSCP_REMARK
, "OFPMBT_DSCP_REMARK" },
1155 { OFPMBT_EXPERIMENTER
, "OFPMBT_EXPERIMENTER" },
1159 #define OFPMF_KBPS 1 << 0
1160 #define OFPMF_PKTPS 1 << 1
1161 #define OFPMF_BURST 1 << 2
1162 #define OFPMF_STATS 1 << 3
1165 dissect_openflow_meter_band_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1168 proto_tree
*band_tree
;
1172 band_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_meter_band
, &ti
, "Meter band");
1174 /* uint16_t type; */
1175 band_type
= tvb_get_ntohs(tvb
, offset
);
1176 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1180 band_len
= tvb_get_ntohs(tvb
, offset
);
1181 proto_item_set_len(ti
, band_len
);
1182 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1185 /* uint32_t rate; */
1186 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_rate
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1189 /* uint32_t burst_size; */
1190 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_burst_size
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1193 switch (band_type
) {
1195 /* uint8_t pad[4]; */
1196 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_drop_pad
, tvb
, offset
, 4, ENC_NA
);
1200 case OFPMBT_DSCP_REMARK
:
1201 /* uint8_t prec_level; */
1202 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_dscp_remark_prec_level
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1205 /* uint8_t pad[3]; */
1206 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_dscp_remark_pad
, tvb
, offset
, 3, ENC_NA
);
1210 case OFPMBT_EXPERIMENTER
:
1211 /* uint32_t experimenter; */
1212 proto_tree_add_item(band_tree
, hf_openflow_v4_meter_band_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1215 /* uint32_t experimenter_data[0]; */
1216 proto_tree_add_expert_format(band_tree
, pinfo
, &ei_openflow_v4_meter_band_undecoded
,
1217 tvb
, offset
, offset
- 16 + band_len
, "Experimenter meter band body.");
1219 offset
+=band_len
-16;
1223 proto_tree_add_expert_format(band_tree
, pinfo
, &ei_openflow_v4_meter_band_undecoded
,
1224 tvb
, offset
, offset
- 12 + band_len
, "Unknown meter band body.");
1226 offset
+=band_len
-12;
1234 #define OFPHET_VERSIONBITMAP 1
1235 static const value_string openflow_v4_hello_element_type_values
[] = {
1236 { 1, "OFPHET_VERSIONBITMAP" },
1241 dissect_openflow_hello_element_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1243 proto_tree
*elem_tree
;
1245 uint16_t elem_length
;
1246 uint16_t pad_length
;
1248 elem_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v4_hello_element
, NULL
, "Element");
1250 /* uint16_t type; */
1251 elem_type
= tvb_get_ntohs(tvb
, offset
);
1252 proto_tree_add_item(elem_tree
, hf_openflow_v4_hello_element_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1255 /* uint16_t length; */
1256 elem_length
= tvb_get_ntohs(tvb
, offset
);
1257 pad_length
= (elem_length
+ 7)/8*8 - elem_length
;
1258 proto_tree_add_item(elem_tree
, hf_openflow_v4_hello_element_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1261 switch (elem_type
) {
1262 case OFPHET_VERSIONBITMAP
:
1264 proto_tree_add_item(elem_tree
, hf_openflow_v4_hello_element_version_bitmap
, tvb
, offset
, elem_length
- 4, ENC_NA
);
1265 if (elem_length
> 4)
1266 offset
+= elem_length
- 4;
1270 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_hello_element_undecoded
,
1271 tvb
, offset
, elem_length
- 4, "Unknown hello element body.");
1272 if (elem_length
> 4)
1273 offset
+= elem_length
- 4;
1277 if (pad_length
> 0) {
1278 proto_tree_add_item(tree
, hf_openflow_v4_hello_element_pad
, tvb
, offset
, pad_length
, ENC_NA
);
1286 dissect_openflow_hello_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1289 while (offset
< length
) {
1290 offset
= dissect_openflow_hello_element_v4(tvb
, pinfo
, tree
, offset
, length
);
1295 #define OFPET_HELLO_FAILED 0
1296 #define OFPET_BAD_REQUEST 1
1297 #define OFPET_BAD_ACTION 2
1298 #define OFPET_BAD_INSTRUCTION 3
1299 #define OFPET_BAD_MATCH 4
1300 #define OFPET_FLOW_MOD_FAILED 5
1301 #define OFPET_GROUP_MOD_FAILED 6
1302 #define OFPET_PORT_MOD_FAILED 7
1303 #define OFPET_TABLE_MOD_FAILED 8
1304 #define OFPET_QUEUE_OP_FAILED 9
1305 #define OFPET_SWITCH_CONFIG_FAILED 10
1306 #define OFPET_ROLE_REQUEST_FAILED 11
1307 #define OFPET_METER_MOD_FAILED 12
1308 #define OFPET_TABLE_FEATURES_FAILED 13
1309 #define OFPET_EXPERIMENTER 0xffff
1310 static const value_string openflow_v4_error_type_values
[] = {
1311 { 0, "OFPET_HELLO_FAILED" },
1312 { 1, "OFPET_BAD_REQUEST" },
1313 { 2, "OFPET_BAD_ACTION" },
1314 { 3, "OFPET_BAD_INSTRUCTION" },
1315 { 4, "OFPET_BAD_MATCH" },
1316 { 5, "OFPET_FLOW_MOD_FAILED" },
1317 { 6, "OFPET_GROUP_MOD_FAILED" },
1318 { 7, "OFPET_PORT_MOD_FAILED" },
1319 { 8, "OFPET_TABLE_MOD_FAILED" },
1320 { 9, "OFPET_QUEUE_OP_FAILED" },
1321 { 10, "OFPET_SWITCH_CONFIG_FAILED" },
1322 { 11, "OFPET_ROLE_REQUEST_FAILED" },
1323 { 12, "OFPET_METER_MOD_FAILED" },
1324 { 13, "OFPET_TABLE_FEATURES_FAILED" },
1325 { 0xffff, "OFPET_EXPERIMENTER" },
1329 static const value_string openflow_v4_error_hello_failed_code_values
[] = {
1330 { 0, "OFPHFC_INCOMPATIBLE" },
1331 { 1, "OFPHFC_EPERM" },
1335 static const value_string openflow_v4_error_bad_request_code_values
[] = {
1336 { 0, "OFPBRC_BAD_VERSION" },
1337 { 1, "OFPBRC_BAD_TYPE" },
1338 { 2, "OFPBRC_BAD_MULTIPART" },
1339 { 3, "OFPBRC_BAD_EXPERIMENTER" },
1340 { 4, "OFPBRC_BAD_EXP_TYPE" },
1341 { 5, "OFPBRC_EPERM" },
1342 { 6, "OFPBRC_BAD_LEN" },
1343 { 7, "OFPBRC_BUFFER_EMPTY" },
1344 { 8, "OFPBRC_BUFFER_UNKNOWN" },
1345 { 9, "OFPBRC_BAD_TABLE_ID" },
1346 { 10, "OFPBRC_IS_SLAVE" },
1347 { 11, "OFPBRC_BAD_PORT" },
1348 { 12, "OFPBRC_BAD_PACKET" },
1349 { 13, "OFPBRC_MULTIPART_BUFFER_OVERFLOW" },
1353 static const value_string openflow_v4_error_bad_action_code_values
[] = {
1354 { 0, "OFPBAC_BAD_TYPE" },
1355 { 1, "OFPBAC_BAD_LEN" },
1356 { 2, "OFPBAC_BAD_EXPERIMENTER" },
1357 { 3, "OFPBAC_BAD_EXP_TYPE" },
1358 { 4, "OFPBAC_BAD_OUT_PORT" },
1359 { 5, "OFPBAC_BAD_ARGUMENT" },
1360 { 6, "OFPBAC_EPERM" },
1361 { 7, "OFPBAC_TOO_MANY" },
1362 { 8, "OFPBAC_BAD_QUEUE" },
1363 { 9, "OFPBAC_BAD_OUT_GROUP" },
1364 { 10, "OFPBAC_MATCH_INCONSISTENT" },
1365 { 11, "OFPBAC_UNSUPPORTED_ORDER" },
1366 { 12, "OFPBAC_BAD_TAG" },
1367 { 13, "OFPBAC_BAD_SET_TYPE" },
1368 { 14, "OFPBAC_BAD_SET_LEN" },
1369 { 15, "OFPBAC_BAD_SET_ARGUMENT" },
1373 static const value_string openflow_v4_error_bad_instruction_code_values
[] = {
1374 { 0, "OFPBIC_UNKNOWN_INST" },
1375 { 1, "OFPBIC_UNSUP_INST" },
1376 { 2, "OFPBIC_BAD_TABLE_ID" },
1377 { 3, "OFPBIC_UNSUP_METADATA" },
1378 { 4, "OFPBIC_UNSUP_METADATA_MASK" },
1379 { 5, "OFPBIC_BAD_EXPERIMENTER" },
1380 { 6, "OFPBIC_BAD_EXP_TYPE" },
1381 { 7, "OFPBIC_BAD_LEN" },
1382 { 8, "OFPBIC_EPERM" },
1386 static const value_string openflow_v4_error_bad_match_code_values
[] = {
1387 { 0, "OFPBMC_BAD_TYPE" },
1388 { 1, "OFPBMC_BAD_LEN" },
1389 { 2, "OFPBMC_BAD_TAG" },
1390 { 3, "OFPBMC_BAD_DL_ADDR_MASK" },
1391 { 4, "OFPBMC_BAD_NW_ADDR_MASK" },
1392 { 5, "OFPBMC_BAD_WILDCARDS" },
1393 { 6, "OFPBMC_BAD_FIELD" },
1394 { 7, "OFPBMC_BAD_VALUE" },
1395 { 8, "OFPBMC_BAD_MASK" },
1396 { 9, "OFPBMC_BAD_PREREQ" },
1397 { 10, "OFPBMC_DUP_FIELD" },
1398 { 11, "OFPBMC_EPERM" },
1402 static const value_string openflow_v4_error_flow_mod_failed_code_values
[] = {
1403 { 0, "OFPFMFC_UNKNOWN" },
1404 { 1, "OFPFMFC_TABLE_FULL" },
1405 { 2, "OFPFMFC_BAD_TABLE_ID" },
1406 { 3, "OFPFMFC_OVERLAP" },
1407 { 4, "OFPFMFC_EPERM" },
1408 { 5, "OFPFMFC_BAD_TIMEOUT" },
1409 { 6, "OFPFMFC_BAD_COMMAND" },
1410 { 7, "OFPFMFC_BAD_FLAGS" },
1414 static const value_string openflow_v4_error_group_mod_failed_code_values
[] = {
1415 { 0, "OFPGMFC_GROUP_EXISTS" },
1416 { 1, "OFPGMFC_INVALID_GROUP" },
1417 { 2, "OFPGMFC_WEIGHT_UNSUPPORTED" },
1418 { 3, "OFPGMFC_OUT_OF_GROUPS" },
1419 { 4, "OFPGMFC_OUT_OF_BUCKETS" },
1420 { 5, "OFPGMFC_CHAINING_UNSUPPORTED" },
1421 { 6, "OFPGMFC_WATCH_UNSUPPORTED" },
1422 { 7, "OFPGMFC_LOOP" },
1423 { 8, "OFPGMFC_UNKNOWN_GROUP" },
1424 { 9, "OFPGMFC_CHAINED_GROUP" },
1425 { 10, "OFPGMFC_BAD_TYPE" },
1426 { 11, "OFPGMFC_BAD_COMMAND" },
1427 { 12, "OFPGMFC_BAD_BUCKET" },
1428 { 13, "OFPGMFC_BAD_WATCH" },
1429 { 14, "OFPGMFC_EPERM" },
1433 static const value_string openflow_v4_error_port_mod_failed_code_values
[] = {
1434 { 0, "OFPPMFC_BAD_PORT" },
1435 { 1, "OFPPMFC_BAD_HW_ADDR" },
1436 { 2, "OFPPMFC_BAD_CONFIG" },
1437 { 3, "OFPPMFC_BAD_ADVERTISE" },
1438 { 4, "OFPPMFC_EPERM" },
1442 static const value_string openflow_v4_error_table_mod_failed_code_values
[] = {
1443 { 0, "OFPTMFC_BAD_TABLE" },
1444 { 1, "OFPTMFC_BAD_CONFIG" },
1445 { 2, "OFPTMFC_EPERM" },
1449 static const value_string openflow_v4_error_queue_op_failed_code_values
[] = {
1450 { 0, "OFPQOFC_BAD_PORT" },
1451 { 1, "OFPQOFC_BAD_QUEUE" },
1452 { 2, "OFPQOFC_EPERM" },
1456 static const value_string openflow_v4_error_switch_config_failed_code_values
[] = {
1457 { 0, "OFPSCFC_BAD_FLAGS" },
1458 { 1, "OFPSCFC_BAD_LEN" },
1459 { 2, "OFPQCFC_EPERM" },
1463 static const value_string openflow_v4_error_role_request_failed_code_values
[] = {
1464 { 0, "OFPRRFC_STALE" },
1465 { 1, "OFPRRFC_UNSUP" },
1466 { 2, "OFPRRFC_BAD_ROLE" },
1470 static const value_string openflow_v4_error_meter_mod_failed_code_values
[] = {
1471 { 0, "OFPMMFC_UNKNOWN" },
1472 { 1, "OFPMMFC_METER_EXISTS" },
1473 { 2, "OFPMMFC_INVALID_METER" },
1474 { 3, "OFPMMFC_UNKNOWN_METER" },
1475 { 4, "OFPMMFC_BAD_COMMAND" },
1476 { 5, "OFPMMFC_BAD_FLAGS" },
1477 { 6, "OFPMMFC_BAD_RATE" },
1478 { 7, "OFPMMFC_BAD_BURST" },
1479 { 8, "OFPMMFC_BAD_BAND" },
1480 { 9, "OFPMMFC_BAD_BAND_VALUE" },
1481 { 10, "OFPMMFC_OUT_OF_METERS" },
1482 { 11, "OFPMMFC_OUT_OF_BANDS" },
1486 static const value_string openflow_v4_error_table_features_failed_code_values
[] = {
1487 { 0, "OFPTFFC_BAD_TABLE" },
1488 { 1, "OFPTFFC_BAD_METADATA" },
1489 { 2, "OFPTFFC_BAD_TYPE" },
1490 { 3, "OFPTFFC_BAD_LEN" },
1491 { 4, "OFPTFFC_BAD_ARGUMENT" },
1492 { 5, "OFPTFFC_EPERM" },
1497 // NOLINTNEXTLINE(misc-no-recursion)
1498 dissect_openflow_error_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1500 proto_tree
*data_tree
;
1501 proto_item
*data_ti
;
1502 uint16_t error_type
;
1504 /* uint16_t type; */
1505 error_type
= tvb_get_ntohs(tvb
, offset
);
1506 proto_tree_add_item(tree
, hf_openflow_v4_error_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1509 /* uint16_t code; */
1510 switch(error_type
) {
1511 case OFPET_HELLO_FAILED
:
1512 proto_tree_add_item(tree
, hf_openflow_v4_error_hello_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1514 case OFPET_BAD_REQUEST
:
1515 proto_tree_add_item(tree
, hf_openflow_v4_error_bad_request_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1517 case OFPET_BAD_ACTION
:
1518 proto_tree_add_item(tree
, hf_openflow_v4_error_bad_action_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1520 case OFPET_BAD_INSTRUCTION
:
1521 proto_tree_add_item(tree
, hf_openflow_v4_error_bad_instruction_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1523 case OFPET_BAD_MATCH
:
1524 proto_tree_add_item(tree
, hf_openflow_v4_error_bad_match_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1526 case OFPET_FLOW_MOD_FAILED
:
1527 proto_tree_add_item(tree
, hf_openflow_v4_error_flow_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1529 case OFPET_GROUP_MOD_FAILED
:
1530 proto_tree_add_item(tree
, hf_openflow_v4_error_group_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1532 case OFPET_PORT_MOD_FAILED
:
1533 proto_tree_add_item(tree
, hf_openflow_v4_error_port_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1535 case OFPET_TABLE_MOD_FAILED
:
1536 proto_tree_add_item(tree
, hf_openflow_v4_error_table_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1538 case OFPET_QUEUE_OP_FAILED
:
1539 proto_tree_add_item(tree
, hf_openflow_v4_error_queue_op_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1541 case OFPET_SWITCH_CONFIG_FAILED
:
1542 proto_tree_add_item(tree
, hf_openflow_v4_error_switch_config_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1544 case OFPET_ROLE_REQUEST_FAILED
:
1545 proto_tree_add_item(tree
, hf_openflow_v4_error_role_request_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1547 case OFPET_METER_MOD_FAILED
:
1548 proto_tree_add_item(tree
, hf_openflow_v4_error_meter_mod_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1550 case OFPET_TABLE_FEATURES_FAILED
:
1551 proto_tree_add_item(tree
, hf_openflow_v4_error_table_features_failed_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1553 case OFPET_EXPERIMENTER
:
1555 proto_tree_add_item(tree
, hf_openflow_v4_error_code
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1560 switch(error_type
) {
1561 case OFPET_HELLO_FAILED
:
1562 /* uint8_t data[0]; contains an ASCII text string */
1563 proto_tree_add_item(tree
, hf_openflow_v4_error_data_text
, tvb
, offset
, length
- 12, ENC_NA
|ENC_ASCII
);
1564 /*offset += length - 12;*/
1567 case OFPET_BAD_REQUEST
:
1568 case OFPET_BAD_ACTION
:
1569 case OFPET_BAD_INSTRUCTION
:
1570 case OFPET_BAD_MATCH
:
1571 case OFPET_FLOW_MOD_FAILED
:
1572 case OFPET_GROUP_MOD_FAILED
:
1573 case OFPET_PORT_MOD_FAILED
:
1574 case OFPET_TABLE_MOD_FAILED
:
1575 case OFPET_QUEUE_OP_FAILED
:
1576 case OFPET_SWITCH_CONFIG_FAILED
:
1577 case OFPET_ROLE_REQUEST_FAILED
:
1578 case OFPET_METER_MOD_FAILED
:
1579 case OFPET_TABLE_FEATURES_FAILED
: {
1580 /* uint8_t data[0]; contains at least the first 64 bytes of the failed request. */
1581 bool save_in_error_pkt
;
1583 data_ti
= proto_tree_add_item(tree
, hf_openflow_v4_error_data_body
, tvb
, offset
, length
- 20, ENC_NA
);
1584 data_tree
= proto_item_add_subtree(data_ti
, ett_openflow_v4_error_data
);
1586 /* Save error pkt */
1587 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
1588 pinfo
->flags
.in_error_pkt
= true;
1590 /* Disable update/change of column info */
1591 col_set_writable(pinfo
->cinfo
, -1, false);
1593 dissect_openflow_message_v4(tvb
, pinfo
, data_tree
, offset
);
1595 /* Restore the "we're inside an error packet" flag. */
1596 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
1598 /* Restore the capability of update/change column info */
1599 col_set_writable(pinfo
->cinfo
, -1, true);
1601 /*offset += length - 12;*/
1605 case OFPET_EXPERIMENTER
:
1606 /* uint32_t experimenter */
1607 proto_tree_add_item(tree
, hf_openflow_v4_error_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1609 /* uint8_t data[0]; */
1610 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_error_undecoded
,
1611 tvb
, offset
, length
- 16, "Experimenter error body.");
1612 /*offset += length - 16;*/
1616 /* uint8_t data[0]; */
1617 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_error_undecoded
,
1618 tvb
, offset
, length
- 12, "Unknown error body.");
1619 /*offset += length - 12;*/
1626 dissect_openflow_echo_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1629 if (offset
< length
) {
1630 proto_tree_add_item(tree
, hf_openflow_v4_echo_data
, tvb
, offset
, length
- offset
, ENC_NA
);
1636 dissect_openflow_experimenter_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
1638 /* uint32_t experimenter; */
1639 proto_tree_add_item(tree
, hf_openflow_v4_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1642 /* uint32_t exp_type; */
1643 proto_tree_add_item(tree
, hf_openflow_v4_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1647 if (offset
< length
) {
1648 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_experimenter_undecoded
,
1649 tvb
, offset
, length
- 16, "Experimenter body.");
1653 #define OFPC_FLOW_STATS 1<<0
1654 #define OFPC_TABLE_STATS 1<<1
1655 #define OFPC_PORT_STATS 1<<2
1656 #define OFPC_GROUP_STATS 1<<3
1657 #define OFPC_IP_REASM 1<<5
1658 #define OFPC_QUEUE_STATS 1<<6
1659 #define OFPC_PORT_BLOCKED 1<<8
1661 dissect_openflow_switch_features_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1664 proto_tree
*cap_tree
;
1666 /* uint64_t datapath_id; */
1667 proto_tree_add_item(tree
, hf_openflow_v4_switch_features_datapath_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1670 /* uint32_t n_buffers; */
1671 proto_tree_add_item(tree
, hf_openflow_v4_switch_features_n_buffers
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1674 /* uint8_t n_tables; */
1675 proto_tree_add_item(tree
, hf_openflow_v4_switch_features_n_tables
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1678 /* uint8_t auxiliary_id; */
1679 proto_tree_add_item(tree
, hf_openflow_v4_switch_features_auxiliary_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1682 /* uint8_t pad[2]; */
1683 proto_tree_add_item(tree
, hf_openflow_v4_switch_features_pad
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1686 /* uint32_t capabilities; */
1687 ti
= proto_tree_add_item(tree
, hf_openflow_v4_switch_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1688 cap_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_switch_features_capabilities
);
1690 proto_tree_add_item(cap_tree
, hf_openflow_v4_switch_features_capabilities_flow_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1691 proto_tree_add_item(cap_tree
, hf_openflow_v4_switch_features_capabilities_table_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1692 proto_tree_add_item(cap_tree
, hf_openflow_v4_switch_features_capabilities_port_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1693 proto_tree_add_item(cap_tree
, hf_openflow_v4_switch_features_capabilities_group_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1694 proto_tree_add_item(cap_tree
, hf_openflow_v4_switch_features_capabilities_ip_reasm
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1695 proto_tree_add_item(cap_tree
, hf_openflow_v4_switch_features_capabilities_queue_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1696 proto_tree_add_item(cap_tree
, hf_openflow_v4_switch_features_capabilities_port_blocked
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1699 /* uint32_t reserved; */
1700 proto_tree_add_item(tree
, hf_openflow_v4_switch_features_reserved
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1704 static const value_string openflow_v4_switch_config_fragments_values
[] = {
1705 { 0, "OFPC_FRAG_NORMAL" },
1706 { 1, "OFPC_FRAG_DROP" },
1707 { 2, "OFPC_FRAG_REASM" },
1711 #define OFPCML_MAX 0xffe5 /* Maximum max_len value. */
1712 static const value_string openflow_v4_controller_max_len_reserved_values
[] = {
1713 { 0xffff, "OFPCML_NO_BUFFER" },
1718 dissect_openflow_switch_config_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1721 proto_tree
*flags_tree
;
1723 /* uint16_t flags; */
1724 ti
= proto_tree_add_item(tree
, hf_openflow_v4_switch_config_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1725 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_switch_config_flags
);
1728 proto_tree_add_bits_item(flags_tree
, hf_openflow_v4_switch_config_flags_fragments
, tvb
, (offset
* 8) + 14, 2, ENC_NA
);
1731 /* uint16_t miss_send_len; */
1732 proto_tree_add_item(tree
, hf_openflow_v4_switch_config_miss_send_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1736 #define OFPR_NO_MATCH 0
1737 #define OFPR_ACTION 1
1738 #define OFPR_INVALID_TTL 2
1739 static const value_string openflow_v4_packet_in_reason_values
[] = {
1740 { OFPR_NO_MATCH
, "OFPR_NO_MATCH" },
1741 { OFPR_ACTION
, "OFPR_ACTION" },
1742 { OFPR_INVALID_TTL
, "OFPR_INVALID_TTL" },
1747 dissect_openflow_packet_in_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1749 proto_tree
*data_tree
;
1752 bool save_in_error_pkt
;
1753 address save_dl_src
, save_dl_dst
, save_net_src
, save_net_dst
, save_src
, save_dst
;
1755 /* uint32_t buffer_id; */
1756 proto_tree_add_item(tree
, hf_openflow_v4_packet_in_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1759 /* uint16_t total_len; */
1760 proto_tree_add_item(tree
, hf_openflow_v4_packet_in_total_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1763 /* uint8_t reason; */
1764 proto_tree_add_item(tree
, hf_openflow_v4_packet_in_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1767 /* uint8_t table_id; */
1768 proto_tree_add_item(tree
, hf_openflow_v4_packet_in_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1771 /* uint64_t cookie; */
1772 proto_tree_add_item(tree
, hf_openflow_v4_packet_in_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1775 /* struct ofp_match match; */
1776 offset
= dissect_openflow_match_v4(tvb
, pinfo
, tree
, offset
, length
);
1778 /* uint8_t pad[2]; */
1779 proto_tree_add_item(tree
, hf_openflow_v4_packet_in_pad
, tvb
, offset
, 2, ENC_NA
);
1782 /* uint8_t data[0]; */
1783 if (offset
< length
) {
1784 data_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v4_packet_in_data
, NULL
, "Data");
1786 /* save some state */
1787 save_writable
= col_get_writable(pinfo
->cinfo
, -1);
1788 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
1789 copy_address_shallow(&save_dl_src
, &pinfo
->dl_src
);
1790 copy_address_shallow(&save_dl_dst
, &pinfo
->dl_dst
);
1791 copy_address_shallow(&save_net_src
, &pinfo
->net_src
);
1792 copy_address_shallow(&save_net_dst
, &pinfo
->net_dst
);
1793 copy_address_shallow(&save_src
, &pinfo
->src
);
1794 copy_address_shallow(&save_dst
, &pinfo
->dst
);
1797 col_set_writable(pinfo
->cinfo
, -1, false);
1798 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
- offset
);
1799 call_dissector(eth_withoutfcs_handle
, next_tvb
, pinfo
, data_tree
);
1801 /* restore saved state */
1802 col_set_writable(pinfo
->cinfo
, -1, save_writable
);
1803 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
1804 copy_address_shallow(&pinfo
->dl_src
, &save_dl_src
);
1805 copy_address_shallow(&pinfo
->dl_dst
, &save_dl_dst
);
1806 copy_address_shallow(&pinfo
->net_src
, &save_net_src
);
1807 copy_address_shallow(&pinfo
->net_dst
, &save_net_dst
);
1808 copy_address_shallow(&pinfo
->src
, &save_src
);
1809 copy_address_shallow(&pinfo
->dst
, &save_dst
);
1814 #define OFPRR_IDLE_TIMEOUT 0
1815 #define OFPRR_HARD_TIMEOUT 1
1816 #define OFPRR_DELETE 2
1817 #define OFPRR_GROUP_DELETE 3
1818 static const value_string openflow_v4_flow_removed_reason_values
[] = {
1819 { OFPRR_IDLE_TIMEOUT
, "OFPRR_IDLE_TIMEOUT" },
1820 { OFPRR_HARD_TIMEOUT
, "OFPRR_HARD_TIMEOUT" },
1821 { OFPRR_DELETE
, "OFPRR_DELETE" },
1822 { OFPRR_GROUP_DELETE
, "OFPRR_GROUP_DELETE" },
1827 dissect_openflow_flow_removed_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1829 /* uint64_t cookie; */
1830 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1833 /* uint16_t priority; */
1834 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1837 /* uint8_t reason; */
1838 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1841 /* uint8_t table_id; */
1842 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1845 /* uint32_t duration_sec; */
1846 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1849 /* uint32_t duration_nsec; */
1850 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1853 /* uint16_t idle_timeout; */
1854 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1857 /* uint16_t hard_timeout; */
1858 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1861 /* uint64_t packet_count; */
1862 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1865 /* uint64_t byte_count; */
1866 proto_tree_add_item(tree
, hf_openflow_v4_flow_removed_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
1869 /* struct ofp_match match; */
1870 dissect_openflow_match_v4(tvb
, pinfo
, tree
, offset
, length
);
1873 #define OFPAT_OUTPUT 0 /* Output to switch port. */
1874 #define OFPAT_COPY_TTL_OUT 11 /* Copy TTL "outwards" */
1875 #define OFPAT_COPY_TTL_IN 12 /* Copy TTL "inwards" */
1876 #define OFPAT_SET_MPLS_TTL 15 /* MPLS TTL */
1877 #define OFPAT_DEC_MPLS_TTL 16 /* Decrement MPLS TTL */
1878 #define OFPAT_PUSH_VLAN 17 /* Push a new VLAN tag */
1879 #define OFPAT_POP_VLAN 18 /* Pop the outer VLAN tag */
1880 #define OFPAT_PUSH_MPLS 19 /* Push a new MPLS tag */
1881 #define OFPAT_POP_MPLS 20 /* Pop the outer MPLS tag */
1882 #define OFPAT_SET_QUEUE 21 /* Set queue id when outputting to a port */
1883 #define OFPAT_GROUP 22 /* Apply group. */
1884 #define OFPAT_SET_NW_TTL 23 /* IP TTL. */
1885 #define OFPAT_DEC_NW_TTL 24 /* Decrement IP TTL. */
1886 #define OFPAT_SET_FIELD 25 /* Set a header field using OXM TLV format. */
1887 #define OFPAT_PUSH_PBB 26 /* Push a new PBB service tag (I-TAG) */
1888 #define OFPAT_POP_PBB 27 /* Pop the outer PBB service tag (I-TAG) */
1889 #define OFPAT_EXPERIMENTER 0xffff
1891 static const value_string openflow_v4_action_type_values
[] = {
1892 { 0, "OFPAT_OUTPUT" },
1893 { 11, "OFPAT_COPY_TTL_OUT" },
1894 { 12, "OFPAT_COPY_TTL_IN" },
1895 { 15, "OFPAT_SET_MPLS_TTL" },
1896 { 16, "OFPAT_DEC_MPLS_TTL" },
1897 { 17, "OFPAT_PUSH_VLAN" },
1898 { 18, "OFPAT_POP_VLAN" },
1899 { 19, "OFPAT_PUSH_MPLS" },
1900 { 20, "OFPAT_POP_MPLS" },
1901 { 21, "OFPAT_SET_QUEUE" },
1902 { 22, "OFPAT_GROUP" },
1903 { 23, "OFPAT_SET_NW_TTL" },
1904 { 24, "OFPAT_DEC_NW_TTL" },
1905 { 25, "OFPAT_SET_FIELD" },
1906 { 26, "OFPAT_PUSH_PBB" },
1907 { 27, "OFPAT_POP_PBB" },
1908 { 0xffff, "OFPAT_EXPERIMENTER" },
1915 dissect_openflow_action_header_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1919 /* uint16_t type; */
1920 act_type
= tvb_get_ntohs(tvb
, offset
);
1921 proto_tree_add_item(tree
, hf_openflow_v4_action_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1924 /* uint16_t length; */
1925 proto_tree_add_item(tree
, hf_openflow_v4_action_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1928 if (act_type
== OFPAT_EXPERIMENTER
) {
1929 /* uint32_t experimenter; */
1930 proto_tree_add_item(tree
, hf_openflow_v4_action_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1939 dissect_openflow_action_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
1941 proto_tree
*act_tree
;
1943 uint16_t act_length
;
1946 act_type
= tvb_get_ntohs(tvb
, offset
);
1947 act_length
= tvb_get_ntohs(tvb
, offset
+ 2);
1948 act_end
= offset
+ act_length
;
1950 act_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, act_length
, ett_openflow_v4_action
, NULL
, "Action");
1952 offset
= dissect_openflow_action_header_v4(tvb
, pinfo
, act_tree
, offset
, length
);
1956 /* uint32_t port; */
1957 proto_tree_add_item(act_tree
, hf_openflow_v4_action_output_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1960 /* uint16_t max_len; */
1961 proto_tree_add_item(act_tree
, hf_openflow_v4_action_output_max_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1964 /* uint8_t pad[6]; */
1965 proto_tree_add_item(act_tree
, hf_openflow_v4_action_output_pad
, tvb
, offset
, 6, ENC_NA
);
1970 case OFPAT_COPY_TTL_OUT
:
1971 /* uint8_t pad[4]; */
1972 proto_tree_add_item(act_tree
, hf_openflow_v4_action_copy_ttl_out_pad
, tvb
, offset
, 4, ENC_NA
);
1976 case OFPAT_COPY_TTL_IN
:
1977 /* uint8_t pad[4]; */
1978 proto_tree_add_item(act_tree
, hf_openflow_v4_action_copy_ttl_in_pad
, tvb
, offset
, 4, ENC_NA
);
1982 case OFPAT_SET_MPLS_TTL
:
1983 /* uint8_t mpls_ttl; */
1984 proto_tree_add_item(act_tree
, hf_openflow_v4_action_set_mpls_ttl_ttl
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1987 /* uint8_t pad[3]; */
1988 proto_tree_add_item(act_tree
, hf_openflow_v4_action_set_mpls_ttl_pad
, tvb
, offset
, 3, ENC_NA
);
1992 case OFPAT_DEC_MPLS_TTL
:
1993 /* uint8_t pad[4]; */
1994 proto_tree_add_item(act_tree
, hf_openflow_v4_action_dec_mpls_ttl_pad
, tvb
, offset
, 4, ENC_NA
);
1998 case OFPAT_PUSH_VLAN
:
1999 /* uint16_t ethertype; */
2000 proto_tree_add_item(act_tree
, hf_openflow_v4_action_push_vlan_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2003 /* uint8_t pad[2]; */
2004 proto_tree_add_item(act_tree
, hf_openflow_v4_action_push_vlan_pad
, tvb
, offset
, 2, ENC_NA
);
2008 case OFPAT_POP_VLAN
:
2009 /* uint8_t pad[4]; */
2010 proto_tree_add_item(act_tree
, hf_openflow_v4_action_pop_vlan_pad
, tvb
, offset
, 4, ENC_NA
);
2014 case OFPAT_PUSH_MPLS
:
2015 /* uint16_t ethertype; */
2016 proto_tree_add_item(act_tree
, hf_openflow_v4_action_push_mpls_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2019 /* uint8_t pad[2]; */
2020 proto_tree_add_item(act_tree
, hf_openflow_v4_action_push_mpls_pad
, tvb
, offset
, 2, ENC_NA
);
2024 case OFPAT_POP_MPLS
:
2025 /* uint16_t ethertype; */
2026 proto_tree_add_item(act_tree
, hf_openflow_v4_action_pop_mpls_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2029 /* uint8_t pad[2]; */
2030 proto_tree_add_item(act_tree
, hf_openflow_v4_action_pop_mpls_pad
, tvb
, offset
, 2, ENC_NA
);
2034 case OFPAT_SET_QUEUE
:
2035 /* uint32_t queue_id; */
2036 proto_tree_add_item(act_tree
, hf_openflow_v4_action_set_queue_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2041 /* uint32_t group_id; */
2042 proto_tree_add_item(act_tree
, hf_openflow_v4_action_group_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2046 case OFPAT_SET_NW_TTL
:
2047 /* uint8_t nw_ttl; */
2048 proto_tree_add_item(act_tree
, hf_openflow_v4_action_set_nw_ttl_ttl
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2051 /* uint8_t pad[3]; */
2052 proto_tree_add_item(act_tree
, hf_openflow_v4_action_set_nw_ttl_pad
, tvb
, offset
, 3, ENC_NA
);
2056 case OFPAT_DEC_NW_TTL
:
2057 /* uint8_t pad[4]; */
2058 proto_tree_add_item(act_tree
, hf_openflow_v4_action_dec_nw_ttl_pad
, tvb
, offset
, 4, ENC_NA
);
2062 case OFPAT_SET_FIELD
:
2063 offset
= dissect_openflow_oxm_v4(tvb
, pinfo
, act_tree
, offset
, length
);
2065 /* padded to 64 bits */
2066 if (offset
< act_end
) {
2067 proto_tree_add_item(act_tree
, hf_openflow_v4_action_set_field_pad
, tvb
, offset
, act_end
- offset
, ENC_NA
);
2072 case OFPAT_PUSH_PBB
:
2073 /* uint16_t ethertype; */
2074 proto_tree_add_item(act_tree
, hf_openflow_v4_action_push_pbb_ethertype
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2077 /* uint8_t pad[2]; */
2078 proto_tree_add_item(act_tree
, hf_openflow_v4_action_push_pbb_pad
, tvb
, offset
, 2, ENC_NA
);
2083 /* uint8_t pad[4]; */
2084 proto_tree_add_item(act_tree
, hf_openflow_v4_action_pop_pbb_pad
, tvb
, offset
, 4, ENC_NA
);
2088 case OFPAT_EXPERIMENTER
:
2089 proto_tree_add_expert_format(act_tree
, pinfo
, &ei_openflow_v4_action_undecoded
,
2090 tvb
, offset
, act_length
- 8, "Experimenter action body.");
2092 offset
+= act_length
- 8;
2096 proto_tree_add_expert_format(act_tree
, pinfo
, &ei_openflow_v4_action_undecoded
,
2097 tvb
, offset
, act_length
- 4, "Unknown action body.");
2099 offset
+= act_length
- 4;
2107 #define OFPPC_PORT_DOWN 1 << 0
2108 #define OFPPC_NO_RECV 1 << 2
2109 #define OFPPC_NO_FWD 1 << 5
2110 #define OFPPC_NO_PACKET_IN 1 << 6
2112 #define OFPPS_LINK_DOWN 1 << 0
2113 #define OFPPS_BLOCKED 1 << 1
2114 #define OFPPS_LIVE 1 << 2
2116 #define OFPPF_10MB_HD 1 << 0
2117 #define OFPPF_10MB_FD 1 << 1
2118 #define OFPPF_100MB_HD 1 << 2
2119 #define OFPPF_100MB_FD 1 << 3
2120 #define OFPPF_1GB_HD 1 << 4
2121 #define OFPPF_1GB_FD 1 << 5
2122 #define OFPPF_10GB_FD 1 << 6
2123 #define OFPPF_40GB_FD 1 << 7
2124 #define OFPPF_100GB_FD 1 << 8
2125 #define OFPPF_1TB_FD 1 << 9
2126 #define OFPPF_OTHER 1 << 10
2128 #define OFPPF_COPPER 1 << 11
2129 #define OFPPF_FIBER 1 << 12
2130 #define OFPPF_AUTONEG 1 << 13
2131 #define OFPPF_PAUSE 1 << 14
2132 #define OFPPF_PAUSE_ASYM 1 << 15
2134 #define OFP_ETH_ALEN 6
2135 #define OFP_MAX_PORT_NAME_LEN 16
2137 dissect_openflow_port_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2140 proto_tree
*port_tree
, *conf_tree
, *state_tree
, *curr_tree
, *adv_tree
, *supp_tree
, *peer_tree
;
2142 port_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 64, ett_openflow_v4_port
, NULL
, "Port");
2144 /* uint32_t port_no; */
2145 proto_tree_add_item(port_tree
, hf_openflow_v4_port_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2148 /* uint8_t pad[4]; */
2149 proto_tree_add_item(port_tree
, hf_openflow_v4_port_pad
, tvb
, offset
, 4, ENC_NA
);
2152 /* uint8_t hw_addr[OFP_ETH_ALEN]; */
2153 proto_tree_add_item(port_tree
, hf_openflow_v4_port_hw_addr
, tvb
, offset
, OFP_ETH_ALEN
, ENC_NA
);
2154 offset
+=OFP_ETH_ALEN
;
2156 /* uint8_t pad2[2]; */
2157 proto_tree_add_item(port_tree
, hf_openflow_v4_port_pad2
, tvb
, offset
, 2, ENC_NA
);
2160 /* char name[OFP_MAX_PORT_NAME_LEN]; Null-terminated */
2161 proto_tree_add_item(port_tree
, hf_openflow_v4_port_name
, tvb
, offset
, OFP_MAX_PORT_NAME_LEN
, ENC_ASCII
);
2162 offset
+=OFP_MAX_PORT_NAME_LEN
;
2164 /* uint32_t config; */
2165 ti
= proto_tree_add_item(port_tree
, hf_openflow_v4_port_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2166 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_port_config
);
2168 proto_tree_add_item(conf_tree
, hf_openflow_v4_port_config_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2169 proto_tree_add_item(conf_tree
, hf_openflow_v4_port_config_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2170 proto_tree_add_item(conf_tree
, hf_openflow_v4_port_config_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2171 proto_tree_add_item(conf_tree
, hf_openflow_v4_port_config_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2174 /* uint32_t state; */
2175 ti
= proto_tree_add_item(port_tree
, hf_openflow_v4_port_state
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2176 state_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_port_state
);
2178 proto_tree_add_item(state_tree
, hf_openflow_v4_port_state_link_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2179 proto_tree_add_item(state_tree
, hf_openflow_v4_port_state_blocked
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2180 proto_tree_add_item(state_tree
, hf_openflow_v4_port_state_live
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2183 /* uint32_t curr; */
2184 ti
= proto_tree_add_item(port_tree
, hf_openflow_v4_port_current
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2185 curr_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_port_current
);
2187 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2188 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2189 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2190 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2191 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2192 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2193 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2194 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2195 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2196 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2197 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2198 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2199 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2200 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2201 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2202 proto_tree_add_item(curr_tree
, hf_openflow_v4_port_current_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2205 /* uint32_t advertised; */
2206 ti
= proto_tree_add_item(port_tree
, hf_openflow_v4_port_advertised
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2207 adv_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_port_advertised
);
2209 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2210 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2211 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2212 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2213 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2214 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2215 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2216 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2217 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2218 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2219 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2220 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2221 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2222 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2223 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2224 proto_tree_add_item(adv_tree
, hf_openflow_v4_port_advertised_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2227 /* uint32_t supported; */
2228 ti
= proto_tree_add_item(port_tree
, hf_openflow_v4_port_supported
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2229 supp_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_port_supported
);
2231 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2232 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2233 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2234 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2235 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2236 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2237 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2238 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2239 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2240 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2241 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2242 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2243 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2244 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2245 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2246 proto_tree_add_item(supp_tree
, hf_openflow_v4_port_supported_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2249 /* uint32_t peer; */
2250 ti
= proto_tree_add_item(port_tree
, hf_openflow_v4_port_peer
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2251 peer_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_port_peer
);
2253 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2254 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2255 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2256 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2257 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2258 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2259 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2260 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2261 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2262 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2263 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2264 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2265 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2266 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2267 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2268 proto_tree_add_item(peer_tree
, hf_openflow_v4_port_peer_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2271 /* uint32_t curr_speed; */
2272 proto_tree_add_item(port_tree
, hf_openflow_v4_port_curr_speed
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2275 /* uint32_t max_speed; */
2276 proto_tree_add_item(port_tree
, hf_openflow_v4_port_max_speed
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2285 #define OFPPR_DELETE 1
2286 #define OFPPR_MODIFY 2
2287 static const value_string openflow_v4_port_status_reason_values
[] = {
2288 { OFPPR_ADD
, "OFPPR_ADD" },
2289 { OFPPR_DELETE
, "OFPPR_DELETE" },
2290 { OFPPR_MODIFY
, "OFPPR_MODIFY" },
2295 dissect_openflow_port_status_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2297 /* uint8_t reason; */
2298 proto_tree_add_item(tree
, hf_openflow_v4_port_status_reason
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2301 /* uint8_t pad[7]; */
2302 proto_tree_add_item(tree
, hf_openflow_v4_port_status_pad
, tvb
, offset
, 7, ENC_NA
);
2305 /* struct ofp_port desc; */
2306 dissect_openflow_port_v4(tvb
, pinfo
, tree
, offset
, length
);
2311 dissect_openflow_packet_out_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2313 proto_tree
*data_tree
;
2318 bool save_in_error_pkt
;
2319 address save_dl_src
, save_dl_dst
, save_net_src
, save_net_dst
, save_src
, save_dst
;
2321 /* uint32_t buffer_id; */
2322 proto_tree_add_item(tree
, hf_openflow_v4_packet_out_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2325 /* uint32_t in_port; */
2326 proto_tree_add_item(tree
, hf_openflow_v4_packet_out_in_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2329 /* uint16_t actions_len; */
2330 acts_len
= tvb_get_ntohs(tvb
, offset
);
2331 proto_tree_add_item(tree
, hf_openflow_v4_packet_out_acts_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2334 /* uint8_t pad[6]; */
2335 proto_tree_add_item(tree
, hf_openflow_v4_packet_out_pad
, tvb
, offset
, 6, ENC_NA
);
2338 /* struct ofp_action_header actions[0]; */
2339 acts_end
= offset
+ acts_len
;
2341 while (offset
< acts_end
) {
2342 offset
= dissect_openflow_action_v4(tvb
, pinfo
, tree
, offset
, length
);
2345 /* uint8_t data[0]; */
2346 if (offset
< length
) {
2347 data_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, length
- offset
, ett_openflow_v4_packet_out_data
, NULL
, "Data");
2349 /* save some state */
2350 save_writable
= col_get_writable(pinfo
->cinfo
, -1);
2351 save_in_error_pkt
= pinfo
->flags
.in_error_pkt
;
2352 copy_address_shallow(&save_dl_src
, &pinfo
->dl_src
);
2353 copy_address_shallow(&save_dl_dst
, &pinfo
->dl_dst
);
2354 copy_address_shallow(&save_net_src
, &pinfo
->net_src
);
2355 copy_address_shallow(&save_net_dst
, &pinfo
->net_dst
);
2356 copy_address_shallow(&save_src
, &pinfo
->src
);
2357 copy_address_shallow(&save_dst
, &pinfo
->dst
);
2360 col_set_writable(pinfo
->cinfo
, -1, false);
2361 next_tvb
= tvb_new_subset_length(tvb
, offset
, length
- offset
);
2362 call_dissector(eth_withoutfcs_handle
, next_tvb
, pinfo
, data_tree
);
2364 /* restore saved state */
2365 col_set_writable(pinfo
->cinfo
, -1, save_writable
);
2366 pinfo
->flags
.in_error_pkt
= save_in_error_pkt
;
2367 copy_address_shallow(&pinfo
->dl_src
, &save_dl_src
);
2368 copy_address_shallow(&pinfo
->dl_dst
, &save_dl_dst
);
2369 copy_address_shallow(&pinfo
->net_src
, &save_net_src
);
2370 copy_address_shallow(&pinfo
->net_dst
, &save_net_dst
);
2371 copy_address_shallow(&pinfo
->src
, &save_src
);
2372 copy_address_shallow(&pinfo
->dst
, &save_dst
);
2377 #define OFPIT_GOTO_TABLE 1 /* Setup the next table in the lookup */
2378 #define OFPIT_WRITE_METADATA 2 /* Setup the metadata field for use later in */
2379 #define OFPIT_WRITE_ACTIONS 3 /* Write the action(s) onto the datapath action */
2380 #define OFPIT_APPLY_ACTIONS 4 /* Applies the action(s) immediately */
2381 #define OFPIT_CLEAR_ACTIONS 5 /* Clears all actions from the datapath */
2382 #define OFPIT_METER 6 /* Apply meter (rate limiter) */
2383 #define OFPIT_EXPERIMENTER 0xFFFF /* Experimenter instruction */
2384 static const value_string openflow_v4_instruction_type_values
[] = {
2385 { 0x0001, "OFPIT_GOTO_TABLE" },
2386 { 0x0002, "OFPIT_WRITE_METADATA" },
2387 { 0x0003, "OFPIT_WRITE_ACTIONS" },
2388 { 0x0004, "OFPIT_APPLY_ACTIONS" },
2389 { 0x0005, "OFPIT_CLEAR_ACTIONS" },
2390 { 0x0006, "OFPIT_METER" },
2391 { 0xffff, "OFPIT_EXPERIMENTER = 0xFFFF" },
2398 dissect_openflow_instruction_header_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2402 /* uint16_t type; */
2403 inst_type
= tvb_get_ntohs(tvb
, offset
);
2404 proto_tree_add_item(tree
, hf_openflow_v4_instruction_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2407 /* uint16_t length; */
2408 proto_tree_add_item(tree
, hf_openflow_v4_instruction_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2411 if (inst_type
== OFPIT_EXPERIMENTER
) {
2412 /* uint32_t experimenter; */
2413 proto_tree_add_item(tree
, hf_openflow_v4_instruction_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2422 dissect_openflow_instruction_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2424 proto_tree
*inst_tree
;
2426 uint16_t inst_length
;
2429 inst_type
= tvb_get_ntohs(tvb
, offset
);
2430 inst_length
= tvb_get_ntohs(tvb
, offset
+ 2);
2432 if (inst_length
< 8) {
2436 inst_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, inst_length
, ett_openflow_v4_instruction
, NULL
, "Instruction");
2438 offset
= dissect_openflow_instruction_header_v4(tvb
, pinfo
, inst_tree
, offset
, length
);
2440 switch (inst_type
) {
2441 case OFPIT_GOTO_TABLE
:
2442 /* uint8_t table_id; */
2443 proto_tree_add_item(inst_tree
, hf_openflow_v4_instruction_goto_table_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2446 /* uint8_t pad[3]; */
2447 proto_tree_add_item(inst_tree
, hf_openflow_v4_instruction_goto_table_pad
, tvb
, offset
, 3, ENC_NA
);
2451 case OFPIT_WRITE_METADATA
:
2452 /* uint8_t pad[4]; */
2453 proto_tree_add_item(inst_tree
, hf_openflow_v4_instruction_write_metadata_pad
, tvb
, offset
, 4, ENC_NA
);
2456 /* uint64_t metadata; */
2457 proto_tree_add_item(inst_tree
, hf_openflow_v4_instruction_write_metadata_value
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2460 /* uint64_t metadata_mask; */
2461 proto_tree_add_item(inst_tree
, hf_openflow_v4_instruction_write_metadata_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2465 case OFPIT_WRITE_ACTIONS
:
2466 case OFPIT_APPLY_ACTIONS
:
2467 case OFPIT_CLEAR_ACTIONS
:
2468 proto_tree_add_item(inst_tree
, hf_openflow_v4_instruction_actions_pad
, tvb
, offset
, 4, ENC_NA
);
2471 acts_end
= offset
+ inst_length
- 8;
2472 while (offset
< acts_end
) {
2473 offset
= dissect_openflow_action_v4(tvb
, pinfo
, inst_tree
, offset
, length
);
2478 /* uint32_t meter_id; */
2479 proto_tree_add_item(inst_tree
, hf_openflow_v4_instruction_meter_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2483 case OFPIT_EXPERIMENTER
:
2484 proto_tree_add_expert_format(inst_tree
, pinfo
, &ei_openflow_v4_instruction_undecoded
,
2485 tvb
, offset
, inst_length
- 8, "Experimenter instruction body.");
2486 offset
+= inst_length
- 8;
2490 proto_tree_add_expert_format(inst_tree
, pinfo
, &ei_openflow_v4_instruction_undecoded
,
2491 tvb
, offset
, inst_length
- 4, "Unknown instruction body.");
2492 offset
+= inst_length
- 4;
2500 static const value_string openflow_v4_flowmod_command_values
[] = {
2502 { 1, "OFPFC_MODIFY" },
2503 { 2, "OFPFC_MODIFY_STRICT" },
2504 { 3, "OFPFC_DELETE" },
2505 { 4, "OFPFC_DELETE_STRICT" },
2509 #define OFPFF_SEND_FLOW_REM 1 << 0 /* Send flow removed message when flow expires or is deleted. */
2510 #define OFPFF_CHECK_OVERLAP 1 << 1 /* Check for overlapping entries first. */
2511 #define OFPFF_RESET_COUNTS 1 << 2 /* Reset flow packet and byte counts. */
2512 #define OFPFF_NO_PKT_COUNTS 1 << 3 /* Don't keep track of packet count. */
2513 #define OFPFF_NO_BYT_COUNTS 1 << 4 /* Don't keep track of byte count. */
2516 dissect_openflow_flowmod_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2519 proto_tree
*flags_tree
;
2521 /* uint64_t cookie; */
2522 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2525 /* uint64_t cookie_mask; */
2526 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2529 /* uint8_t table_id; */
2530 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2533 /* uint8_t command; */
2534 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_command
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2537 /* uint16_t idle_timeout; */
2538 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2541 /* uint16_t hard_timeout; */
2542 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2545 /* uint16_t priority; */
2546 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2549 /* uint32_t buffer_id; */
2550 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_buffer_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2553 /* uint32_t out_port; */
2554 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2557 /* uint32_t out_group; */
2558 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2561 /* uint16_t flags; */
2562 ti
= proto_tree_add_item(tree
, hf_openflow_v4_flowmod_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2563 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_flowmod_flags
);
2565 proto_tree_add_item(flags_tree
, hf_openflow_v4_flowmod_flags_send_flow_rem
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2566 proto_tree_add_item(flags_tree
, hf_openflow_v4_flowmod_flags_check_overlap
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2567 proto_tree_add_item(flags_tree
, hf_openflow_v4_flowmod_flags_reset_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2568 proto_tree_add_item(flags_tree
, hf_openflow_v4_flowmod_flags_no_packet_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2569 proto_tree_add_item(flags_tree
, hf_openflow_v4_flowmod_flags_no_byte_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2572 /* uint8_t pad[2]; */
2573 proto_tree_add_item(tree
, hf_openflow_v4_flowmod_pad
, tvb
, offset
, 2, ENC_NA
);
2576 /* struct ofp_match match; */
2577 offset
= dissect_openflow_match_v4(tvb
, pinfo
, tree
, offset
, length
);
2579 /* struct ofp_instruction instructions[0]; */
2580 while (offset
< length
) {
2581 offset
= dissect_openflow_instruction_v4(tvb
, pinfo
, tree
, offset
, length
);
2586 dissect_openflow_bucket_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2589 proto_tree
*bucket_tree
;
2590 uint16_t bucket_length
;
2593 bucket_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_bucket
, &ti
, "Bucket");
2596 bucket_length
= tvb_get_ntohs(tvb
, offset
);
2597 proto_item_set_len(ti
, bucket_length
);
2598 proto_tree_add_item(bucket_tree
, hf_openflow_v4_bucket_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2601 if (bucket_length
< 16) {
2605 /* uint16_t weight; */
2606 proto_tree_add_item(bucket_tree
, hf_openflow_v4_bucket_weight
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2609 /* uint32_t watch_port; */
2610 proto_tree_add_item(bucket_tree
, hf_openflow_v4_bucket_watch_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2613 /* uint32_t watch_group; */
2614 proto_tree_add_item(bucket_tree
, hf_openflow_v4_bucket_watch_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2617 /* uint8_t pad[4]; */
2618 proto_tree_add_item(bucket_tree
, hf_openflow_v4_bucket_pad
, tvb
, offset
, 4, ENC_NA
);
2621 /*struct ofp_action_header actions[0]; */
2622 acts_end
= offset
+ bucket_length
- 16;
2623 while (offset
< acts_end
) {
2624 offset
= dissect_openflow_action_v4(tvb
, pinfo
, bucket_tree
, offset
, length
);
2631 static const value_string openflow_v4_groupmod_command_values
[] = {
2633 { 1, "OFPGC_MODIFY" },
2634 { 2, "OFPGC_DELETE" },
2639 #define OFPGT_SELECT 1
2640 #define OFPGT_INDIRECT 2
2642 static const value_string openflow_v4_group_type_values
[] = {
2643 { OFPGT_ALL
, "OFPGT_ALL" },
2644 { OFPGT_SELECT
, "OFPGT_SELECT" },
2645 { OFPGT_INDIRECT
, "OFPGT_INDIRECT" },
2646 { OFPGT_FF
, "OFPGT_FF" },
2651 dissect_openflow_groupmod_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2653 /* uint16_t command; */
2654 proto_tree_add_item(tree
, hf_openflow_v4_groupmod_command
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2658 proto_tree_add_item(tree
, hf_openflow_v4_groupmod_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2662 proto_tree_add_item(tree
, hf_openflow_v4_groupmod_pad
, tvb
, offset
, 1, ENC_NA
);
2665 /* uint32_t group_id; */
2666 proto_tree_add_item(tree
, hf_openflow_v4_groupmod_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2669 /* struct ofp_bucket buckets[0]; */
2670 while (offset
< length
) {
2671 offset
= dissect_openflow_bucket_v4(tvb
, pinfo
, tree
, offset
, length
);
2677 dissect_openflow_portmod_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2680 proto_tree
*conf_tree
, *mask_tree
, *adv_tree
;
2682 /* uint32_t port_no; */
2683 proto_tree_add_item(tree
, hf_openflow_v4_portmod_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2686 /* uint8_t pad[4]; */
2687 proto_tree_add_item(tree
, hf_openflow_v4_portmod_pad
, tvb
, offset
, 4, ENC_NA
);
2690 /* uint8_t hw_addr[OFP_ETH_ALEN]; */
2691 proto_tree_add_item(tree
, hf_openflow_v4_portmod_hw_addr
, tvb
, offset
, OFP_ETH_ALEN
, ENC_NA
);
2692 offset
+=OFP_ETH_ALEN
;
2694 /* uint8_t pad2[2]; */
2695 proto_tree_add_item(tree
, hf_openflow_v4_portmod_pad2
, tvb
, offset
, 2, ENC_NA
);
2698 /* uint32_t config; */
2699 ti
= proto_tree_add_item(tree
, hf_openflow_v4_portmod_config
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2700 conf_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_portmod_config
);
2702 proto_tree_add_item(conf_tree
, hf_openflow_v4_portmod_config_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2703 proto_tree_add_item(conf_tree
, hf_openflow_v4_portmod_config_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2704 proto_tree_add_item(conf_tree
, hf_openflow_v4_portmod_config_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2705 proto_tree_add_item(conf_tree
, hf_openflow_v4_portmod_config_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2708 /* uint32_t mask; */
2709 ti
= proto_tree_add_item(tree
, hf_openflow_v4_portmod_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2710 mask_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_portmod_mask
);
2712 proto_tree_add_item(mask_tree
, hf_openflow_v4_portmod_mask_port_down
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2713 proto_tree_add_item(mask_tree
, hf_openflow_v4_portmod_mask_no_recv
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2714 proto_tree_add_item(mask_tree
, hf_openflow_v4_portmod_mask_no_fwd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2715 proto_tree_add_item(mask_tree
, hf_openflow_v4_portmod_mask_no_packet_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2718 /* uint32_t advertise; */
2719 ti
= proto_tree_add_item(tree
, hf_openflow_v4_portmod_advertise
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2720 adv_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_portmod_advertise
);
2722 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_10mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2723 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_10mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2724 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_100mb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2725 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_100mb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2726 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_1gb_hd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2727 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_1gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2728 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_10gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2729 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_40gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2730 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_100gb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2731 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_1tb_fd
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2732 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_other
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2733 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_copper
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2734 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_fiber
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2735 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_autoneg
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2736 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_pause
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2737 proto_tree_add_item(adv_tree
, hf_openflow_v4_portmod_advertise_pause_asym
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2740 /* uint8_t pad3[4]; */
2741 proto_tree_add_item(tree
, hf_openflow_v4_portmod_pad3
, tvb
, offset
, 4, ENC_NA
);
2747 dissect_openflow_tablemod_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
2749 /* uint8_t table_id; */
2750 proto_tree_add_item(tree
, hf_openflow_v4_tablemod_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2753 /* uint8_t pad[3]; */
2754 proto_tree_add_item(tree
, hf_openflow_v4_tablemod_pad
, tvb
, offset
, 3, ENC_NA
);
2757 /* uint32_t config; */
2758 proto_tree_add_item(tree
, hf_openflow_v4_tablemod_config
, tvb
, offset
, 4, ENC_NA
);
2764 dissect_openflow_flow_stats_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2767 /* uint8_t table_id; */
2768 proto_tree_add_item(tree
, hf_openflow_v4_flow_stats_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2771 /* uint8_t pad[3]; */
2772 proto_tree_add_item(tree
, hf_openflow_v4_flow_stats_request_pad
, tvb
, offset
, 3, ENC_NA
);
2775 /* uint32_t out_port; */
2776 proto_tree_add_item(tree
, hf_openflow_v4_flow_stats_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2779 /* uint32_t out_group; */
2780 proto_tree_add_item(tree
, hf_openflow_v4_flow_stats_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2783 /* uint8_t pad2[4]; */
2784 proto_tree_add_item(tree
, hf_openflow_v4_flow_stats_request_pad2
, tvb
, offset
, 4, ENC_NA
);
2787 /* uint64_t cookie; */
2788 proto_tree_add_item(tree
, hf_openflow_v4_flow_stats_request_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2791 /* uint64_t cookie_mask; */
2792 proto_tree_add_item(tree
, hf_openflow_v4_flow_stats_request_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2795 /* struct ofp_match match; */
2796 dissect_openflow_match_v4(tvb
, pinfo
, tree
, offset
, length
);
2800 dissect_openflow_aggregate_stats_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2802 /* uint8_t table_id; */
2803 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_request_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2806 /* uint8_t pad[3]; */
2807 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_request_pad
, tvb
, offset
, 3, ENC_NA
);
2810 /* uint32_t out_port; */
2811 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_request_out_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2814 /* uint32_t out_group; */
2815 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_request_out_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2818 /* uint8_t pad2[4]; */
2819 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_request_pad2
, tvb
, offset
, 4, ENC_NA
);
2822 /* uint64_t cookie; */
2823 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_request_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2826 /* uint64_t cookie_mask; */
2827 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_request_cookie_mask
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2830 /* struct ofp_match match; */
2831 dissect_openflow_match_v4(tvb
, pinfo
, tree
, offset
, length
);
2835 #define OFPTFPT_INSTRUCTIONS 0
2836 #define OFPTFPT_INSTRUCTIONS_MISS 1
2837 #define OFPTFPT_NEXT_TABLES 2
2838 #define OFPTFPT_NEXT_TABLES_MISS 3
2839 #define OFPTFPT_WRITE_ACTIONS 4
2840 #define OFPTFPT_WRITE_ACTIONS_MISS 5
2841 #define OFPTFPT_APPLY_ACTIONS 6
2842 #define OFPTFPT_APPLY_ACTIONS_MISS 7
2843 #define OFPTFPT_MATCH 8
2844 #define OFPTFPT_WILDCARDS 10
2845 #define OFPTFPT_WRITE_SETFIELD 12
2846 #define OFPTFPT_WRITE_SETFIELD_MISS 13
2847 #define OFPTFPT_APPLY_SETFIELD 14
2848 #define OFPTFPT_APPLY_SETFIELD_MISS 15
2849 #define OFPTFPT_EXPERIMENTER 0xFFFE
2850 #define OFPTFPT_EXPERIMENTER_MISS 0xFFFF
2851 static const value_string openflow_v4_table_feature_prop_type_values
[] = {
2852 { OFPTFPT_INSTRUCTIONS
, "OFPTFPT_INSTRUCTIONS" },
2853 { OFPTFPT_INSTRUCTIONS_MISS
, "OFPTFPT_INSTRUCTIONS_MISS" },
2854 { OFPTFPT_NEXT_TABLES
, "OFPTFPT_NEXT_TABLES" },
2855 { OFPTFPT_NEXT_TABLES_MISS
, "OFPTFPT_NEXT_TABLES_MISS" },
2856 { OFPTFPT_WRITE_ACTIONS
, "OFPTFPT_WRITE_ACTIONS" },
2857 { OFPTFPT_WRITE_ACTIONS_MISS
, "OFPTFPT_WRITE_ACTIONS_MISS" },
2858 { OFPTFPT_APPLY_ACTIONS
, "OFPTFPT_APPLY_ACTIONS" },
2859 { OFPTFPT_APPLY_ACTIONS_MISS
, "OFPTFPT_APPLY_ACTIONS_MISS" },
2860 { OFPTFPT_MATCH
, "OFPTFPT_MATCH" },
2861 { OFPTFPT_WILDCARDS
, "OFPTFPT_WILDCARDS" },
2862 { OFPTFPT_WRITE_SETFIELD
, "OFPTFPT_WRITE_SETFIELD" },
2863 { OFPTFPT_WRITE_SETFIELD_MISS
, "OFPTFPT_WRITE_SETFIELD_MISS" },
2864 { OFPTFPT_APPLY_SETFIELD
, "OFPTFPT_APPLY_SETFIELD" },
2865 { OFPTFPT_APPLY_SETFIELD_MISS
, "OFPTFPT_APPLY_SETFIELD_MISS" },
2866 { OFPTFPT_EXPERIMENTER
, "OFPTFPT_EXPERIMENTER" },
2867 { OFPTFPT_EXPERIMENTER_MISS
, "OFPTFPT_EXPERIMENTER_MISS" },
2873 dissect_openflow_table_feature_prop_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2876 proto_tree
*prop_tree
, *elem_tree
;
2878 uint16_t prop_length
;
2879 uint16_t elem_begin
;
2881 uint16_t pad_length
;
2883 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_table_feature_prop
, &ti
, "Table feature property");
2885 /* uint16_t type; */
2886 prop_type
= tvb_get_ntohs(tvb
, offset
);
2887 proto_tree_add_item(prop_tree
, hf_openflow_v4_table_feature_prop_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2890 /* uint16_t length; */
2891 prop_length
= tvb_get_ntohs(tvb
, offset
);
2892 proto_item_set_len(ti
, prop_length
);
2893 proto_tree_add_item(prop_tree
, hf_openflow_v4_table_feature_prop_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2896 if (prop_length
< 4)
2899 body_end
= offset
+ prop_length
- 4;
2902 switch (prop_type
) {
2903 case OFPTFPT_INSTRUCTIONS
:
2904 case OFPTFPT_INSTRUCTIONS_MISS
:
2905 while (offset
< body_end
) {
2906 elem_begin
= offset
;
2907 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1,
2908 ett_openflow_v4_table_feature_prop_instruction_id
, &ti
, "Instruction ID");
2910 offset
= dissect_openflow_instruction_header_v4(tvb
, pinfo
, elem_tree
, offset
, length
);
2911 proto_item_set_len(ti
, offset
- elem_begin
);
2915 case OFPTFPT_NEXT_TABLES
:
2916 case OFPTFPT_NEXT_TABLES_MISS
:
2917 while (offset
< body_end
) {
2918 proto_tree_add_item(prop_tree
, hf_openflow_v4_table_feature_prop_next_tables_next_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2923 case OFPTFPT_WRITE_ACTIONS
:
2924 case OFPTFPT_WRITE_ACTIONS_MISS
:
2925 case OFPTFPT_APPLY_ACTIONS
:
2926 case OFPTFPT_APPLY_ACTIONS_MISS
:
2927 while (offset
< body_end
) {
2928 elem_begin
= offset
;
2929 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v4_table_feature_prop_action_id
, &ti
, "Action ID");
2931 offset
= dissect_openflow_action_header_v4(tvb
, pinfo
, elem_tree
, offset
, length
);
2932 proto_item_set_len(ti
, offset
- elem_begin
);
2937 case OFPTFPT_WILDCARDS
:
2938 case OFPTFPT_WRITE_SETFIELD
:
2939 case OFPTFPT_WRITE_SETFIELD_MISS
:
2940 case OFPTFPT_APPLY_SETFIELD
:
2941 case OFPTFPT_APPLY_SETFIELD_MISS
:
2942 while (offset
< body_end
) {
2943 elem_begin
= offset
;
2944 elem_tree
= proto_tree_add_subtree(prop_tree
, tvb
, offset
, -1, ett_openflow_v4_table_feature_prop_oxm_id
, &ti
, "OXM ID");
2946 offset
= dissect_openflow_oxm_header_v4(tvb
, pinfo
, elem_tree
, offset
, length
);
2947 proto_item_set_len(ti
, offset
- elem_begin
);
2951 case OFPTFPT_EXPERIMENTER
:
2952 case OFPTFPT_EXPERIMENTER_MISS
:
2953 /* uint32_t experimenter; */
2954 proto_tree_add_item(prop_tree
, hf_openflow_v4_table_feature_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2957 /* uint32_t exp_type; */
2958 proto_tree_add_item(prop_tree
, hf_openflow_v4_table_feature_prop_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2961 /* uint32_t experimenter_data[0]; */
2962 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v4_table_feature_prop_undecoded
,
2963 tvb
, offset
, body_end
- offset
, "Experimenter table property body.");
2968 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v4_table_feature_prop_undecoded
,
2969 tvb
, offset
, body_end
- offset
, "Unknown table property body.");
2974 pad_length
= (prop_length
+ 7)/8*8 - prop_length
;
2975 if (pad_length
> 0) {
2976 proto_tree_add_item(prop_tree
, hf_openflow_v4_table_feature_prop_pad
, tvb
, offset
, pad_length
, ENC_NA
);
2984 #define OFP_MAX_TABLE_NAME_LEN 32
2986 dissect_openflow_table_features_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
2989 proto_tree
*feat_tree
;
2990 uint16_t feat_length
;
2993 feat_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_table_features
, &ti
, "Table features");
2995 /* uint16_t length; */
2996 feat_length
= tvb_get_ntohs(tvb
, offset
);
2997 feat_end
= offset
+ feat_length
;
2998 proto_item_set_len(ti
, feat_length
);
2999 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3002 /* uint8_t table_id; */
3003 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3006 /* uint8_t pad[5]; */
3007 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_pad
, tvb
, offset
, 5, ENC_NA
);
3010 /* char name[OFP_MAX_TABLE_NAME_LEN]; */
3011 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_name
, tvb
, offset
, OFP_MAX_TABLE_NAME_LEN
, ENC_ASCII
);
3012 offset
+=OFP_MAX_TABLE_NAME_LEN
;
3014 /* uint64_t metadata_match; */
3015 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_metadata_match
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3018 /* uint64_t metadata_write; */
3019 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_metadata_write
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3022 /* uint32_t config; */
3023 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_config
, tvb
, offset
, 4, ENC_NA
);
3026 /* uint32_t max_entries; */
3027 proto_tree_add_item(feat_tree
, hf_openflow_v4_table_features_max_entries
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3030 /* struct ofp_table_feature_prop_header properties[0]; */
3031 while (offset
< feat_end
) {
3032 offset
= dissect_openflow_table_feature_prop_v4(tvb
, pinfo
, feat_tree
, offset
, length
);
3040 dissect_openflow_port_stats_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3042 /* uint32_t port_no; */
3043 proto_tree_add_item(tree
, hf_openflow_v4_port_stats_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3046 /* uint8_t pad[4]; */
3047 proto_tree_add_item(tree
, hf_openflow_v4_port_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
3051 #define OFPQ_ALL 0xffffffff
3052 static const value_string openflow_v4_queue_reserved_values
[] = {
3053 { OFPQ_ALL
, "OFPQ_ALL" },
3058 dissect_openflow_queue_stats_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3060 /* uint32_t port_no; */
3061 proto_tree_add_item(tree
, hf_openflow_v4_queue_stats_request_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3064 /* uint32_t queue_id; */
3065 proto_tree_add_item(tree
, hf_openflow_v4_queue_stats_request_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3071 dissect_openflow_group_stats_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3073 /* uint32_t group_id; */
3074 proto_tree_add_item(tree
, hf_openflow_v4_group_stats_request_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3077 /* uint8_t pad[4]; */
3078 proto_tree_add_item(tree
, hf_openflow_v4_group_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
3084 dissect_openflow_meter_stats_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3086 /* uint32_t meter_id; */
3087 proto_tree_add_item(tree
, hf_openflow_v4_meter_stats_request_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3090 /* uint8_t pad[4]; */
3091 proto_tree_add_item(tree
, hf_openflow_v4_meter_stats_request_pad
, tvb
, offset
, 4, ENC_NA
);
3097 dissect_openflow_meter_config_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3099 /* uint32_t meter_id; */
3100 proto_tree_add_item(tree
, hf_openflow_v4_meter_config_request_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3103 /* uint8_t pad[4]; */
3104 proto_tree_add_item(tree
, hf_openflow_v4_meter_config_request_pad
, tvb
, offset
, 4, ENC_NA
);
3109 #define OFPMP_DESC 0
3110 #define OFPMP_FLOW 1
3111 #define OFPMP_AGGREGATE 2
3112 #define OFPMP_TABLE 3
3113 #define OFPMP_PORT_STATS 4
3114 #define OFPMP_QUEUE 5
3115 #define OFPMP_GROUP 6
3116 #define OFPMP_GROUP_DESC 7
3117 #define OFPMP_GROUP_FEATURES 8
3118 #define OFPMP_METER 9
3119 #define OFPMP_METER_CONFIG 10
3120 #define OFPMP_METER_FEATURES 11
3121 #define OFPMP_TABLE_FEATURES 12
3122 #define OFPMP_PORT_DESC 13
3123 #define OFPMP_EXPERIMENTER 0xffff
3124 static const value_string openflow_v4_multipart_type_values
[] = {
3125 { OFPMP_DESC
, "OFPMP_DESC" },
3126 { OFPMP_FLOW
, "OFPMP_FLOW" },
3127 { OFPMP_AGGREGATE
, "OFPMP_AGGREGATE" },
3128 { OFPMP_TABLE
, "OFPMP_TABLE" },
3129 { OFPMP_PORT_STATS
, "OFPMP_PORT_STATS" },
3130 { OFPMP_QUEUE
, "OFPMP_QUEUE" },
3131 { OFPMP_GROUP
, "OFPMP_GROUP" },
3132 { OFPMP_GROUP_DESC
, "OFPMP_GROUP_DESC" },
3133 { OFPMP_GROUP_FEATURES
, "OFPMP_GROUP_FEATURES" },
3134 { OFPMP_METER
, "OFPMP_METER" },
3135 { OFPMP_METER_CONFIG
, "OFPMP_METER_CONFIG" },
3136 { OFPMP_METER_FEATURES
, "OFPMP_METER_FEATURES" },
3137 { OFPMP_TABLE_FEATURES
, "OFPMP_TABLE_FEATURES" },
3138 { OFPMP_PORT_DESC
, "OFPMP_PORT_DESC" },
3139 { OFPMP_EXPERIMENTER
, "OFPMP_EXPERIMENTER" },
3143 #define OFPMPF_REQ_MORE 1 << 0
3145 dissect_openflow_multipart_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3148 proto_tree
*flags_tree
;
3151 /* uint16_t type; */
3152 type
= tvb_get_ntohs(tvb
, offset
);
3153 proto_tree_add_item(tree
, hf_openflow_v4_multipart_request_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3156 col_append_fstr(pinfo
->cinfo
, COL_INFO
, ", %s",
3157 val_to_str_const(type
, openflow_v4_multipart_type_values
, "Unknown type"));
3159 /* uint16_t flags; */
3160 ti
= proto_tree_add_item(tree
, hf_openflow_v4_multipart_request_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3161 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_multipart_request_flags
);
3163 proto_tree_add_item(flags_tree
, hf_openflow_v4_multipart_request_flags_more
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3166 /* uint8_t pad[4]; */
3167 proto_tree_add_item(tree
, hf_openflow_v4_multipart_request_pad
, tvb
, offset
, 4, ENC_NA
);
3170 /* uint8_t body[0]; */
3173 /* The request body is empty. */
3176 dissect_openflow_flow_stats_request_v4(tvb
, pinfo
, tree
, offset
, length
);
3178 case OFPMP_AGGREGATE
:
3179 dissect_openflow_aggregate_stats_request_v4(tvb
, pinfo
, tree
, offset
, length
);
3182 /* The request body is empty. */
3184 case OFPMP_PORT_STATS
:
3185 dissect_openflow_port_stats_request_v4(tvb
, pinfo
, tree
, offset
, length
);
3188 dissect_openflow_queue_stats_request_v4(tvb
, pinfo
, tree
, offset
, length
);
3191 dissect_openflow_group_stats_request_v4(tvb
, pinfo
, tree
, offset
, length
);
3193 case OFPMP_GROUP_DESC
:
3194 /* The request body is empty. */
3196 case OFPMP_GROUP_FEATURES
:
3197 /* The request body is empty. */
3200 dissect_openflow_meter_stats_request_v4(tvb
, pinfo
, tree
, offset
, length
);
3202 case OFPMP_METER_CONFIG
:
3203 dissect_openflow_meter_config_request_v4(tvb
, pinfo
, tree
, offset
, length
);
3205 case OFPMP_METER_FEATURES
:
3206 /* The request body is empty. */
3208 case OFPMP_TABLE_FEATURES
:
3209 while (offset
< length
) {
3210 offset
= dissect_openflow_table_features_v4(tvb
, pinfo
, tree
, offset
, length
);
3213 case OFPMP_PORT_DESC
:
3214 /* The request body is empty. */
3216 case OFPMP_EXPERIMENTER
:
3217 /* uint32_t experimenter; */
3218 proto_tree_add_item(tree
, hf_openflow_v4_multipart_request_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3221 /* uint32_t exp_type; */
3222 proto_tree_add_item(tree
, hf_openflow_v4_multipart_request_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3225 /* uint32_t experimenter_data[0]; */
3226 if (offset
< length
) {
3227 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_multipart_request_undecoded
,
3228 tvb
, offset
, length
- offset
, "Experimenter multipart request body.");
3232 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_multipart_request_undecoded
,
3233 tvb
, offset
, length
- offset
, "Unknown multipart request body.");
3239 #define DESC_STR_LEN 256
3240 #define SERIAL_NUM_LEN 32
3242 dissect_openflow_switch_description_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3244 /* char mfr_desc[DESC_STR_LEN]; */
3245 proto_tree_add_item(tree
, hf_openflow_v4_switch_description_mfr_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
3246 offset
+=DESC_STR_LEN
;
3248 /* char hw_desc[DESC_STR_LEN]; */
3249 proto_tree_add_item(tree
, hf_openflow_v4_switch_description_hw_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
3250 offset
+=DESC_STR_LEN
;
3252 /* char sw_desc[DESC_STR_LEN]; */
3253 proto_tree_add_item(tree
, hf_openflow_v4_switch_description_sw_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
3254 offset
+=DESC_STR_LEN
;
3256 /* char serial_num[SERIAL_NUM_LEN]; */
3257 proto_tree_add_item(tree
, hf_openflow_v4_switch_description_serial_num
, tvb
, offset
, SERIAL_NUM_LEN
, ENC_ASCII
);
3258 offset
+=SERIAL_NUM_LEN
;
3260 /* char dp_desc[DESC_STR_LEN]; */
3261 proto_tree_add_item(tree
, hf_openflow_v4_switch_description_dp_desc
, tvb
, offset
, DESC_STR_LEN
, ENC_ASCII
);
3262 /*offset+=DESC_STR_LEN;*/
3267 dissect_openflow_flow_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3270 proto_tree
*stats_tree
, *flags_tree
;
3274 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_flow_stats
, &ti
, "Flow stats");
3276 /* uint16_t length; */
3277 stats_len
= tvb_get_ntohs(tvb
, offset
);
3278 stats_end
= offset
+ stats_len
;
3279 proto_item_set_len(ti
, stats_len
);
3280 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3283 /* uint8_t table_id; */
3284 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3288 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_pad
, tvb
, offset
, 1, ENC_NA
);
3291 /* uint32_t duration_sec; */
3292 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3295 /* uint32_t duration_nsec; */
3296 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3299 /* uint16_t priority; */
3300 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3303 /* uint16_t idle_timeout; */
3304 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_idle_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3307 /* uint16_t hard_timeout; */
3308 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_hard_timeout
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3311 /* uint16_t flags; */
3312 ti
= proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3313 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_flow_stats_flags
);
3315 proto_tree_add_item(flags_tree
, hf_openflow_v4_flow_stats_flags_send_flow_rem
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3316 proto_tree_add_item(flags_tree
, hf_openflow_v4_flow_stats_flags_check_overlap
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3317 proto_tree_add_item(flags_tree
, hf_openflow_v4_flow_stats_flags_reset_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3318 proto_tree_add_item(flags_tree
, hf_openflow_v4_flow_stats_flags_no_packet_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3319 proto_tree_add_item(flags_tree
, hf_openflow_v4_flow_stats_flags_no_byte_counts
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3322 /* uint8_t pad2[4]; */
3323 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_pad2
, tvb
, offset
, 4, ENC_NA
);
3326 /* uint64_t cookie; */
3327 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_cookie
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3330 /* uint64_t packet_count; */
3331 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3334 /* uint64_t byte_count; */
3335 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3338 /* struct ofp_match match; */
3339 offset
= dissect_openflow_match_v4(tvb
, pinfo
, stats_tree
, offset
, length
);
3341 /* struct ofp_instruction instructions[0]; */
3342 while (offset
< stats_end
) {
3343 offset
= dissect_openflow_instruction_v4(tvb
, pinfo
, stats_tree
, offset
, length
);
3351 dissect_openflow_aggregate_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3353 /* uint64_t packet_count; */
3354 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3357 /* uint64_t byte_count; */
3358 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3361 /* uint32_t flow_count; */
3362 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_flow_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3365 /* uint8_t pad[4]; */
3366 proto_tree_add_item(tree
, hf_openflow_v4_aggregate_stats_pad
, tvb
, offset
, 4, ENC_NA
);
3372 dissect_openflow_table_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3374 proto_tree
*stats_tree
;
3376 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 24, ett_openflow_v4_table_stats
, NULL
, "Table stats");
3378 /* uint8_t table_id; */
3379 proto_tree_add_item(stats_tree
, hf_openflow_v4_table_stats_table_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3382 /* uint8_t pad[3]; */
3383 proto_tree_add_item(stats_tree
, hf_openflow_v4_table_stats_pad
, tvb
, offset
, 3, ENC_NA
);
3386 /* uint32_t active_count; */
3387 proto_tree_add_item(stats_tree
, hf_openflow_v4_table_stats_active_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3390 /* uint64_t lookup_count; */
3391 proto_tree_add_item(stats_tree
, hf_openflow_v4_table_stats_lookup_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3394 /* uint64_t matched_count; */
3395 proto_tree_add_item(stats_tree
, hf_openflow_v4_table_stats_match_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3403 dissect_openflow_port_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3405 proto_tree
*stats_tree
;
3407 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 112, ett_openflow_v4_port_stats
, NULL
, "Port stats");
3409 /* uint8_t port_no; */
3410 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3413 /* uint8_t pad[4]; */
3414 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_pad
, tvb
, offset
, 4, ENC_NA
);
3417 /* uint64_t rx_packets; */
3418 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_rx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3421 /* uint64_t tx_packets; */
3422 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_tx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3425 /* uint64_t rx_bytes; */
3426 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_rx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3429 /* uint64_t tx_bytes; */
3430 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_tx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3433 /* uint64_t rx_dropped; */
3434 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_rx_dropped
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3437 /* uint64_t tx_dropped; */
3438 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_tx_dropped
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3441 /* uint64_t rx_errors; */
3442 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_rx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3445 /* uint64_t tx_errors; */
3446 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_tx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3449 /* uint64_t rx_frame_error; */
3450 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_rx_frame_error
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3453 /* uint64_t rx_over_error; */
3454 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_rx_over_error
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3457 /* uint64_t rx_crc_error; */
3458 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_rx_crc_error
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3461 /* uint64_t collisions; */
3462 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_collisions
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3465 /* uint32_t duration_sec; */
3466 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3469 /* uint32_t duration_nsec; */
3470 proto_tree_add_item(stats_tree
, hf_openflow_v4_port_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3478 dissect_openflow_queue_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3480 proto_tree
*stats_tree
;
3482 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 40, ett_openflow_v4_queue_stats
, NULL
, "Queue stats");
3484 /* uint32_t port_no; */
3485 proto_tree_add_item(stats_tree
, hf_openflow_v4_queue_stats_port_no
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3488 /* uint32_t queue_id; */
3489 proto_tree_add_item(stats_tree
, hf_openflow_v4_queue_stats_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3492 /* uint64_t tx_bytes; */
3493 proto_tree_add_item(stats_tree
, hf_openflow_v4_queue_stats_tx_bytes
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3496 /* uint64_t tx_packets; */
3497 proto_tree_add_item(stats_tree
, hf_openflow_v4_queue_stats_tx_packets
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3500 /* uint64_t tx_errors; */
3501 proto_tree_add_item(stats_tree
, hf_openflow_v4_queue_stats_tx_errors
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3504 /* uint32_t duration_sec; */
3505 proto_tree_add_item(stats_tree
, hf_openflow_v4_queue_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3508 /* uint32_t duration_nsec; */
3509 proto_tree_add_item(stats_tree
, hf_openflow_v4_queue_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3517 dissect_openflow_bucket_counter_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3519 proto_tree
*counter_tree
;
3521 counter_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 16, ett_openflow_v4_bucket_counter
, NULL
, "Bucket counter");
3523 /* uint64_t packet_count; */
3524 proto_tree_add_item(counter_tree
, hf_openflow_v4_bucket_counter_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3527 /* uint64_t byte_count; */
3528 proto_tree_add_item(counter_tree
, hf_openflow_v4_bucket_counter_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3536 dissect_openflow_group_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3539 proto_tree
*stats_tree
;
3543 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_group_stats
, &ti
, "Group stats");
3545 /* uint16_t length; */
3546 stats_len
= tvb_get_ntohs(tvb
, offset
);
3547 stats_end
= offset
+ stats_len
;
3548 proto_item_set_len(ti
, stats_len
);
3549 proto_tree_add_item(stats_tree
, hf_openflow_v4_group_stats_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3552 /* uint8_t pad[2]; */
3553 proto_tree_add_item(stats_tree
, hf_openflow_v4_group_stats_pad
, tvb
, offset
, 2, ENC_NA
);
3556 /* uint32_t group_id; */
3557 proto_tree_add_item(stats_tree
, hf_openflow_v4_group_stats_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3560 /* uint32_t ref_count; */
3561 proto_tree_add_item(stats_tree
, hf_openflow_v4_group_stats_ref_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3564 /* uint8_t pad2[4]; */
3565 proto_tree_add_item(stats_tree
, hf_openflow_v4_group_stats_pad2
, tvb
, offset
, 4, ENC_NA
);
3568 /* uint64_t packet_count; */
3569 proto_tree_add_item(stats_tree
, hf_openflow_v4_group_stats_packet_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3572 /* uint64_t byte_count; */
3573 proto_tree_add_item(stats_tree
, hf_openflow_v4_group_stats_byte_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3576 /* uint32_t duration_sec; */
3577 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3580 /* uint32_t duration_nsec; */
3581 proto_tree_add_item(stats_tree
, hf_openflow_v4_flow_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3584 /* struct ofp_bucket_counter bucket_stats[0]; */
3585 while (offset
< stats_end
) {
3586 offset
= dissect_openflow_bucket_counter_v4(tvb
, pinfo
, stats_tree
, offset
, length
);
3593 dissect_openflow_group_desc_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3596 proto_tree
*desc_tree
;
3601 desc_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_group_desc
, &ti
, "Group description");
3603 /* uint16_t length; */
3604 desc_len
= tvb_get_ntohs(tvb
, offset
);
3605 desc_end
= offset
+ desc_len
;
3606 proto_item_set_len(ti
, desc_len
);
3607 proto_tree_add_item(desc_tree
, hf_openflow_v4_group_desc_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3611 proto_tree_add_item(desc_tree
, hf_openflow_v4_group_desc_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3615 proto_tree_add_item(desc_tree
, hf_openflow_v4_group_desc_pad
, tvb
, offset
, 1, ENC_NA
);
3618 /* uint32_t group_id; */
3619 proto_tree_add_item(desc_tree
, hf_openflow_v4_group_desc_group_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3622 /* struct ofp_bucket buckets[0]; */
3623 while (offset
< desc_end
) {
3624 offset
= dissect_openflow_bucket_v4(tvb
, pinfo
, desc_tree
, offset
, length
);
3631 #define OFPGFC_SELECT_WEIGHT 1 << 0
3632 #define OFPGFC_SELECT_LIVENESS 1 << 1
3633 #define OFPGFC_CHAINING 1 << 2
3634 #define OFPGFC_CHAINING_CHECKS 1 << 3
3636 dissect_openflow_group_features_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3639 proto_tree
*types_tree
, *caps_tree
, *acts_tree
;
3641 /* uint32_t types; */
3642 ti
= proto_tree_add_item(tree
, hf_openflow_v4_group_features_types
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3643 types_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_group_features_types
);
3645 proto_tree_add_item(types_tree
, hf_openflow_v4_group_features_types_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3646 proto_tree_add_item(types_tree
, hf_openflow_v4_group_features_types_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3647 proto_tree_add_item(types_tree
, hf_openflow_v4_group_features_types_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3648 proto_tree_add_item(types_tree
, hf_openflow_v4_group_features_types_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3651 /* uint32_t capabilities; */
3652 ti
= proto_tree_add_item(tree
, hf_openflow_v4_group_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3653 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_group_features_capabilities
);
3655 proto_tree_add_item(caps_tree
, hf_openflow_v4_group_features_capabilities_select_weight
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3656 proto_tree_add_item(caps_tree
, hf_openflow_v4_group_features_capabilities_select_liveness
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3657 proto_tree_add_item(caps_tree
, hf_openflow_v4_group_features_capabilities_chaining
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3658 proto_tree_add_item(caps_tree
, hf_openflow_v4_group_features_capabilities_chaining_checks
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3661 /* max_groups[4]; */
3662 proto_tree_add_item(tree
, hf_openflow_v4_group_features_max_groups_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3664 proto_tree_add_item(tree
, hf_openflow_v4_group_features_max_groups_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3666 proto_tree_add_item(tree
, hf_openflow_v4_group_features_max_groups_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3668 proto_tree_add_item(tree
, hf_openflow_v4_group_features_max_groups_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3671 /* uint32_t actions[4]; */
3672 ti
= proto_tree_add_item(tree
, hf_openflow_v4_group_features_actions_all
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3673 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_group_features_actions_all
);
3675 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3676 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3677 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3678 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3679 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3680 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3681 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3682 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3683 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3684 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3685 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3686 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3687 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3688 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3689 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3690 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_all_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3693 ti
= proto_tree_add_item(tree
, hf_openflow_v4_group_features_actions_select
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3694 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_group_features_actions_select
);
3696 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3697 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3698 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3699 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3700 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3701 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3702 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3703 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3704 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3705 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3706 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3707 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3708 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3709 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3710 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3711 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_select_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3714 ti
= proto_tree_add_item(tree
, hf_openflow_v4_group_features_actions_indirect
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3715 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_group_features_actions_indirect
);
3717 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3718 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3719 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3720 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3721 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3722 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3723 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3724 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3725 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3726 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3727 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3728 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3729 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3730 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3731 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3732 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_indirect_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3735 ti
= proto_tree_add_item(tree
, hf_openflow_v4_group_features_actions_ff
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3736 acts_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_group_features_actions_ff
);
3738 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_output
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3739 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_copy_ttl_out
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3740 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_copy_ttl_in
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3741 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_set_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3742 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_dec_mpls_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3743 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_push_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3744 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_pop_vlan
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3745 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_push_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3746 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_pop_mpls
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3747 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_set_queue
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3748 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_group
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3749 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_set_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3750 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_dec_nw_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3751 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_set_field
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3752 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_push_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3753 proto_tree_add_item(acts_tree
, hf_openflow_v4_group_features_actions_ff_pop_pbb
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3759 dissect_openflow_meter_band_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3761 proto_tree
*stats_tree
;
3763 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 16, ett_openflow_v4_meter_band_stats
, NULL
, "Meter band stats");
3765 /* uint64_t packet_band_count; */
3766 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_band_stats_packet_band_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3769 /* uint64_t byte_band_count; */
3770 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_band_stats_byte_band_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3778 dissect_openflow_meter_stats_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3781 proto_tree
*stats_tree
;
3785 stats_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_meter_stats
, &ti
, "Meter stats");
3787 /* uint32_t meter_id; */
3788 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3792 stats_len
= tvb_get_ntohs(tvb
, offset
);
3793 stats_end
= offset
- 4 + stats_len
;
3794 proto_item_set_len(ti
, stats_len
);
3795 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3798 /* uint8_t pad[6]; */
3799 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_pad
, tvb
, offset
, 6, ENC_NA
);
3802 /* uint32_t flow_count; */
3803 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_flow_count
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3806 /* uint64_t packet_in_count; */
3807 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_packet_in_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3810 /* uint64_t byte_in_count; */
3811 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_byte_in_count
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
3814 /* uint32_t duration_sec; */
3815 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_duration_sec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3818 /* uint32_t duration_nsec; */
3819 proto_tree_add_item(stats_tree
, hf_openflow_v4_meter_stats_duration_nsec
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3822 /* struct ofp_meter_band_stats band_stats[0]; */
3823 while (offset
< stats_end
) {
3824 offset
= dissect_openflow_meter_band_stats_v4(tvb
, pinfo
, stats_tree
, offset
, length
);
3832 dissect_openflow_meter_config_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3835 proto_tree
*conf_tree
, *flags_tree
;
3836 uint16_t config_len
;
3839 conf_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_meter_config
, &ti
, "Meter config");
3842 config_len
= tvb_get_ntohs(tvb
, offset
);
3843 config_end
= offset
+ config_len
;
3844 proto_item_set_len(ti
, config_len
);
3845 proto_tree_add_item(conf_tree
, hf_openflow_v4_meter_config_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3848 /* uint16_t flags; */
3849 ti
= proto_tree_add_item(conf_tree
, hf_openflow_v4_meter_config_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3850 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_meter_config_flags
);
3852 proto_tree_add_item(flags_tree
, hf_openflow_v4_meter_config_flags_kbps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3853 proto_tree_add_item(flags_tree
, hf_openflow_v4_meter_config_flags_pktps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3854 proto_tree_add_item(flags_tree
, hf_openflow_v4_meter_config_flags_burst
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3855 proto_tree_add_item(flags_tree
, hf_openflow_v4_meter_config_flags_stats
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3858 /* uint32_t meter_id; */
3859 proto_tree_add_item(conf_tree
, hf_openflow_v4_meter_config_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3862 /* struct ofp_meter_band_header bands[0]; */
3863 while (offset
< config_end
) {
3864 offset
= dissect_openflow_meter_band_v4(tvb
, pinfo
, conf_tree
, offset
, length
);
3871 #define OFPMF_KBPS 1 << 0
3872 #define OFPMF_PKTPS 1 << 1
3873 #define OFPMF_BURST 1 << 2
3874 #define OFPMF_STATS 1 << 3
3876 dissect_openflow_meter_features_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
3879 proto_tree
*bands_tree
, *caps_tree
;
3881 /* uint32_t max_meter; */
3882 proto_tree_add_item(tree
, hf_openflow_v4_meter_features_max_meter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3885 /* uint32_t band_types; */
3886 ti
= proto_tree_add_item(tree
, hf_openflow_v4_meter_features_band_types
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3887 bands_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_meter_features_band_types
);
3889 proto_tree_add_item(bands_tree
, hf_openflow_v4_meter_features_band_types_drop
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3890 proto_tree_add_item(bands_tree
, hf_openflow_v4_meter_features_band_types_dscp_remark
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3893 /* uint32_t capabilities; */
3894 ti
= proto_tree_add_item(tree
, hf_openflow_v4_meter_features_capabilities
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3895 caps_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_meter_features_capabilities
);
3897 proto_tree_add_item(caps_tree
, hf_openflow_v4_meter_features_capabilities_kbps
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3898 proto_tree_add_item(caps_tree
, hf_openflow_v4_meter_features_capabilities_pktps
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3899 proto_tree_add_item(caps_tree
, hf_openflow_v4_meter_features_capabilities_burst
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3900 proto_tree_add_item(caps_tree
, hf_openflow_v4_meter_features_capabilities_stats
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3903 /* uint8_t max_bands; */
3904 proto_tree_add_item(tree
, hf_openflow_v4_meter_features_max_bands
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3907 /* uint8_t max_color; */
3908 proto_tree_add_item(tree
, hf_openflow_v4_meter_features_max_color
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3911 /* uint8_t pad[2]; */
3912 proto_tree_add_item(tree
, hf_openflow_v4_meter_features_pad
, tvb
, offset
, 2, ENC_NA
);
3917 #define OFPMPF_REPLY_MORE 1 << 0
3919 dissect_openflow_multipart_reply_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
3922 proto_tree
*flags_tree
;
3925 /* uint16_t type; */
3926 type
= tvb_get_ntohs(tvb
, offset
);
3927 proto_tree_add_item(tree
, hf_openflow_v4_multipart_reply_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3930 col_append_fstr(pinfo
->cinfo
, COL_INFO
, ", %s",
3931 val_to_str_const(type
, openflow_v4_multipart_type_values
, "Unknown type"));
3933 /* uint16_t flags; */
3934 ti
= proto_tree_add_item(tree
, hf_openflow_v4_multipart_reply_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3935 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_multipart_reply_flags
);
3937 proto_tree_add_item(flags_tree
, hf_openflow_v4_multipart_reply_flags_more
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3940 /* uint8_t pad[4]; */
3941 proto_tree_add_item(tree
, hf_openflow_v4_multipart_reply_pad
, tvb
, offset
, 4, ENC_NA
);
3946 dissect_openflow_switch_description_v4(tvb
, pinfo
, tree
, offset
, length
);
3949 while (offset
< length
) {
3950 offset
= dissect_openflow_flow_stats_v4(tvb
, pinfo
, tree
, offset
, length
);
3953 case OFPMP_AGGREGATE
:
3954 dissect_openflow_aggregate_stats_v4(tvb
, pinfo
, tree
, offset
, length
);
3957 while (offset
< length
) {
3958 offset
= dissect_openflow_table_stats_v4(tvb
, pinfo
, tree
, offset
, length
);
3961 case OFPMP_PORT_STATS
:
3962 while (offset
< length
) {
3963 offset
= dissect_openflow_port_stats_v4(tvb
, pinfo
, tree
, offset
, length
);
3967 while (offset
< length
) {
3968 offset
= dissect_openflow_queue_stats_v4(tvb
, pinfo
, tree
, offset
, length
);
3972 while (offset
< length
) {
3973 offset
= dissect_openflow_group_stats_v4(tvb
, pinfo
, tree
, offset
, length
);
3976 case OFPMP_GROUP_DESC
:
3977 while (offset
< length
) {
3978 offset
= dissect_openflow_group_desc_v4(tvb
, pinfo
, tree
, offset
, length
);
3981 case OFPMP_GROUP_FEATURES
:
3982 dissect_openflow_group_features_v4(tvb
, pinfo
, tree
, offset
, length
);
3985 while (offset
< length
) {
3986 offset
= dissect_openflow_meter_stats_v4(tvb
, pinfo
, tree
, offset
, length
);
3989 case OFPMP_METER_CONFIG
:
3990 while (offset
< length
) {
3991 offset
= dissect_openflow_meter_config_v4(tvb
, pinfo
, tree
, offset
, length
);
3994 case OFPMP_METER_FEATURES
:
3995 dissect_openflow_meter_features_v4(tvb
, pinfo
, tree
, offset
, length
);
3997 case OFPMP_TABLE_FEATURES
:
3998 while (offset
< length
) {
3999 offset
= dissect_openflow_table_features_v4(tvb
, pinfo
, tree
, offset
, length
);
4002 case OFPMP_PORT_DESC
:
4003 while (offset
< length
) {
4004 offset
= dissect_openflow_port_v4(tvb
, pinfo
, tree
, offset
, length
);
4008 case OFPMP_EXPERIMENTER
:
4009 /* uint32_t experimenter; */
4010 proto_tree_add_item(tree
, hf_openflow_v4_multipart_reply_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4013 /* uint32_t exp_type; */
4014 proto_tree_add_item(tree
, hf_openflow_v4_multipart_reply_experimenter_exp_type
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4017 /* uint32_t experimenter_data[0]; */
4018 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_multipart_reply_undecoded
,
4019 tvb
, offset
, length
- 16, "Experimenter multipart reply body.");
4023 proto_tree_add_expert_format(tree
, pinfo
, &ei_openflow_v4_multipart_reply_undecoded
,
4024 tvb
, offset
, length
- 8, "Unknown multipart reply body.");
4032 dissect_openflow_queue_get_config_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4034 /* uint32_t port; */
4035 proto_tree_add_item(tree
, hf_openflow_v4_queue_get_config_request_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4038 /* uint8_t pad[4]; */
4039 proto_tree_add_item(tree
, hf_openflow_v4_queue_get_config_request_pad
, tvb
, offset
, 4, ENC_NA
);
4045 #define OFPQ_MIN_RATE_MAX 1000
4046 static const value_string openflow_v4_queue_prop_min_rate_reserved_values
[] = {
4047 { 0xffff, "OFPQ_MIN_RATE_UNCFG" },
4051 #define OFPQ_MAX_RATE_MAX 1000
4052 static const value_string openflow_v4_queue_prop_max_rate_reserved_values
[] = {
4053 { 0xffff, "OFPQ_MAX_RATE_UNCFG" },
4057 #define OFPQT_MIN_RATE 1
4058 #define OFPQT_MAX_RATE 2
4059 #define OFPQT_EXPERIMENTER 0xffff
4060 static const value_string openflow_v4_queue_prop_property_values
[] = {
4061 { OFPQT_MIN_RATE
, "OFPQT_MIN_RATE" },
4062 { OFPQT_MAX_RATE
, "OFPQT_MAX_RATE" },
4063 { OFPQT_EXPERIMENTER
, "OFPQT_EXPERIMENTER" },
4068 dissect_openflow_queue_prop_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4071 proto_tree
*prop_tree
;
4075 prop_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_queue_prop
, &ti
, "Queue property");
4077 /* uint16_t property; */
4078 prop_type
= tvb_get_ntohs(tvb
, offset
);
4079 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_property
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4083 prop_len
= tvb_get_ntohs(tvb
, offset
);
4084 proto_item_set_len(ti
, prop_len
);
4085 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4088 /* uint8_t pad[4]; */
4089 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_pad
, tvb
, offset
, 4, ENC_NA
);
4092 switch (prop_type
) {
4093 case OFPQT_MIN_RATE
:
4094 /* uint16_t rate; */
4095 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_min_rate_rate
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4099 /* uint8_t pad[6]; */
4100 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_min_rate_pad
, tvb
, offset
, 6, ENC_NA
);
4104 case OFPQT_MAX_RATE
:
4105 /* uint16_t rate; */
4106 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_max_rate_rate
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4109 /* uint8_t pad[6]; */
4110 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_max_rate_pad
, tvb
, offset
, 6, ENC_NA
);
4114 case OFPQT_EXPERIMENTER
:
4115 /* uint32_t experimenter; */
4116 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_experimenter_experimenter
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4119 /* uint8_t pad[4]; */
4120 proto_tree_add_item(prop_tree
, hf_openflow_v4_queue_prop_experimenter_pad
, tvb
, offset
, 4, ENC_NA
);
4123 /* uint8_t data[0]; */
4124 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v4_queue_prop_undecoded
,
4125 tvb
, offset
, prop_len
- 16, "Experimenter queue property body.");
4127 offset
+=prop_len
-16;
4131 proto_tree_add_expert_format(prop_tree
, pinfo
, &ei_openflow_v4_queue_prop_undecoded
,
4132 tvb
, offset
, prop_len
- 8, "Unknown queue property body.");
4142 #define OFPQ_ALL 0xffffffff
4143 static const value_string openflow_v4_queue_id_reserved_values
[] = {
4144 { OFPQ_ALL
, "OFPQ_ALL" },
4149 dissect_openflow_packet_queue_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4152 proto_tree
*queue_tree
;
4156 queue_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, -1, ett_openflow_v4_packet_queue
, &ti
, "Queue");
4158 /* uint32_t queue_id; */
4159 proto_tree_add_item(queue_tree
, hf_openflow_v4_packet_queue_queue_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4162 /* uint32_t port; */
4163 proto_tree_add_item(queue_tree
, hf_openflow_v4_packet_queue_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4167 queue_len
= tvb_get_ntohs(tvb
, offset
);
4168 queue_end
= offset
- 8 + queue_len
;
4169 proto_item_set_len(ti
, queue_len
);
4170 proto_tree_add_item(queue_tree
, hf_openflow_v4_packet_queue_len
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4173 /* uint8_t pad[6]; */
4174 proto_tree_add_item(queue_tree
, hf_openflow_v4_packet_queue_pad
, tvb
, offset
, 6, ENC_NA
);
4177 /* struct ofp_queue_prop_header properties[0]; */
4178 while (offset
< queue_end
) {
4179 offset
= dissect_openflow_queue_prop_v4(tvb
, pinfo
, queue_tree
, offset
, length
);
4186 dissect_openflow_queue_get_config_reply_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length
)
4188 /* uint32_t port; */
4189 proto_tree_add_item(tree
, hf_openflow_v4_queue_get_config_reply_port
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4192 /* uint8_t pad[4]; */
4193 proto_tree_add_item(tree
, hf_openflow_v4_queue_get_config_reply_pad
, tvb
, offset
, 4, ENC_NA
);
4196 /* struct ofp_packet_queue queues[0]; */
4197 while (offset
< length
) {
4198 offset
= dissect_openflow_packet_queue_v4(tvb
, pinfo
, tree
, offset
, length
);
4202 static const value_string openflow_v4_controller_role_values
[] = {
4203 { 0, "OFPCR_ROLE_NOCHANGE" },
4204 { 1, "OFPCR_ROLE_EQUAL" },
4205 { 2, "OFPCR_ROLE_MASTER" },
4206 { 3, "OFPCR_ROLE_SLAVE" },
4211 dissect_openflow_role_request_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4213 /* uint32_t role; */
4214 proto_tree_add_item(tree
, hf_openflow_v4_role_request_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4217 /* uint8_t pad[4]; */
4218 proto_tree_add_item(tree
, hf_openflow_v4_role_request_pad
, tvb
, offset
, 4, ENC_NA
);
4221 /* uint64_t generation_id; */
4222 proto_tree_add_item(tree
, hf_openflow_v4_role_request_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4228 dissect_openflow_role_reply_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4230 /* uint32_t role; */
4231 proto_tree_add_item(tree
, hf_openflow_v4_role_reply_role
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4234 /* uint8_t pad[4]; */
4235 proto_tree_add_item(tree
, hf_openflow_v4_role_reply_pad
, tvb
, offset
, 4, ENC_NA
);
4238 /* uint64_t generation_id; */
4239 proto_tree_add_item(tree
, hf_openflow_v4_role_reply_generation_id
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
4245 dissect_openflow_async_config_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4248 proto_tree
*pimm_tree
, *psmm_tree
, *frmm_tree
;
4249 proto_tree
*pims_tree
, *psms_tree
, *frms_tree
;
4251 /* uint32_t packet_in_mask[2]; */
4252 ti
= proto_tree_add_item(tree
, hf_openflow_v4_async_config_packet_in_mask_master
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4253 pimm_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_async_config_packet_in_mask_master
);
4255 proto_tree_add_item(pimm_tree
, hf_openflow_v4_async_config_packet_in_mask_master_no_match
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4256 proto_tree_add_item(pimm_tree
, hf_openflow_v4_async_config_packet_in_mask_master_action
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4257 proto_tree_add_item(pimm_tree
, hf_openflow_v4_async_config_packet_in_mask_master_invalid_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4260 ti
= proto_tree_add_item(tree
, hf_openflow_v4_async_config_packet_in_mask_slave
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4261 pims_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_async_config_packet_in_mask_slave
);
4263 proto_tree_add_item(pims_tree
, hf_openflow_v4_async_config_packet_in_mask_slave_no_match
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4264 proto_tree_add_item(pims_tree
, hf_openflow_v4_async_config_packet_in_mask_slave_action
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4265 proto_tree_add_item(pims_tree
, hf_openflow_v4_async_config_packet_in_mask_slave_invalid_ttl
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4268 /* uint32_t port_status_mask[2]; */
4269 ti
= proto_tree_add_item(tree
, hf_openflow_v4_async_config_port_status_mask_master
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4270 psmm_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_async_config_port_status_mask_master
);
4272 proto_tree_add_item(psmm_tree
, hf_openflow_v4_async_config_port_status_mask_master_add
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4273 proto_tree_add_item(psmm_tree
, hf_openflow_v4_async_config_port_status_mask_master_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4274 proto_tree_add_item(psmm_tree
, hf_openflow_v4_async_config_port_status_mask_master_modify
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4277 ti
= proto_tree_add_item(tree
, hf_openflow_v4_async_config_port_status_mask_slave
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4278 psms_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_async_config_port_status_mask_slave
);
4280 proto_tree_add_item(psms_tree
, hf_openflow_v4_async_config_port_status_mask_slave_add
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4281 proto_tree_add_item(psms_tree
, hf_openflow_v4_async_config_port_status_mask_slave_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4282 proto_tree_add_item(psms_tree
, hf_openflow_v4_async_config_port_status_mask_slave_modify
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4285 /* uint32_t flow_removed_mask[2]; */
4286 ti
= proto_tree_add_item(tree
, hf_openflow_v4_async_config_flow_removed_mask_master
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4287 frmm_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_async_config_flow_removed_mask_master
);
4289 proto_tree_add_item(frmm_tree
, hf_openflow_v4_async_config_flow_removed_mask_master_idle_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4290 proto_tree_add_item(frmm_tree
, hf_openflow_v4_async_config_flow_removed_mask_master_hard_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4291 proto_tree_add_item(frmm_tree
, hf_openflow_v4_async_config_flow_removed_mask_master_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4292 proto_tree_add_item(frmm_tree
, hf_openflow_v4_async_config_flow_removed_mask_master_group_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4295 ti
= proto_tree_add_item(tree
, hf_openflow_v4_async_config_flow_removed_mask_slave
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4296 frms_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_async_config_flow_removed_mask_slave
);
4298 proto_tree_add_item(frms_tree
, hf_openflow_v4_async_config_flow_removed_mask_slave_idle_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4299 proto_tree_add_item(frms_tree
, hf_openflow_v4_async_config_flow_removed_mask_slave_hard_timeout
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4300 proto_tree_add_item(frms_tree
, hf_openflow_v4_async_config_flow_removed_mask_slave_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4301 proto_tree_add_item(frms_tree
, hf_openflow_v4_async_config_flow_removed_mask_slave_group_delete
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4307 static const value_string openflow_v4_metermod_command_values
[] = {
4309 { 1, "OFPMC_MODIFY" },
4310 { 2, "OFPMC_DELETE" },
4315 dissect_openflow_metermod_v4(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, int offset
, uint16_t length _U_
)
4318 proto_tree
*flags_tree
;
4320 /* uint16_t command; */
4321 proto_tree_add_item(tree
, hf_openflow_v4_metermod_command
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4324 /* uint16_t flags; */
4325 ti
= proto_tree_add_item(tree
, hf_openflow_v4_metermod_flags
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4326 flags_tree
= proto_item_add_subtree(ti
, ett_openflow_v4_metermod_flags
);
4328 proto_tree_add_item(flags_tree
, hf_openflow_v4_metermod_flags_kbps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4329 proto_tree_add_item(flags_tree
, hf_openflow_v4_metermod_flags_pktps
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4330 proto_tree_add_item(flags_tree
, hf_openflow_v4_metermod_flags_burst
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4331 proto_tree_add_item(flags_tree
, hf_openflow_v4_metermod_flags_stats
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
4334 /* uint32_t meter_id; */
4335 proto_tree_add_item(tree
, hf_openflow_v4_metermod_meter_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4338 /* struct ofp_meter_band_header bands[0]; */
4339 while (offset
< length
) {
4340 offset
= dissect_openflow_meter_band_v4(tvb
, pinfo
, tree
, offset
, length
);
4346 // NOLINTNEXTLINE(misc-no-recursion)
4347 dissect_openflow_message_v4(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*openflow_tree
, int offset
)
4354 type
= tvb_get_uint8(tvb
, offset
+ 1);
4355 length
= tvb_get_ntohs(tvb
, offset
+ 2);
4356 msg_end
= offset
+ length
;
4358 offset
= dissect_openflow_header_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4362 dissect_openflow_hello_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4365 dissect_openflow_error_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4367 case OFPT_ECHO_REQUEST
:
4368 case OFPT_ECHO_REPLY
:
4369 dissect_openflow_echo_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4371 case OFPT_EXPERIMENTER
:
4372 dissect_openflow_experimenter_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4374 case OFPT_FEATURES_REQUEST
:
4375 /* message has no body */
4377 case OFPT_FEATURES_REPLY
:
4378 dissect_openflow_switch_features_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4380 case OFPT_GET_CONFIG_REQUEST
:
4381 /* message has no body */
4383 case OFPT_GET_CONFIG_REPLY
:
4384 case OFPT_SET_CONFIG
:
4385 dissect_openflow_switch_config_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4387 case OFPT_PACKET_IN
:
4388 dissect_openflow_packet_in_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4390 case OFPT_FLOW_REMOVED
:
4391 dissect_openflow_flow_removed_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4393 case OFPT_PORT_STATUS
:
4394 dissect_openflow_port_status_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4396 case OFPT_PACKET_OUT
:
4397 dissect_openflow_packet_out_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4400 dissect_openflow_flowmod_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4402 case OFPT_GROUP_MOD
:
4403 dissect_openflow_groupmod_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4406 dissect_openflow_portmod_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4408 case OFPT_TABLE_MOD
:
4409 dissect_openflow_tablemod_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4411 case OFPT_MULTIPART_REQUEST
:
4412 dissect_openflow_multipart_request_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4414 case OFPT_MULTIPART_REPLY
:
4415 dissect_openflow_multipart_reply_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4417 case OFPT_BARRIER_REQUEST
:
4418 case OFPT_BARRIER_REPLY
:
4419 /* message has no body */
4421 case OFPT_QUEUE_GET_CONFIG_REQUEST
:
4422 dissect_openflow_queue_get_config_request_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4424 case OFPT_QUEUE_GET_CONFIG_REPLY
:
4425 dissect_openflow_queue_get_config_reply_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4427 case OFPT_ROLE_REQUEST
:
4428 dissect_openflow_role_request_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4430 case OFPT_ROLE_REPLY
:
4431 dissect_openflow_role_reply_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4433 case OFPT_GET_ASYNC_REQUEST
:
4434 /* message has no body */
4436 case OFPT_GET_ASYNC_REPLY
:
4437 case OFPT_SET_ASYNC
:
4438 dissect_openflow_async_config_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4440 case OFPT_METER_MOD
:
4441 dissect_openflow_metermod_v4(tvb
, pinfo
, openflow_tree
, offset
, length
);
4446 proto_tree_add_expert_format(openflow_tree
, pinfo
, &ei_openflow_v4_message_undecoded
,
4447 tvb
, offset
, length
- 8, "Unknown message body.");
4456 dissect_openflow_v4(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
4459 proto_tree
*openflow_tree
;
4460 unsigned offset
= 0;
4463 type
= tvb_get_uint8(tvb
, 1);
4465 col_append_fstr(pinfo
->cinfo
, COL_INFO
, "Type: %s",
4466 val_to_str_ext_const(type
, &openflow_v4_type_values_ext
, "Unknown message type"));
4468 /* Create display subtree for the protocol */
4469 ti
= proto_tree_add_item(tree
, proto_openflow_v4
, tvb
, 0, -1, ENC_NA
);
4470 openflow_tree
= proto_item_add_subtree(ti
, ett_openflow_v4
);
4472 dissect_openflow_message_v4(tvb
, pinfo
, openflow_tree
, offset
);
4474 return tvb_reported_length(tvb
);
4478 * Register the protocol with Wireshark.
4481 proto_register_openflow_v4(void)
4484 static hf_register_info hf
[] = {
4485 { &hf_openflow_v4_version
,
4486 { "Version", "openflow_v4.version",
4487 FT_UINT8
, BASE_HEX
, VALS(openflow_v4_version_values
), 0x0,
4490 { &hf_openflow_v4_type
,
4491 { "Type", "openflow_v4.type",
4492 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &openflow_v4_type_values_ext
, 0x0,
4495 { &hf_openflow_v4_xid
,
4496 { "Transaction ID", "openflow_v4.xid",
4497 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4500 { &hf_openflow_v4_length
,
4501 { "Length", "openflow_v4.length",
4502 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4505 { &hf_openflow_v4_oxm_class
,
4506 { "Class", "openflow_v4.oxm.class",
4507 FT_UINT16
, BASE_HEX
, VALS(openflow_v4_oxm_class_values
), 0x0,
4510 { &hf_openflow_v4_oxm_field
,
4511 { "Field", "openflow_v4.oxm.field",
4512 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4515 { &hf_openflow_v4_oxm_field_basic
,
4516 { "Field", "openflow_v4.oxm.field",
4517 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &openflow_v4_oxm_basic_field_values_ext
, 0x0,
4520 { &hf_openflow_v4_oxm_hm
,
4521 { "Has mask", "openflow_v4.oxm.hm",
4522 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
4525 { &hf_openflow_v4_oxm_length
,
4526 { "Length", "openflow_v4.oxm.length",
4527 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4530 { &hf_openflow_v4_oxm_experimenter_experimenter
,
4531 { "Experimenter", "openflow_v4.oxm_experimenter.experimenter",
4532 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
4535 { &hf_openflow_v4_oxm_experimenter_value
,
4536 { "Experimenter Value", "openflow_v4.oxm_experimenter.value",
4537 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4540 { &hf_openflow_v4_oxm_value
,
4541 { "Value", "openflow_v4.oxm.value",
4542 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4545 { &hf_openflow_v4_oxm_value_etheraddr
,
4546 { "Value", "openflow_v4.oxm.value_etheraddr",
4547 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
4550 { &hf_openflow_v4_oxm_value_ethertype
,
4551 { "Value", "openflow_v4.oxm.value_ethertype",
4552 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
4555 { &hf_openflow_v4_oxm_value_vlan_present
,
4556 { "OFPVID_PRESENT", "openflow_v4.oxm.value_vlan_present",
4557 FT_BOOLEAN
, 16, NULL
, OFPVID_PRESENT
,
4560 { &hf_openflow_v4_oxm_value_vlan_vid
,
4561 { "Value", "openflow_v4.oxm.value_vlan_vid",
4562 FT_UINT16
, BASE_DEC
, NULL
, 0x0fff,
4565 { &hf_openflow_v4_oxm_value_ipv4addr
,
4566 { "Value", "openflow_v4.oxm.value_ipv4addr",
4567 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4570 { &hf_openflow_v4_oxm_value_ipv6addr
,
4571 { "Value", "openflow_v4.oxm.value_ipv6addr",
4572 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
4575 { &hf_openflow_v4_oxm_value_ipproto
,
4576 { "Value", "openflow_v4.oxm.value_ipproto",
4577 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, &ipproto_val_ext
, 0x0,
4580 { &hf_openflow_v4_oxm_value_uint16
,
4581 { "Value", "openflow_v4.oxm.value_uint16",
4582 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4585 { &hf_openflow_v4_oxm_value_uint24
,
4586 { "Value", "openflow_v4.oxm.value_uint24",
4587 FT_UINT24
, BASE_DEC
, NULL
, 0x0,
4590 { &hf_openflow_v4_oxm_value_uint32
,
4591 { "Value", "openflow_v4.oxm.value_uint32",
4592 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4595 { &hf_openflow_v4_oxm_mask
,
4596 { "Mask", "openflow_v4.oxm.mask",
4597 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4600 { &hf_openflow_v4_oxm_mask_etheraddr
,
4601 { "Mask", "openflow_v4.oxm.ether_mask",
4602 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
4605 { &hf_openflow_v4_oxm_mask_ipv4addr
,
4606 { "Mask", "openflow_v4.oxm.ipv4_mask",
4607 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4610 { &hf_openflow_v4_oxm_mask_ipv6addr
,
4611 { "Mask", "openflow_v4.oxm.ipv6_mask",
4612 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
4615 { &hf_openflow_v4_oxm_mask_vlan
,
4616 { "Mask", "openflow_v4.oxm.vlan_mask",
4617 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
4620 { &hf_openflow_v4_match_type
,
4621 { "Type", "openflow_v4.match.type",
4622 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_match_type_values
), 0x0,
4625 { &hf_openflow_v4_match_length
,
4626 { "Length", "openflow_v4.match.length",
4627 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4630 { &hf_openflow_v4_match_pad
,
4631 { "Pad", "openflow_v4.match.pad",
4632 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4635 { &hf_openflow_v4_action_type
,
4636 { "Type", "openflow_v4.action.type",
4637 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_action_type_values
), 0x0,
4640 { &hf_openflow_v4_action_length
,
4641 { "Length", "openflow_v4.action.length",
4642 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4645 { &hf_openflow_v4_action_experimenter_experimenter
,
4646 { "Experimenter", "openflow_v4.action_experimenter.experimenter",
4647 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
4650 { &hf_openflow_v4_action_output_port
,
4651 { "Port", "openflow_v4.action.output.port",
4652 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
4655 { &hf_openflow_v4_action_output_max_len
,
4656 { "Max length", "openflow_v4.action.output.max_len",
4657 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_controller_max_len_reserved_values
), 0x0,
4660 { &hf_openflow_v4_action_output_pad
,
4661 { "Pad", "openflow_v4.action.output.pad",
4662 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4665 { &hf_openflow_v4_action_copy_ttl_out_pad
,
4666 { "Pad", "openflow_v4.action.copy_ttl_out.pad",
4667 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4670 { &hf_openflow_v4_action_copy_ttl_in_pad
,
4671 { "Pad", "openflow_v4.action.copy_ttl_in.pad",
4672 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4675 { &hf_openflow_v4_action_set_mpls_ttl_ttl
,
4676 { "TTL", "openflow_v4.action.set_mpls_ttl.ttl",
4677 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4680 { &hf_openflow_v4_action_set_mpls_ttl_pad
,
4681 { "Pad", "openflow_v4.action.set_mpls_ttl.pad",
4682 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4685 { &hf_openflow_v4_action_dec_mpls_ttl_pad
,
4686 { "Pad", "openflow_v4.action.dec_mpls_ttl.pad",
4687 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4690 { &hf_openflow_v4_action_push_vlan_ethertype
,
4691 { "Ethertype", "openflow_v4.action.push_vlan.ethertype",
4692 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
4695 { &hf_openflow_v4_action_push_vlan_pad
,
4696 { "Pad", "openflow_v4.action.push_vlan.pad",
4697 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4700 { &hf_openflow_v4_action_pop_vlan_pad
,
4701 { "Pad", "openflow_v4.action.pop_vlan.pad",
4702 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4705 { &hf_openflow_v4_action_push_mpls_ethertype
,
4706 { "Ethertype", "openflow_v4.action.push_mpls.ethertype",
4707 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
4710 { &hf_openflow_v4_action_push_mpls_pad
,
4711 { "Pad", "openflow_v4.action.push_mpls.pad",
4712 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4715 { &hf_openflow_v4_action_pop_mpls_ethertype
,
4716 { "Ethertype", "openflow_v4.action.pop_mpls.ethertype",
4717 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
4720 { &hf_openflow_v4_action_pop_mpls_pad
,
4721 { "Pad", "openflow_v4.action.pop_mpls.pad",
4722 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4725 { &hf_openflow_v4_action_set_queue_queue_id
,
4726 { "Queue ID", "openflow_v4.action.set_queue.queue_id",
4727 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4730 { &hf_openflow_v4_action_group_group_id
,
4731 { "Group ID", "openflow_v4.action.group.group_id",
4732 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
4735 { &hf_openflow_v4_action_set_nw_ttl_ttl
,
4736 { "TTL", "openflow_v4.action.set_nw_ttl.ttl",
4737 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4740 { &hf_openflow_v4_action_set_nw_ttl_pad
,
4741 { "Pad", "openflow_v4.action.set_nw_ttl.pad",
4742 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4745 { &hf_openflow_v4_action_dec_nw_ttl_pad
,
4746 { "Pad", "openflow_v4.action.dec_nw_ttl.pad",
4747 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4750 { &hf_openflow_v4_action_set_field_pad
,
4751 { "Pad", "openflow_v4.action.set_field.pad",
4752 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4755 { &hf_openflow_v4_action_push_pbb_ethertype
,
4756 { "Ethertype", "openflow_v4.action.push_pbb.ethertype",
4757 FT_UINT16
, BASE_HEX
, VALS(etype_vals
), 0x0,
4760 { &hf_openflow_v4_action_push_pbb_pad
,
4761 { "Pad", "openflow_v4.action.push_pbb.pad",
4762 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4765 { &hf_openflow_v4_action_pop_pbb_pad
,
4766 { "Pad", "openflow_v4.action.pop_pbb.pad",
4767 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4770 { &hf_openflow_v4_instruction_type
,
4771 { "Type", "openflow_v4.instruction.type",
4772 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_instruction_type_values
), 0x0,
4775 { &hf_openflow_v4_instruction_length
,
4776 { "Length", "openflow_v4.instruction.length",
4777 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4780 { &hf_openflow_v4_instruction_experimenter_experimenter
,
4781 { "Experimenter", "openflow_v4.instruction_experimenter.experimenter",
4782 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
4785 { &hf_openflow_v4_instruction_goto_table_table_id
,
4786 { "Table ID", "openflow_v4.instruction.goto_table.table_id",
4787 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4790 { &hf_openflow_v4_instruction_goto_table_pad
,
4791 { "Pad", "openflow_v4.instruction.goto_table.pad",
4792 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4795 { &hf_openflow_v4_instruction_write_metadata_pad
,
4796 { "Pad", "openflow_v4.instruction.write_metadata.pad",
4797 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4800 { &hf_openflow_v4_instruction_write_metadata_value
,
4801 { "Value", "openflow_v4.instruction.write_metadata.value",
4802 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
4805 { &hf_openflow_v4_instruction_write_metadata_mask
,
4806 { "Mask", "openflow_v4.instruction.write_metadata.mask",
4807 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
4810 { &hf_openflow_v4_instruction_actions_pad
,
4811 { "Pad", "openflow_v4.instruction.actions.pad",
4812 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4815 { &hf_openflow_v4_instruction_meter_meter_id
,
4816 { "Meter ID", "openflow_v4.instruction.meter.meter_id",
4817 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_meter_id_reserved_values
), 0x0,
4820 { &hf_openflow_v4_port_port_no
,
4821 { "Port no", "openflow_v4.port.port_no",
4822 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
4825 { &hf_openflow_v4_port_pad
,
4826 { "Pad", "openflow_v4.port.pad",
4827 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4830 { &hf_openflow_v4_port_hw_addr
,
4831 { "Hw addr", "openflow_v4.port.hw_addr",
4832 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
4835 { &hf_openflow_v4_port_pad2
,
4836 { "Pad", "openflow_v4.port.pad2",
4837 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4840 { &hf_openflow_v4_port_name
,
4841 { "Name", "openflow_v4.port.name",
4842 FT_STRING
, BASE_NONE
, NULL
, 0x0,
4845 { &hf_openflow_v4_port_config
,
4846 { "Config", "openflow_v4.port.config",
4847 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
4850 { &hf_openflow_v4_port_config_port_down
,
4851 { "OFPPC_PORT_DOWN", "openflow_v4.port.config.port_down",
4852 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
4855 { &hf_openflow_v4_port_config_no_recv
,
4856 { "OFPPC_NO_RECV", "openflow_v4.port.config.no_recv",
4857 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
4860 { &hf_openflow_v4_port_config_no_fwd
,
4861 { "OFPPC_NO_FWD", "openflow_v4.port.config.no_fwd",
4862 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
4865 { &hf_openflow_v4_port_config_no_packet_in
,
4866 { "OFPPC_NO_PACKET_IN", "openflow_v4.port.config.no_packet_in",
4867 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
4870 { &hf_openflow_v4_port_state
,
4871 { "State", "openflow_v4.port.sate",
4872 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
4875 { &hf_openflow_v4_port_state_link_down
,
4876 { "OFPPS_LINK_DOWN", "openflow_v4.port.state.link_down",
4877 FT_BOOLEAN
, 32, NULL
, OFPPS_LINK_DOWN
,
4880 { &hf_openflow_v4_port_state_blocked
,
4881 { "OFPPS_BLOCKED", "openflow_v4.port.state.blocked",
4882 FT_BOOLEAN
, 32, NULL
, OFPPS_BLOCKED
,
4885 { &hf_openflow_v4_port_state_live
,
4886 { "OFPPS_LIVE", "openflow_v4.port.state.live",
4887 FT_BOOLEAN
, 32, NULL
, OFPPS_LIVE
,
4890 { &hf_openflow_v4_port_current
,
4891 { "Current", "openflow_v4.port.current",
4892 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
4895 { &hf_openflow_v4_port_current_10mb_hd
,
4896 { "OFPPF_10MB_HD", "openflow_v4.port.current.10mb_hd",
4897 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
4900 { &hf_openflow_v4_port_current_10mb_fd
,
4901 { "OFPPF_10MB_FD", "openflow_v4.port.current.10mb_fd",
4902 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
4905 { &hf_openflow_v4_port_current_100mb_hd
,
4906 { "OFPPF_100MB_HD", "openflow_v4.port.current.100mb_hd",
4907 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
4910 { &hf_openflow_v4_port_current_100mb_fd
,
4911 { "OFPPF_100MB_FD", "openflow_v4.port.current.100mb_fd",
4912 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
4915 { &hf_openflow_v4_port_current_1gb_hd
,
4916 { "OFPPF_1GB_HD", "openflow_v4.port.current.1gb_hd",
4917 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
4920 { &hf_openflow_v4_port_current_1gb_fd
,
4921 { "OFPPF_1GB_FD", "openflow_v4.port.current.1gb_fd",
4922 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
4925 { &hf_openflow_v4_port_current_10gb_fd
,
4926 { "OFPPF_10_GB_FD", "openflow_v4.port.current.10gb_fd",
4927 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
4930 { &hf_openflow_v4_port_current_40gb_fd
,
4931 { "OFPPF_40GB_FD", "openflow_v4.port.current.40gb_fd",
4932 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
4935 { &hf_openflow_v4_port_current_100gb_fd
,
4936 { "OFPPF_100_GB_FD", "openflow_v4.port.current.100_gb_fd",
4937 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
4940 { &hf_openflow_v4_port_current_1tb_fd
,
4941 { "OFPPF_1TB_FD", "openflow_v4.port.current.1tb_fd",
4942 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
4945 { &hf_openflow_v4_port_current_other
,
4946 { "OFPPF_OTHER", "openflow_v4.port.current.other",
4947 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
4950 { &hf_openflow_v4_port_current_copper
,
4951 { "OFPPF_COPPER", "openflow_v4.port.current.copper",
4952 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
4955 { &hf_openflow_v4_port_current_fiber
,
4956 { "OFPPF_FIBER", "openflow_v4.port.current.fiber",
4957 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
4960 { &hf_openflow_v4_port_current_autoneg
,
4961 { "OFPPF_AUTONEG", "openflow_v4.port.current.autoneg",
4962 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
4965 { &hf_openflow_v4_port_current_pause
,
4966 { "OFPPF_PAUSE", "openflow_v4.port.current.pause",
4967 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
4970 { &hf_openflow_v4_port_current_pause_asym
,
4971 { "OFPPF_PAUSE_ASYM", "openflow_v4.port.current.pause_asym",
4972 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
4975 { &hf_openflow_v4_port_advertised
,
4976 { "Advertised", "openflow_v4.port.advertised",
4977 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
4980 { &hf_openflow_v4_port_advertised_10mb_hd
,
4981 { "OFPPF_10MB_HD", "openflow_v4.port.advertised.10mb_hd",
4982 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
4985 { &hf_openflow_v4_port_advertised_10mb_fd
,
4986 { "OFPPF_10MB_FD", "openflow_v4.port.advertised.10mb_fd",
4987 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
4990 { &hf_openflow_v4_port_advertised_100mb_hd
,
4991 { "OFPPF_100MB_HD", "openflow_v4.port.advertised.100mb_hd",
4992 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
4995 { &hf_openflow_v4_port_advertised_100mb_fd
,
4996 { "OFPPF_100MB_FD", "openflow_v4.port.advertised.100mb_fd",
4997 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
5000 { &hf_openflow_v4_port_advertised_1gb_hd
,
5001 { "OFPPF_1GB_HD", "openflow_v4.port.advertised.1gb_hd",
5002 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
5005 { &hf_openflow_v4_port_advertised_1gb_fd
,
5006 { "OFPPF_1GB_FD", "openflow_v4.port.advertised.1gb_fd",
5007 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
5010 { &hf_openflow_v4_port_advertised_10gb_fd
,
5011 { "OFPPF_10_GB_FD", "openflow_v4.port.advertised.10gb_fd",
5012 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
5015 { &hf_openflow_v4_port_advertised_40gb_fd
,
5016 { "OFPPF_40GB_FD", "openflow_v4.port.advertised.40gb_fd",
5017 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
5020 { &hf_openflow_v4_port_advertised_100gb_fd
,
5021 { "OFPPF_100GB_FD", "openflow_v4.port.advertised.100gb_fd",
5022 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
5025 { &hf_openflow_v4_port_advertised_1tb_fd
,
5026 { "OFPPF_1TB_FD", "openflow_v4.port.advertised.1tb_fd",
5027 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
5030 { &hf_openflow_v4_port_advertised_other
,
5031 { "OFPPF_OTHER", "openflow_v4.port.advertised.other",
5032 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
5035 { &hf_openflow_v4_port_advertised_copper
,
5036 { "OFPPF_COPPER", "openflow_v4.port.advertised.copper",
5037 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
5040 { &hf_openflow_v4_port_advertised_fiber
,
5041 { "OFPPF_FIBER", "openflow_v4.port.advertised.fiber",
5042 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
5045 { &hf_openflow_v4_port_advertised_autoneg
,
5046 { "OFPPF_AUTONEG", "openflow_v4.port.advertised.autoneg",
5047 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
5050 { &hf_openflow_v4_port_advertised_pause
,
5051 { "OFPPF_PAUSE", "openflow_v4.port.advertised.pause",
5052 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
5055 { &hf_openflow_v4_port_advertised_pause_asym
,
5056 { "OFPPF_PAUSE_ASYM", "openflow_v4.port.advertised.pause_asym",
5057 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
5060 { &hf_openflow_v4_port_supported
,
5061 { "Supported", "openflow_v4.port.supported",
5062 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5065 { &hf_openflow_v4_port_supported_10mb_hd
,
5066 { "OFPPF_10MB_HD", "openflow_v4.port.supported.10mb_hd",
5067 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
5070 { &hf_openflow_v4_port_supported_10mb_fd
,
5071 { "OFPPF_10MB_FD", "openflow_v4.port.supported.10mb_fd",
5072 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
5075 { &hf_openflow_v4_port_supported_100mb_hd
,
5076 { "OFPPF_100MB_HD", "openflow_v4.port.supported.100mb_hd",
5077 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
5080 { &hf_openflow_v4_port_supported_100mb_fd
,
5081 { "OFPPF_100MB_FD", "openflow_v4.port.supported.100mb_fd",
5082 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
5085 { &hf_openflow_v4_port_supported_1gb_hd
,
5086 { "OFPPF_1GB_HD", "openflow_v4.port.supported.1gb_hd",
5087 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
5090 { &hf_openflow_v4_port_supported_1gb_fd
,
5091 { "OFPPF_1GB_FD", "openflow_v4.port.supported.1gb_fd",
5092 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
5095 { &hf_openflow_v4_port_supported_10gb_fd
,
5096 { "OFPPF_10_GB_FD", "openflow_v4.port.supported.10gb_fd",
5097 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
5100 { &hf_openflow_v4_port_supported_40gb_fd
,
5101 { "OFPPF_40GB_FD", "openflow_v4.port.supported.40gb_fd",
5102 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
5105 { &hf_openflow_v4_port_supported_100gb_fd
,
5106 { "OFPPF_100GB_FD", "openflow_v4.port.supported.100gb_fd",
5107 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
5110 { &hf_openflow_v4_port_supported_1tb_fd
,
5111 { "OFPPF_1TB_FD", "openflow_v4.port.supported.1tb_fd",
5112 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
5115 { &hf_openflow_v4_port_supported_other
,
5116 { "OFPPF_OTHER", "openflow_v4.port.supported.other",
5117 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
5120 { &hf_openflow_v4_port_supported_copper
,
5121 { "OFPPF_COPPER", "openflow_v4.port.supported.copper",
5122 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
5125 { &hf_openflow_v4_port_supported_fiber
,
5126 { "OFPPF_FIBER", "openflow_v4.port.supported.fiber",
5127 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
5130 { &hf_openflow_v4_port_supported_autoneg
,
5131 { "OFPPF_AUTONEG", "openflow_v4.port.supported.autoneg",
5132 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
5135 { &hf_openflow_v4_port_supported_pause
,
5136 { "OFPPF_PAUSE", "openflow_v4.port.supported.pause",
5137 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
5140 { &hf_openflow_v4_port_supported_pause_asym
,
5141 { "OFPPF_PAUSE_ASYM", "openflow_v4.port.supported.pause_asym",
5142 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
5145 { &hf_openflow_v4_port_peer
,
5146 { "Peer", "openflow_v4.port.peer",
5147 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5150 { &hf_openflow_v4_port_peer_10mb_hd
,
5151 { "OFPPF_10MB_HD", "openflow_v4.port.peer.10mb_hd",
5152 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
5155 { &hf_openflow_v4_port_peer_10mb_fd
,
5156 { "OFPPF_10MB_FD", "openflow_v4.port.peer.10mb_fd",
5157 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
5160 { &hf_openflow_v4_port_peer_100mb_hd
,
5161 { "OFPPF_100MB_HD", "openflow_v4.port.peer.100mb_hd",
5162 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
5165 { &hf_openflow_v4_port_peer_100mb_fd
,
5166 { "OFPPF_100MB_FD", "openflow_v4.port.peer.100mb_fd",
5167 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
5170 { &hf_openflow_v4_port_peer_1gb_hd
,
5171 { "OFPPF_1GB_HD", "openflow_v4.port.peer.1gb_hd",
5172 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
5175 { &hf_openflow_v4_port_peer_1gb_fd
,
5176 { "OFPPF_1GB_FD", "openflow_v4.port.peer.1gb_fd",
5177 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
5180 { &hf_openflow_v4_port_peer_10gb_fd
,
5181 { "OFPPF_10_GB_FD", "openflow_v4.port.peer.10gb_fd",
5182 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
5185 { &hf_openflow_v4_port_peer_40gb_fd
,
5186 { "OFPPF_40GB_FD", "openflow_v4.port.peer.40gb_fd",
5187 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
5190 { &hf_openflow_v4_port_peer_100gb_fd
,
5191 { "OFPPF_100GB_FD", "openflow_v4.port.peer.100gb_fd",
5192 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
5195 { &hf_openflow_v4_port_peer_1tb_fd
,
5196 { "OFPPF_1TB_FD", "openflow_v4.port.peer.1tb_fd",
5197 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
5200 { &hf_openflow_v4_port_peer_other
,
5201 { "OFPPF_OTHER", "openflow_v4.port.peer.other",
5202 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
5205 { &hf_openflow_v4_port_peer_copper
,
5206 { "OFPPF_COPPER", "openflow_v4.port.peer.copper",
5207 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
5210 { &hf_openflow_v4_port_peer_fiber
,
5211 { "OFPPF_FIBER", "openflow_v4.port.peer.fiber",
5212 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
5215 { &hf_openflow_v4_port_peer_autoneg
,
5216 { "OFPPF_AUTONEG", "openflow_v4.port.peer.autoneg",
5217 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
5220 { &hf_openflow_v4_port_peer_pause
,
5221 { "OFPPF_PAUSE", "openflow_v4.port.peer.pause",
5222 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
5225 { &hf_openflow_v4_port_peer_pause_asym
,
5226 { "OFPPF_PAUSE_ASYM", "openflow_v4.port.peer.pause_asym",
5227 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
5230 { &hf_openflow_v4_port_curr_speed
,
5231 { "Curr speed", "openflow_v4.port.curr_speed",
5232 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5235 { &hf_openflow_v4_port_max_speed
,
5236 { "Max speed", "openflow_v4.port.max_speed",
5237 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5240 { &hf_openflow_v4_meter_band_type
,
5241 { "Type", "openflow_v4.meter_band.type",
5242 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_meter_band_type_values
), 0x0,
5245 { &hf_openflow_v4_meter_band_len
,
5246 { "Length", "openflow_v4.meter_band.length",
5247 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5250 { &hf_openflow_v4_meter_band_rate
,
5251 { "Rate", "openflow_v4.meter_band.rate",
5252 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5255 { &hf_openflow_v4_meter_band_burst_size
,
5256 { "Burst size", "openflow_v4.meter_band.burst_size",
5257 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5260 { &hf_openflow_v4_meter_band_drop_pad
,
5261 { "Pad", "openflow_v4.meter_band.drop.pad",
5262 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5265 { &hf_openflow_v4_meter_band_dscp_remark_prec_level
,
5266 { "Precedence level", "openflow_v4.meter_band.dscp_remark.prec_level",
5267 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5270 { &hf_openflow_v4_meter_band_dscp_remark_pad
,
5271 { "Pad", "openflow_v4.meter_band.dscp_remark.pad",
5272 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5275 { &hf_openflow_v4_meter_band_experimenter_experimenter
,
5276 { "Experimenter", "openflow_v4.meter_band.experimenter.experimenter",
5277 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5280 { &hf_openflow_v4_hello_element_type
,
5281 { "Type", "openflow_v4.hello_element.type",
5282 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_hello_element_type_values
), 0x0,
5285 { &hf_openflow_v4_hello_element_length
,
5286 { "Length", "openflow_v4.hello_element.length",
5287 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5290 { &hf_openflow_v4_hello_element_version_bitmap
,
5291 { "Bitmap", "openflow_v4.hello_element.version.bitmap",
5292 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5295 { &hf_openflow_v4_hello_element_pad
,
5296 { "Pad", "openflow_v4.hello_element.pad",
5297 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5300 { &hf_openflow_v4_error_type
,
5301 { "Type", "openflow_v4.error.type",
5302 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_type_values
), 0x0,
5305 { &hf_openflow_v4_error_hello_failed_code
,
5306 { "Code", "openflow_v4.error.code",
5307 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_hello_failed_code_values
), 0x0,
5310 { &hf_openflow_v4_error_bad_request_code
,
5311 { "Code", "openflow_v4.error.code",
5312 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_bad_request_code_values
), 0x0,
5315 { &hf_openflow_v4_error_bad_action_code
,
5316 { "Code", "openflow_v4.error.code",
5317 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_bad_action_code_values
), 0x0,
5320 { &hf_openflow_v4_error_bad_instruction_code
,
5321 { "Code", "openflow_v4.error.code",
5322 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_bad_instruction_code_values
), 0x0,
5325 { &hf_openflow_v4_error_bad_match_code
,
5326 { "Code", "openflow_v4.error.code",
5327 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_bad_match_code_values
), 0x0,
5330 { &hf_openflow_v4_error_flow_mod_failed_code
,
5331 { "Code", "openflow_v4.error.code",
5332 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_flow_mod_failed_code_values
), 0x0,
5335 { &hf_openflow_v4_error_group_mod_failed_code
,
5336 { "Code", "openflow_v4.error.code",
5337 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_group_mod_failed_code_values
), 0x0,
5340 { &hf_openflow_v4_error_port_mod_failed_code
,
5341 { "Code", "openflow_v4.error.code",
5342 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_port_mod_failed_code_values
), 0x0,
5345 { &hf_openflow_v4_error_table_mod_failed_code
,
5346 { "Code", "openflow_v4.error.code",
5347 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_table_mod_failed_code_values
), 0x0,
5350 { &hf_openflow_v4_error_queue_op_failed_code
,
5351 { "Code", "openflow_v4.error.code",
5352 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_queue_op_failed_code_values
), 0x0,
5355 { &hf_openflow_v4_error_switch_config_failed_code
,
5356 { "Code", "openflow_v4.error.code",
5357 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_switch_config_failed_code_values
), 0x0,
5360 { &hf_openflow_v4_error_role_request_failed_code
,
5361 { "Code", "openflow_v4.error.code",
5362 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_role_request_failed_code_values
), 0x0,
5365 { &hf_openflow_v4_error_meter_mod_failed_code
,
5366 { "Code", "openflow_v4.error.code",
5367 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_meter_mod_failed_code_values
), 0x0,
5370 { &hf_openflow_v4_error_table_features_failed_code
,
5371 { "Code", "openflow_v4.error.code",
5372 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_error_table_features_failed_code_values
), 0x0,
5375 { &hf_openflow_v4_error_code
,
5376 { "Code", "openflow_v4.error.code",
5377 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5380 { &hf_openflow_v4_error_data_text
,
5381 { "Data", "openflow_v4.error.data",
5382 FT_STRING
, BASE_NONE
, NULL
, 0x0,
5385 { &hf_openflow_v4_echo_data
,
5386 { "Data", "openflow_v4.echo.data",
5387 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5390 { &hf_openflow_v4_error_data_body
,
5391 { "Body", "openflow_v4.error.data.body",
5392 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5395 { &hf_openflow_v4_error_experimenter
,
5396 { "Experimenter", "openflow_v4.error.experimenter",
5397 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5400 { &hf_openflow_v4_experimenter_experimenter
,
5401 { "Experimenter", "openflow_v4.experimenter.experimenter",
5402 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5405 { &hf_openflow_v4_experimenter_exp_type
,
5406 { "Experimenter type", "openflow_v4.experimenter.exp_type",
5407 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5410 { &hf_openflow_v4_switch_features_datapath_id
,
5411 { "datapath_id", "openflow_v4.switch_features.datapath_id",
5412 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5415 { &hf_openflow_v4_switch_features_n_buffers
,
5416 { "n_buffers", "openflow_v4.switch_features.n_buffers",
5417 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5420 { &hf_openflow_v4_switch_features_n_tables
,
5421 { "n_tables", "openflow_v4.switch_features.n_tables",
5422 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5425 { &hf_openflow_v4_switch_features_auxiliary_id
,
5426 { "auxiliary_id", "openflow_v4.switch_features.auxiliary_id",
5427 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5430 { &hf_openflow_v4_switch_features_pad
,
5431 { "Pad", "openflow_v4.switch_features.pad",
5432 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5435 { &hf_openflow_v4_switch_features_capabilities
,
5436 { "capabilities", "openflow_v4.switch_features.capabilities",
5437 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5440 { &hf_openflow_v4_switch_features_capabilities_flow_stats
,
5441 { "OFPC_FLOW_STATS", "openflow_v4.switch_features.capabilities.flow_stats",
5442 FT_BOOLEAN
, 32, NULL
, OFPC_FLOW_STATS
,
5445 { &hf_openflow_v4_switch_features_capabilities_table_stats
,
5446 { "OFPC_TABLE_STATS", "openflow_v4.switch_features.capabilities.table_stats",
5447 FT_BOOLEAN
, 32, NULL
, OFPC_TABLE_STATS
,
5450 { &hf_openflow_v4_switch_features_capabilities_port_stats
,
5451 { "OFPC_PORT_STATS", "openflow_v4.switch_features.capabilities.port_stats",
5452 FT_BOOLEAN
, 32, NULL
, OFPC_PORT_STATS
,
5455 { &hf_openflow_v4_switch_features_capabilities_group_stats
,
5456 { "OFPC_GROUP_STATS", "openflow_v4.switch_features.capabilities.group_stats",
5457 FT_BOOLEAN
, 32, NULL
, OFPC_GROUP_STATS
,
5460 { &hf_openflow_v4_switch_features_capabilities_ip_reasm
,
5461 { "OFPC_IP_REASM", "openflow_v4.switch_features.capabilities.ip_reasm",
5462 FT_BOOLEAN
, 32, NULL
, OFPC_IP_REASM
,
5465 { &hf_openflow_v4_switch_features_capabilities_queue_stats
,
5466 { "OFPC_QUEUE_STATS", "openflow_v4.switch_features.capabilities.queue_stats",
5467 FT_BOOLEAN
, 32, NULL
, OFPC_QUEUE_STATS
,
5470 { &hf_openflow_v4_switch_features_capabilities_port_blocked
,
5471 { "OFPC_PORT_BLOCKED", "openflow_v4.switch_features.capabilities.port_blocked",
5472 FT_BOOLEAN
, 32, NULL
, OFPC_PORT_BLOCKED
,
5475 { &hf_openflow_v4_switch_features_reserved
,
5476 { "Reserved", "openflow_v4.switch_features_reserved",
5477 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5480 { &hf_openflow_v4_switch_config_flags
,
5481 { "Flags", "openflow_v4.switch_config.flags",
5482 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
5485 { &hf_openflow_v4_switch_config_flags_fragments
,
5486 { "IP Fragments", "openflow_v4.switch_config.flags.fragments",
5487 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_switch_config_fragments_values
), 0x0,
5490 { &hf_openflow_v4_switch_config_miss_send_len
,
5491 { "Miss send length", "openflow_v4.switch_config.miss_send_len",
5492 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_controller_max_len_reserved_values
), 0x0,
5495 { &hf_openflow_v4_packet_in_buffer_id
,
5496 { "Buffer ID", "openflow_v4.packet_in.buffer_id",
5497 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_buffer_reserved_values
), 0x0,
5500 { &hf_openflow_v4_packet_in_total_len
,
5501 { "Total length", "openflow_v4.packet_in.total_len",
5502 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5505 { &hf_openflow_v4_packet_in_reason
,
5506 { "Reason", "openflow_v4.packet_in.reason",
5507 FT_UINT8
, BASE_DEC
, VALS(openflow_v4_packet_in_reason_values
), 0x0,
5510 { &hf_openflow_v4_packet_in_table_id
,
5511 { "Table ID", "openflow_v4.packet_in.table_id",
5512 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5515 { &hf_openflow_v4_packet_in_cookie
,
5516 { "Cookie", "openflow_v4.packet_in.cookie",
5517 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5520 { &hf_openflow_v4_packet_in_pad
,
5521 { "Pad", "openflow_v4.packet_in.pad",
5522 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5525 { &hf_openflow_v4_flow_removed_cookie
,
5526 { "Cookie", "openflow_v4.flow_removed.cookie",
5527 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5530 { &hf_openflow_v4_flow_removed_priority
,
5531 { "Priority", "openflow_v4.flow_removed.priority",
5532 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5535 { &hf_openflow_v4_flow_removed_reason
,
5536 { "Reason", "openflow_v4.flow_removed.reason",
5537 FT_UINT8
, BASE_DEC
, VALS(openflow_v4_flow_removed_reason_values
), 0x0,
5540 { &hf_openflow_v4_flow_removed_table_id
,
5541 { "Table ID", "openflow_v4.flow_removed.table_id",
5542 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5545 { &hf_openflow_v4_flow_removed_duration_sec
,
5546 { "Duration sec", "openflow_v4.flow_removed.duration_sec",
5547 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5550 { &hf_openflow_v4_flow_removed_duration_nsec
,
5551 { "Duration nsec", "openflow_v4.flow_removed.duration_nsec",
5552 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
5555 { &hf_openflow_v4_flow_removed_idle_timeout
,
5556 { "Idle timeout", "openflow_v4.flow_removed.idle_timeout",
5557 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5560 { &hf_openflow_v4_flow_removed_hard_timeout
,
5561 { "Hard timeout", "openflow_v4.flow_removed.hard_timeout",
5562 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5565 { &hf_openflow_v4_flow_removed_packet_count
,
5566 { "Packet count", "openflow_v4.flow_removed.packet_count",
5567 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
5570 { &hf_openflow_v4_flow_removed_byte_count
,
5571 { "Byte count", "openflow_v4.flow_removed.byte_count",
5572 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
5575 { &hf_openflow_v4_port_status_reason
,
5576 { "Reason", "openflow_v4.port_status.reason",
5577 FT_UINT8
, BASE_DEC
, VALS(openflow_v4_port_status_reason_values
), 0x0,
5580 { &hf_openflow_v4_port_status_pad
,
5581 { "Pad", "openflow_v4.port_status.pad",
5582 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5585 { &hf_openflow_v4_packet_out_buffer_id
,
5586 { "Buffer ID", "openflow_v4.packet_out.buffer_id",
5587 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_buffer_reserved_values
), 0x0,
5590 { &hf_openflow_v4_packet_out_in_port
,
5591 { "In port", "openflow_v4.packet_out.in_port",
5592 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
5595 { &hf_openflow_v4_packet_out_acts_len
,
5596 { "Actions length", "openflow_v4.packet_out.acts_len",
5597 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5600 { &hf_openflow_v4_packet_out_pad
,
5601 { "Pad", "openflow_v4.packet_out.pad",
5602 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5605 { &hf_openflow_v4_flowmod_cookie
,
5606 { "Cookie", "openflow_v4.flowmod.cookie",
5607 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5610 { &hf_openflow_v4_flowmod_cookie_mask
,
5611 { "Cookie mask", "openflow_v4.flowmod.cookie_mask",
5612 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5615 { &hf_openflow_v4_flowmod_table_id
,
5616 { "Table ID", "openflow_v4.flowmod.table_id",
5617 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_table_reserved_values
), 0x0,
5620 { &hf_openflow_v4_flowmod_command
,
5621 { "Command", "openflow_v4.flowmod.command",
5622 FT_UINT8
, BASE_DEC
, VALS(openflow_v4_flowmod_command_values
), 0x0,
5625 { &hf_openflow_v4_flowmod_idle_timeout
,
5626 { "Idle timeout", "openflow_v4.flowmod.idle_timeout",
5627 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5630 { &hf_openflow_v4_flowmod_hard_timeout
,
5631 { "Hard timeout", "openflow_v4.flowmod.hard_timeout",
5632 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5635 { &hf_openflow_v4_flowmod_priority
,
5636 { "Priority", "openflow_v4.flowmod.priority",
5637 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5640 { &hf_openflow_v4_flowmod_buffer_id
,
5641 { "Buffer ID", "openflow_v4.flowmod.buffer_id",
5642 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_buffer_reserved_values
), 0x0,
5645 { &hf_openflow_v4_flowmod_out_port
,
5646 { "Out port", "openflow_v4.flowmod.out_port",
5647 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
5650 { &hf_openflow_v4_flowmod_out_group
,
5651 { "Out group", "openflow_v4.flowmod.out_group",
5652 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
5655 { &hf_openflow_v4_flowmod_flags
,
5656 { "Flags", "openflow_v4.flowmod.flags",
5657 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
5660 { &hf_openflow_v4_flowmod_flags_send_flow_rem
,
5661 { "Send flow removed", "openflow_v4.flowmod.flags.send_flow_rem",
5662 FT_BOOLEAN
, 16, NULL
, OFPFF_SEND_FLOW_REM
,
5665 { &hf_openflow_v4_flowmod_flags_check_overlap
,
5666 { "Check overlap", "openflow_v4.flowmod.flags.check_overlap",
5667 FT_BOOLEAN
, 16, NULL
, OFPFF_CHECK_OVERLAP
,
5670 { &hf_openflow_v4_flowmod_flags_reset_counts
,
5671 { "Reset counts", "openflow_v4.flowmod.flags.reset_counts",
5672 FT_BOOLEAN
, 16, NULL
, OFPFF_RESET_COUNTS
,
5675 { &hf_openflow_v4_flowmod_flags_no_packet_counts
,
5676 { "Don't count packets", "openflow_v4.flowmod.flags.no_packet_counts",
5677 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_PKT_COUNTS
,
5680 { &hf_openflow_v4_flowmod_flags_no_byte_counts
,
5681 { "Don't count bytes", "openflow_v4.flowmod.flags.no_byte_counts",
5682 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_BYT_COUNTS
,
5685 { &hf_openflow_v4_flowmod_pad
,
5686 { "Pad", "openflow_v4.flowmod.pad",
5687 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5690 { &hf_openflow_v4_bucket_length
,
5691 { "Length", "openflow_v4.bucket.length",
5692 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5695 { &hf_openflow_v4_bucket_weight
,
5696 { "Weight", "openflow_v4.bucket.weight",
5697 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5700 { &hf_openflow_v4_bucket_watch_port
,
5701 { "Watch port", "openflow_v4.bucket.watch_port",
5702 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
5705 { &hf_openflow_v4_bucket_watch_group
,
5706 { "Watch group", "openflow_v4.bucket.watch_group",
5707 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
5710 { &hf_openflow_v4_bucket_pad
,
5711 { "Pad", "openflow_v4.bucket.pad",
5712 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5715 { &hf_openflow_v4_groupmod_command
,
5716 { "Command", "openflow_v4.groupmod.command",
5717 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_groupmod_command_values
), 0x0,
5720 { &hf_openflow_v4_groupmod_type
,
5721 { "Type", "openflow_v4.groupmod.type",
5722 FT_UINT8
, BASE_DEC
, VALS(openflow_v4_group_type_values
), 0x0,
5725 { &hf_openflow_v4_groupmod_pad
,
5726 { "Pad", "openflow_v4.groupmod.pad",
5727 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5730 { &hf_openflow_v4_groupmod_group_id
,
5731 { "Group ID", "openflow_v4.groupmod.group_id",
5732 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
5735 { &hf_openflow_v4_portmod_port_no
,
5736 { "Port no", "openflow_v4.portmod.port_no",
5737 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
5740 { &hf_openflow_v4_portmod_pad
,
5741 { "Pad", "openflow_v4.portmod.pad",
5742 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5745 { &hf_openflow_v4_portmod_hw_addr
,
5746 { "Hw addr", "openflow_v4.portmod.hw_addr",
5747 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
5750 { &hf_openflow_v4_portmod_pad2
,
5751 { "Pad", "openflow_v4.portmod.pad2",
5752 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5755 { &hf_openflow_v4_portmod_config
,
5756 { "Config", "openflow_v4.portmod.config",
5757 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5760 { &hf_openflow_v4_portmod_config_port_down
,
5761 { "OFPPC_PORT_DOWN", "openflow_v4.portmod.config.port_down",
5762 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
5765 { &hf_openflow_v4_portmod_config_no_recv
,
5766 { "OFPPC_NO_RECV", "openflow_v4.portmod.config.no_recv",
5767 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
5770 { &hf_openflow_v4_portmod_config_no_fwd
,
5771 { "OFPPC_NO_FWD", "openflow_v4.portmod.config.no_fwd",
5772 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
5775 { &hf_openflow_v4_portmod_config_no_packet_in
,
5776 { "OFPPC_NO_PACKET_IN", "openflow_v4.portmod.config.no_packet_in",
5777 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
5780 { &hf_openflow_v4_portmod_mask
,
5781 { "Mask", "openflow_v4.portmod.mask",
5782 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5785 { &hf_openflow_v4_portmod_mask_port_down
,
5786 { "OFPPC_PORT_DOWN", "openflow_v4.portmod.mask.port_down",
5787 FT_BOOLEAN
, 32, NULL
, OFPPC_PORT_DOWN
,
5790 { &hf_openflow_v4_portmod_mask_no_recv
,
5791 { "OFPPC_NO_RECV", "openflow_v4.portmod.mask.no_recv",
5792 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_RECV
,
5795 { &hf_openflow_v4_portmod_mask_no_fwd
,
5796 { "OFPPC_NO_FWD", "openflow_v4.portmod.mask.no_fwd",
5797 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_FWD
,
5800 { &hf_openflow_v4_portmod_mask_no_packet_in
,
5801 { "OFPPC_NO_PACKET_IN", "openflow_v4.portmod.mask.no_packet_in",
5802 FT_BOOLEAN
, 32, NULL
, OFPPC_NO_PACKET_IN
,
5805 { &hf_openflow_v4_portmod_advertise
,
5806 { "Advertise", "openflow_v4.portmod.advertise",
5807 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
5810 { &hf_openflow_v4_portmod_advertise_10mb_hd
,
5811 { "OFPPF_10MB_HD", "openflow_v4.portmod.advertise.10mb_hd",
5812 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_HD
,
5815 { &hf_openflow_v4_portmod_advertise_10mb_fd
,
5816 { "OFPPF_10MB_FD", "openflow_v4.portmod.advertise.10mb_fd",
5817 FT_BOOLEAN
, 32, NULL
, OFPPF_10MB_FD
,
5820 { &hf_openflow_v4_portmod_advertise_100mb_hd
,
5821 { "OFPPF_100MB_HD", "openflow_v4.portmod.advertise.100mb_hd",
5822 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_HD
,
5825 { &hf_openflow_v4_portmod_advertise_100mb_fd
,
5826 { "OFPPF_100MB_FD", "openflow_v4.portmod.advertise.100mb_fd",
5827 FT_BOOLEAN
, 32, NULL
, OFPPF_100MB_FD
,
5830 { &hf_openflow_v4_portmod_advertise_1gb_hd
,
5831 { "OFPPF_1GB_HD", "openflow_v4.portmod.advertise.1gb_hd",
5832 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_HD
,
5835 { &hf_openflow_v4_portmod_advertise_1gb_fd
,
5836 { "OFPPF_1GB_FD", "openflow_v4.portmod.advertise.1gb_fd",
5837 FT_BOOLEAN
, 32, NULL
, OFPPF_1GB_FD
,
5840 { &hf_openflow_v4_portmod_advertise_10gb_fd
,
5841 { "OFPPF_10_GB_FD", "openflow_v4.portmod.advertise.10gb_fd",
5842 FT_BOOLEAN
, 32, NULL
, OFPPF_10GB_FD
,
5845 { &hf_openflow_v4_portmod_advertise_40gb_fd
,
5846 { "OFPPF_40GB_FD", "openflow_v4.portmod.advertise.40gb_fd",
5847 FT_BOOLEAN
, 32, NULL
, OFPPF_40GB_FD
,
5850 { &hf_openflow_v4_portmod_advertise_100gb_fd
,
5851 { "OFPPF_100_GB_FD", "openflow_v4.portmod.advertise.100_gb_fd",
5852 FT_BOOLEAN
, 32, NULL
, OFPPF_100GB_FD
,
5855 { &hf_openflow_v4_portmod_advertise_1tb_fd
,
5856 { "OFPPF_1TB_FD", "openflow_v4.portmod.advertise.1tb_fd",
5857 FT_BOOLEAN
, 32, NULL
, OFPPF_1TB_FD
,
5860 { &hf_openflow_v4_portmod_advertise_other
,
5861 { "OFPPF_OTHER", "openflow_v4.portmod.advertise.other",
5862 FT_BOOLEAN
, 32, NULL
, OFPPF_OTHER
,
5865 { &hf_openflow_v4_portmod_advertise_copper
,
5866 { "OFPPF_COPPER", "openflow_v4.portmod.advertise.copper",
5867 FT_BOOLEAN
, 32, NULL
, OFPPF_COPPER
,
5870 { &hf_openflow_v4_portmod_advertise_fiber
,
5871 { "OFPPF_FIBER", "openflow_v4.portmod.advertise.fiber",
5872 FT_BOOLEAN
, 32, NULL
, OFPPF_FIBER
,
5875 { &hf_openflow_v4_portmod_advertise_autoneg
,
5876 { "OFPPF_AUTONEG", "openflow_v4.portmod.advertise.autoneg",
5877 FT_BOOLEAN
, 32, NULL
, OFPPF_AUTONEG
,
5880 { &hf_openflow_v4_portmod_advertise_pause
,
5881 { "OFPPF_PAUSE", "openflow_v4.portmod.advertise.pause",
5882 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE
,
5885 { &hf_openflow_v4_portmod_advertise_pause_asym
,
5886 { "OFPPF_PAUSE_ASYM", "openflow_v4.portmod.advertise.pause_asym",
5887 FT_BOOLEAN
, 32, NULL
, OFPPF_PAUSE_ASYM
,
5890 { &hf_openflow_v4_portmod_pad3
,
5891 { "Pad", "openflow_v4.portmod.pad3",
5892 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5895 { &hf_openflow_v4_tablemod_table_id
,
5896 { "Table ID", "openflow_v4.tablemod.table_id",
5897 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_table_reserved_values
), 0x0,
5900 { &hf_openflow_v4_tablemod_pad
,
5901 { "Pad", "openflow_v4.tablemod.pad",
5902 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5905 { &hf_openflow_v4_tablemod_config
,
5906 { "Config", "openflow_v4.tablemod.config",
5907 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5910 { &hf_openflow_v4_flow_stats_request_table_id
,
5911 { "Table ID", "openflow_v4.flow_stats_request.table_id",
5912 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_table_reserved_values
), 0x0,
5915 { &hf_openflow_v4_flow_stats_request_pad
,
5916 { "Pad", "openflow_v4.flow_stats_request.pad",
5917 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5920 { &hf_openflow_v4_flow_stats_request_out_port
,
5921 { "Out port", "openflow_v4.flow_stats_request.out_port",
5922 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
5925 { &hf_openflow_v4_flow_stats_request_out_group
,
5926 { "Out group", "openflow_v4.flow_stats_request.out_group",
5927 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
5930 { &hf_openflow_v4_flow_stats_request_pad2
,
5931 { "Pad", "openflow_v4.flow_stats_request.pad2",
5932 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5935 { &hf_openflow_v4_flow_stats_request_cookie
,
5936 { "Cookie", "openflow_v4.flow_stats_request.cookie",
5937 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5940 { &hf_openflow_v4_flow_stats_request_cookie_mask
,
5941 { "Cookie mask", "openflow_v4.flow_stats_request.cookie_mask",
5942 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5945 { &hf_openflow_v4_aggregate_stats_request_table_id
,
5946 { "Table ID", "openflow_v4.aggregate_stats_request.table_id",
5947 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_table_reserved_values
), 0x0,
5950 { &hf_openflow_v4_aggregate_stats_request_pad
,
5951 { "Pad", "openflow_v4.aggregate_stats_request.pad",
5952 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5955 { &hf_openflow_v4_aggregate_stats_request_out_port
,
5956 { "Out port", "openflow_v4.aggregate_stats_request.out_port",
5957 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
5960 { &hf_openflow_v4_aggregate_stats_request_out_group
,
5961 { "Out group", "openflow_v4.aggregate_stats_request.out_group",
5962 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
5965 { &hf_openflow_v4_aggregate_stats_request_pad2
,
5966 { "Pad", "openflow_v4.aggregate_stats_request.pad2",
5967 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5970 { &hf_openflow_v4_aggregate_stats_request_cookie
,
5971 { "Cookie", "openflow_v4.aggregate_stats_request.cookie",
5972 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5975 { &hf_openflow_v4_aggregate_stats_request_cookie_mask
,
5976 { "Cookie mask", "openflow_v4.aggregate_stats_request.cookie_mask",
5977 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
5980 { &hf_openflow_v4_table_feature_prop_type
,
5981 { "Type", "openflow_v4.table_feature_prop.type",
5982 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_table_feature_prop_type_values
), 0x0,
5985 { &hf_openflow_v4_table_feature_prop_length
,
5986 { "Length", "openflow_v4.table_feature_prop.length",
5987 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
5990 { &hf_openflow_v4_table_feature_prop_next_tables_next_table_id
,
5991 { "Next table ID", "openflow_v4.table_feature_prop.next_tables.next_table_id",
5992 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5995 { &hf_openflow_v4_table_feature_prop_experimenter_experimenter
,
5996 { "Experimenter", "openflow_v4.table_feature_prop.experimenter.experimenter",
5997 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6000 { &hf_openflow_v4_table_feature_prop_experimenter_exp_type
,
6001 { "Experimenter type", "openflow_v4.table_feature_prop.experimenter.exp_type",
6002 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6005 { &hf_openflow_v4_table_feature_prop_pad
,
6006 { "Pad", "openflow_v4.table_feature_prop.pad",
6007 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6010 { &hf_openflow_v4_table_features_length
,
6011 { "Length", "openflow_v4.table_features.length",
6012 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6015 { &hf_openflow_v4_table_features_table_id
,
6016 { "Table ID", "openflow_v4.table_features.table_id",
6017 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6020 { &hf_openflow_v4_table_features_pad
,
6021 { "Pad", "openflow_v4.table_features.pad",
6022 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6025 { &hf_openflow_v4_table_features_name
,
6026 { "Name", "openflow_v4.table_features.name",
6027 FT_STRING
, BASE_NONE
, NULL
, 0x0,
6030 { &hf_openflow_v4_table_features_metadata_match
,
6031 { "Metadata match", "openflow_v4.table_features.metadata_match",
6032 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
6035 { &hf_openflow_v4_table_features_metadata_write
,
6036 { "Metadata write", "openflow_v4.table_features.metadata_write",
6037 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
6040 { &hf_openflow_v4_table_features_config
,
6041 { "Config", "openflow_v4.table_features.config",
6042 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6045 { &hf_openflow_v4_table_features_max_entries
,
6046 { "Max entries", "openflow_v4.table_features.max_entries",
6047 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6050 { &hf_openflow_v4_port_stats_request_port_no
,
6051 { "Port number", "openflow_v4.port_stats_request.port_no",
6052 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
6055 { &hf_openflow_v4_port_stats_request_pad
,
6056 { "Pad", "openflow_v4.port_stats_request.pad",
6057 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6060 { &hf_openflow_v4_queue_stats_request_port_no
,
6061 { "Port number", "openflow_v4.queue_stats_request.port_no",
6062 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
6065 { &hf_openflow_v4_queue_stats_request_queue_id
,
6066 { "Queue ID", "openflow_v4.queue_stats_request.queue_id",
6067 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_queue_reserved_values
), 0x0,
6070 { &hf_openflow_v4_group_stats_request_group_id
,
6071 { "Group ID", "openflow_v4.group_stats_request.group_id",
6072 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
6075 { &hf_openflow_v4_group_stats_request_pad
,
6076 { "Pad", "openflow_v4.group_stats_request.pad",
6077 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6080 { &hf_openflow_v4_meter_stats_request_meter_id
,
6081 { "Meter ID", "openflow_v4.meter_stats_request.meter_id",
6082 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_meter_id_reserved_values
), 0x0,
6085 { &hf_openflow_v4_meter_stats_request_pad
,
6086 { "Pad", "openflow_v4.meter_stats_request.pad",
6087 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6090 { &hf_openflow_v4_meter_config_request_meter_id
,
6091 { "Meter ID", "openflow_v4.meter_config_request.meter_id",
6092 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_meter_id_reserved_values
), 0x0,
6095 { &hf_openflow_v4_meter_config_request_pad
,
6096 { "Pad", "openflow_v4.meter_config_request.pad",
6097 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6100 { &hf_openflow_v4_multipart_request_type
,
6101 { "Type", "openflow_v4.multipart_request.type",
6102 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_multipart_type_values
), 0x0,
6105 { &hf_openflow_v4_multipart_request_flags
,
6106 { "Flags", "openflow_v4.multipart_request.flags",
6107 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
6110 { &hf_openflow_v4_multipart_request_flags_more
,
6111 { "OFPMPF_REQ_MORE", "openflow_v4.multipart_request.flags.more",
6112 FT_UINT16
, BASE_HEX
, NULL
, OFPMPF_REQ_MORE
,
6115 { &hf_openflow_v4_multipart_request_pad
,
6116 { "Pad", "openflow_v4.multipart_request.pad",
6117 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6120 { &hf_openflow_v4_multipart_request_experimenter_experimenter
,
6121 { "Experimenter", "openflow_v4.multipart_request.experimenter.experimenter",
6122 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6125 { &hf_openflow_v4_multipart_request_experimenter_exp_type
,
6126 { "Experimenter type", "openflow_v4.multipart_request.experimenter.exp_type",
6127 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6130 { &hf_openflow_v4_switch_description_mfr_desc
,
6131 { "Manufacturer desc.", "openflow_v4.switch_description.mfr_desc",
6132 FT_STRING
, BASE_NONE
, NULL
, 0x0,
6135 { &hf_openflow_v4_switch_description_hw_desc
,
6136 { "Hardware desc.", "openflow_v4.switch_description.hw_desc",
6137 FT_STRING
, BASE_NONE
, NULL
, 0x0,
6140 { &hf_openflow_v4_switch_description_sw_desc
,
6141 { "Software desc.", "openflow_v4.switch_description.sw_desc",
6142 FT_STRING
, BASE_NONE
, NULL
, 0x0,
6145 { &hf_openflow_v4_switch_description_serial_num
,
6146 { "Serial no.", "openflow_v4.switch_description.serial_num",
6147 FT_STRING
, BASE_NONE
, NULL
, 0x0,
6150 { &hf_openflow_v4_switch_description_dp_desc
,
6151 { "Datapath desc.", "openflow_v4.switch_description.dp_desc",
6152 FT_STRING
, BASE_NONE
, NULL
, 0x0,
6155 { &hf_openflow_v4_flow_stats_length
,
6156 { "Length", "openflow_v4.flow_stats.length",
6157 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6160 { &hf_openflow_v4_flow_stats_table_id
,
6161 { "Table ID", "openflow_v4.flow_stats.table_id",
6162 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
6165 { &hf_openflow_v4_flow_stats_pad
,
6166 { "Pad", "openflow_v4.flow_stats.pad",
6167 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6170 { &hf_openflow_v4_flow_stats_duration_sec
,
6171 { "Duration sec", "openflow_v4.flow_stats.duration_sec",
6172 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6175 { &hf_openflow_v4_flow_stats_duration_nsec
,
6176 { "Duration nsec", "openflow_v4.flow_stats.duration_nsec",
6177 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6180 { &hf_openflow_v4_flow_stats_priority
,
6181 { "Priority", "openflow_v4.flow_stats.priority",
6182 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6185 { &hf_openflow_v4_flow_stats_idle_timeout
,
6186 { "Idle timeout", "openflow_v4.flow_stats.idle_timeout",
6187 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6190 { &hf_openflow_v4_flow_stats_hard_timeout
,
6191 { "Hard timeout", "openflow_v4.flow_stats.hard_timeout",
6192 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6195 { &hf_openflow_v4_flow_stats_flags
,
6196 { "Flags", "openflow_v4.flow_stats.flags",
6197 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
6200 { &hf_openflow_v4_flow_stats_flags_send_flow_rem
,
6201 { "Send flow removed", "openflow_v4.flow_stats.flags.send_flow_rem",
6202 FT_BOOLEAN
, 16, NULL
, OFPFF_SEND_FLOW_REM
,
6205 { &hf_openflow_v4_flow_stats_flags_check_overlap
,
6206 { "Check overlap", "openflow_v4.flow_stats.flags.check_overlap",
6207 FT_BOOLEAN
, 16, NULL
, OFPFF_CHECK_OVERLAP
,
6210 { &hf_openflow_v4_flow_stats_flags_reset_counts
,
6211 { "Reset counts", "openflow_v4.flow_stats.flags.reset_counts",
6212 FT_BOOLEAN
, 16, NULL
, OFPFF_RESET_COUNTS
,
6215 { &hf_openflow_v4_flow_stats_flags_no_packet_counts
,
6216 { "Don't count packets", "openflow_v4.flow_stats.flags.no_packet_counts",
6217 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_PKT_COUNTS
,
6220 { &hf_openflow_v4_flow_stats_flags_no_byte_counts
,
6221 { "Don't count bytes", "openflow_v4.flow_stats.flags.no_byte_counts",
6222 FT_BOOLEAN
, 16, NULL
, OFPFF_NO_BYT_COUNTS
,
6225 { &hf_openflow_v4_flow_stats_pad2
,
6226 { "Pad", "openflow_v4.flow_stats.pad2",
6227 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6230 { &hf_openflow_v4_flow_stats_cookie
,
6231 { "Cookie", "openflow_v4.flow_stats.cookie",
6232 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
6235 { &hf_openflow_v4_flow_stats_packet_count
,
6236 { "Packet count", "openflow_v4.flow_stats.packet_count",
6237 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6240 { &hf_openflow_v4_flow_stats_byte_count
,
6241 { "Byte count", "openflow_v4.flow_stats.byte_count",
6242 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6245 { &hf_openflow_v4_aggregate_stats_packet_count
,
6246 { "Packet count", "openflow_v4.aggregate_stats.packet_count",
6247 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6250 { &hf_openflow_v4_aggregate_stats_byte_count
,
6251 { "Byte count", "openflow_v4.aggregate_stats.byte_count",
6252 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6255 { &hf_openflow_v4_aggregate_stats_flow_count
,
6256 { "Flow count", "openflow_v4.aggregate_stats.flow_count",
6257 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6260 { &hf_openflow_v4_aggregate_stats_pad
,
6261 { "Pad", "openflow_v4.aggregate_stats.pad",
6262 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6265 { &hf_openflow_v4_table_stats_table_id
,
6266 { "Table ID", "openflow_v4.table_stats.table_id",
6267 FT_UINT8
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_table_reserved_values
), 0x0,
6270 { &hf_openflow_v4_table_stats_pad
,
6271 { "Pad", "openflow_v4.table_stats.pad",
6272 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6275 { &hf_openflow_v4_table_stats_active_count
,
6276 { "Active count", "openflow_v4.table_stats.active_count",
6277 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6280 { &hf_openflow_v4_table_stats_lookup_count
,
6281 { "Lookup count", "openflow_v4.table_stats.lookup_count",
6282 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6285 { &hf_openflow_v4_table_stats_match_count
,
6286 { "Match count", "openflow_v4.table_stats.match_count",
6287 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6290 { &hf_openflow_v4_port_stats_port_no
,
6291 { "Port number", "openflow_v4.port_stats.port_no",
6292 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
6295 { &hf_openflow_v4_port_stats_pad
,
6296 { "Pad", "openflow_v4.port_stats.pad",
6297 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6300 { &hf_openflow_v4_port_stats_rx_packets
,
6301 { "Rx packets", "openflow_v4.port_stats.rx_packets",
6302 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6305 { &hf_openflow_v4_port_stats_tx_packets
,
6306 { "Tx packets", "openflow_v4.port_stats.tx_packets",
6307 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6310 { &hf_openflow_v4_port_stats_rx_bytes
,
6311 { "Rx bytes", "openflow_v4.port_stats.rx_bytes",
6312 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6315 { &hf_openflow_v4_port_stats_tx_bytes
,
6316 { "Tx bytes", "openflow_v4.port_stats.tx_bytes",
6317 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6320 { &hf_openflow_v4_port_stats_rx_dropped
,
6321 { "Rx dropped", "openflow_v4.port_stats.rx_dropped",
6322 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6325 { &hf_openflow_v4_port_stats_tx_dropped
,
6326 { "Tx dropped", "openflow_v4.port_stats.tx_dropped",
6327 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6330 { &hf_openflow_v4_port_stats_rx_errors
,
6331 { "Rx errors", "openflow_v4.port_stats.rx_errors",
6332 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6335 { &hf_openflow_v4_port_stats_tx_errors
,
6336 { "Tx errors", "openflow_v4.port_stats.tx_errors",
6337 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6340 { &hf_openflow_v4_port_stats_rx_frame_error
,
6341 { "Rx frame errors", "openflow_v4.port_stats.rx_frame_error",
6342 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6345 { &hf_openflow_v4_port_stats_rx_over_error
,
6346 { "Rx overrun errors", "openflow_v4.port_stats.rx_over_error",
6347 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6350 { &hf_openflow_v4_port_stats_rx_crc_error
,
6351 { "Rx CRC errors", "openflow_v4.port_stats.rx_crc_error",
6352 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6355 { &hf_openflow_v4_port_stats_collisions
,
6356 { "Collisions", "openflow_v4.port_stats.collisions",
6357 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6360 { &hf_openflow_v4_port_stats_duration_sec
,
6361 { "Duration sec", "openflow_v4.port_stats.duration_sec",
6362 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6365 { &hf_openflow_v4_port_stats_duration_nsec
,
6366 { "Duration nsec", "openflow_v4.port_stats.duration_nsec",
6367 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6370 { &hf_openflow_v4_queue_stats_port_no
,
6371 { "Port number", "openflow_v4.queue_stats.port_no",
6372 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
6375 { &hf_openflow_v4_queue_stats_queue_id
,
6376 { "Queue ID", "openflow_v4.queue_stats.queue_id",
6377 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_queue_reserved_values
), 0x0,
6380 { &hf_openflow_v4_queue_stats_tx_bytes
,
6381 { "Tx bytes", "openflow_v4.queue_stats.tx_bytes",
6382 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6385 { &hf_openflow_v4_queue_stats_tx_packets
,
6386 { "Tx packets", "openflow_v4.quee_stats.tx_packets",
6387 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6390 { &hf_openflow_v4_queue_stats_tx_errors
,
6391 { "Tx errors", "openflow_v4.port_stats.tx_errors",
6392 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6395 { &hf_openflow_v4_queue_stats_duration_sec
,
6396 { "Duration sec", "openflow_v4.queue_stats.duration_sec",
6397 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6400 { &hf_openflow_v4_queue_stats_duration_nsec
,
6401 { "Duration nsec", "openflow_v4.queue_stats.duration_nsec",
6402 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6405 { &hf_openflow_v4_bucket_counter_packet_count
,
6406 { "Packet count", "openflow_v4.bucket_counter.packet_count",
6407 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6410 { &hf_openflow_v4_bucket_counter_byte_count
,
6411 { "Byte count", "openflow_v4.bucket_counter.byte_count",
6412 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6415 { &hf_openflow_v4_group_stats_length
,
6416 { "Length", "openflow_v4.group_stats.length",
6417 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6420 { &hf_openflow_v4_group_stats_pad
,
6421 { "Pad", "openflow_v4.group_stats.pad",
6422 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6425 { &hf_openflow_v4_group_stats_group_id
,
6426 { "Group ID", "openflow_v4.group_stats.group_id",
6427 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
6430 { &hf_openflow_v4_group_stats_ref_count
,
6431 { "Ref. count", "openflow_v4.group_stats.ref_count",
6432 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6435 { &hf_openflow_v4_group_stats_pad2
,
6436 { "Pad", "openflow_v4.group_stats.pad2",
6437 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6440 { &hf_openflow_v4_group_stats_packet_count
,
6441 { "Packet count", "openflow_v4.group_stats.packet_count",
6442 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6445 { &hf_openflow_v4_group_stats_byte_count
,
6446 { "Byte count", "openflow_v4.group_stats.byte_count",
6447 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6450 { &hf_openflow_v4_group_desc_length
,
6451 { "Length", "openflow_v4.group_desc.length",
6452 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6455 { &hf_openflow_v4_group_desc_type
,
6456 { "Type", "openflow_v4.group_desc.type",
6457 FT_UINT8
, BASE_DEC
, VALS(openflow_v4_group_type_values
), 0x0,
6460 { &hf_openflow_v4_group_desc_pad
,
6461 { "Pad", "openflow_v4.group_desc.pad2",
6462 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6465 { &hf_openflow_v4_group_desc_group_id
,
6466 { "Group ID", "openflow_v4.group_desc.group_id",
6467 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_group_reserved_values
), 0x0,
6470 { &hf_openflow_v4_group_features_types
,
6471 { "Types", "openflow_v4.group_features.types",
6472 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6475 { &hf_openflow_v4_group_features_types_all
,
6476 { "OFPGT_ALL", "openflow_v4.group_features.types.all",
6477 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_ALL
,
6480 { &hf_openflow_v4_group_features_types_select
,
6481 { "OFPGT_SELECT", "openflow_v4.group_features.types.select",
6482 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_SELECT
,
6485 { &hf_openflow_v4_group_features_types_indirect
,
6486 { "OFPGT_INDIRECT", "openflow_v4.group_features.types.indirect",
6487 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_INDIRECT
,
6490 { &hf_openflow_v4_group_features_types_ff
,
6491 { "OFPGT_FF", "openflow_v4.group_features.types.ff",
6492 FT_BOOLEAN
, 32, NULL
, 1 << OFPGT_FF
,
6495 { &hf_openflow_v4_group_features_capabilities
,
6496 { "Capabilities", "openflow_v4.group_features.capabilities",
6497 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6500 { &hf_openflow_v4_group_features_capabilities_select_weight
,
6501 { "OFPGFC_SELECT_WEIGHT", "openflow_v4.group_features.capabilities.select_weight",
6502 FT_BOOLEAN
, 32, NULL
, OFPGFC_SELECT_WEIGHT
,
6505 { &hf_openflow_v4_group_features_capabilities_select_liveness
,
6506 { "OFPGFC_SELECT_LIVENESS", "openflow_v4.group_features.capabilities.select_liveness",
6507 FT_BOOLEAN
, 32, NULL
, OFPGFC_SELECT_LIVENESS
,
6510 { &hf_openflow_v4_group_features_capabilities_chaining
,
6511 { "OFPGFC_CHAINING", "openflow_v4.group_features.capabilities.chaining",
6512 FT_BOOLEAN
, 32, NULL
, OFPGFC_CHAINING
,
6515 { &hf_openflow_v4_group_features_capabilities_chaining_checks
,
6516 { "OFPGFC_CHAINING_CHECKS", "openflow_v4.group_features.capabilities.chaining_checks",
6517 FT_BOOLEAN
, 32, NULL
, OFPGFC_CHAINING_CHECKS
,
6520 { &hf_openflow_v4_group_features_max_groups_all
,
6521 { "Max groups (all)", "openflow_v4.group_stats.max_groups.all",
6522 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6525 { &hf_openflow_v4_group_features_max_groups_select
,
6526 { "Max groups (select)", "openflow_v4.group_stats.max_groups.select",
6527 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6530 { &hf_openflow_v4_group_features_max_groups_indirect
,
6531 { "Max groups (indirect)", "openflow_v4.group_stats.max_groups.indirect",
6532 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6535 { &hf_openflow_v4_group_features_max_groups_ff
,
6536 { "Max groups (ff)", "openflow_v4.group_stats.max_groups.ff",
6537 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6540 { &hf_openflow_v4_group_features_actions_all
,
6541 { "Actions (all)", "openflow_v4.group_features.actions.all",
6542 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6545 { &hf_openflow_v4_group_features_actions_all_output
,
6546 { "OFPAT_OUTPUT", "openflow_v4.group_features.actions.all.output",
6547 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
6550 { &hf_openflow_v4_group_features_actions_all_copy_ttl_out
,
6551 { "OFPAT_COPY_TTL_OUT", "openflow_v4.group_features.actions.all.copy_ttl_out",
6552 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
6555 { &hf_openflow_v4_group_features_actions_all_copy_ttl_in
,
6556 { "OFPAT_COPY_TTL_IN", "openflow_v4.group_features.actions.all.copy_ttl_in",
6557 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
6560 { &hf_openflow_v4_group_features_actions_all_set_mpls_ttl
,
6561 { "OFPAT_SET_MPLS_TTL", "openflow_v4.group_features.actions.all.set_mpls_ttl",
6562 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
6565 { &hf_openflow_v4_group_features_actions_all_dec_mpls_ttl
,
6566 { "OFPAT_DEC_MPLS_TTL", "openflow_v4.group_features.actions.all.dec_mpls_ttl",
6567 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
6570 { &hf_openflow_v4_group_features_actions_all_push_vlan
,
6571 { "OFPAT_PUSH_VLAN", "openflow_v4.group_features.actions.all.push_vlan",
6572 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
6575 { &hf_openflow_v4_group_features_actions_all_pop_vlan
,
6576 { "OFPAT_POP_VLAN", "openflow_v4.group_features.actions.all.pop_vlan",
6577 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
6580 { &hf_openflow_v4_group_features_actions_all_push_mpls
,
6581 { "OFPAT_PUSH_MPLS", "openflow_v4.group_features.actions.all.push_mpls",
6582 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
6585 { &hf_openflow_v4_group_features_actions_all_pop_mpls
,
6586 { "OFPAT_POP_MPLS", "openflow_v4.group_features.actions.all.pop_mpls",
6587 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
6590 { &hf_openflow_v4_group_features_actions_all_set_queue
,
6591 { "OFPAT_SET_QUEUE", "openflow_v4.group_features.actions.all.set_queue",
6592 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
6595 { &hf_openflow_v4_group_features_actions_all_group
,
6596 { "OFPAT_GROUP", "openflow_v4.group_features.actions.all.group",
6597 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
6600 { &hf_openflow_v4_group_features_actions_all_set_nw_ttl
,
6601 { "OFPAT_SET_NW_TTL", "openflow_v4.group_features.actions.all.set_nw_ttl",
6602 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
6605 { &hf_openflow_v4_group_features_actions_all_dec_nw_ttl
,
6606 { "OFPAT_DEC_NW_TTL", "openflow_v4.group_features.actions.all.dec_nw_ttl",
6607 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
6610 { &hf_openflow_v4_group_features_actions_all_set_field
,
6611 { "OFPAT_SET_FIELD", "openflow_v4.group_features.actions.all.set_field",
6612 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
6615 { &hf_openflow_v4_group_features_actions_all_push_pbb
,
6616 { "OFPAT_PUSH_PBB", "openflow_v4.group_features.actions.all.push_pbb",
6617 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
6620 { &hf_openflow_v4_group_features_actions_all_pop_pbb
,
6621 { "OFPAT_POP_PBB", "openflow_v4.group_features.actions.all.pop_pbb",
6622 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
6625 { &hf_openflow_v4_group_features_actions_select
,
6626 { "Actions (select)", "openflow_v4.group_features.actions.select",
6627 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6630 { &hf_openflow_v4_group_features_actions_select_output
,
6631 { "OFPAT_OUTPUT", "openflow_v4.group_features.actions.select.output",
6632 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
6635 { &hf_openflow_v4_group_features_actions_select_copy_ttl_out
,
6636 { "OFPAT_COPY_TTL_OUT", "openflow_v4.group_features.actions.select.copy_ttl_out",
6637 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
6640 { &hf_openflow_v4_group_features_actions_select_copy_ttl_in
,
6641 { "OFPAT_COPY_TTL_IN", "openflow_v4.group_features.actions.select.copy_ttl_in",
6642 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
6645 { &hf_openflow_v4_group_features_actions_select_set_mpls_ttl
,
6646 { "OFPAT_SET_MPLS_TTL", "openflow_v4.group_features.actions.select.set_mpls_ttl",
6647 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
6650 { &hf_openflow_v4_group_features_actions_select_dec_mpls_ttl
,
6651 { "OFPAT_DEC_MPLS_TTL", "openflow_v4.group_features.actions.select.dec_mpls_ttl",
6652 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
6655 { &hf_openflow_v4_group_features_actions_select_push_vlan
,
6656 { "OFPAT_PUSH_VLAN", "openflow_v4.group_features.actions.select.push_vlan",
6657 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
6660 { &hf_openflow_v4_group_features_actions_select_pop_vlan
,
6661 { "OFPAT_POP_VLAN", "openflow_v4.group_features.actions.select.pop_vlan",
6662 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
6665 { &hf_openflow_v4_group_features_actions_select_push_mpls
,
6666 { "OFPAT_PUSH_MPLS", "openflow_v4.group_features.actions.select.push_mpls",
6667 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
6670 { &hf_openflow_v4_group_features_actions_select_pop_mpls
,
6671 { "OFPAT_POP_MPLS", "openflow_v4.group_features.actions.select.pop_mpls",
6672 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
6675 { &hf_openflow_v4_group_features_actions_select_set_queue
,
6676 { "OFPAT_SET_QUEUE", "openflow_v4.group_features.actions.select.set_queue",
6677 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
6680 { &hf_openflow_v4_group_features_actions_select_group
,
6681 { "OFPAT_GROUP", "openflow_v4.group_features.actions.select.group",
6682 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
6685 { &hf_openflow_v4_group_features_actions_select_set_nw_ttl
,
6686 { "OFPAT_SET_NW_TTL", "openflow_v4.group_features.actions.select.set_nw_ttl",
6687 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
6690 { &hf_openflow_v4_group_features_actions_select_dec_nw_ttl
,
6691 { "OFPAT_DEC_NW_TTL", "openflow_v4.group_features.actions.select.dec_nw_ttl",
6692 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
6695 { &hf_openflow_v4_group_features_actions_select_set_field
,
6696 { "OFPAT_SET_FIELD", "openflow_v4.group_features.actions.select.set_field",
6697 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
6700 { &hf_openflow_v4_group_features_actions_select_push_pbb
,
6701 { "OFPAT_PUSH_PBB", "openflow_v4.group_features.actions.select.push_pbb",
6702 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
6705 { &hf_openflow_v4_group_features_actions_select_pop_pbb
,
6706 { "OFPAT_POP_PBB", "openflow_v4.group_features.actions.select.pop_pbb",
6707 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
6710 { &hf_openflow_v4_group_features_actions_indirect
,
6711 { "Actions (indirect)", "openflow_v4.group_features.actions.indirect",
6712 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6715 { &hf_openflow_v4_group_features_actions_indirect_output
,
6716 { "OFPAT_OUTPUT", "openflow_v4.group_features.actions.indirect.output",
6717 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
6720 { &hf_openflow_v4_group_features_actions_indirect_copy_ttl_out
,
6721 { "OFPAT_COPY_TTL_OUT", "openflow_v4.group_features.actions.indirect.copy_ttl_out",
6722 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
6725 { &hf_openflow_v4_group_features_actions_indirect_copy_ttl_in
,
6726 { "OFPAT_COPY_TTL_IN", "openflow_v4.group_features.actions.indirect.copy_ttl_in",
6727 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
6730 { &hf_openflow_v4_group_features_actions_indirect_set_mpls_ttl
,
6731 { "OFPAT_SET_MPLS_TTL", "openflow_v4.group_features.actions.indirect.set_mpls_ttl",
6732 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
6735 { &hf_openflow_v4_group_features_actions_indirect_dec_mpls_ttl
,
6736 { "OFPAT_DEC_MPLS_TTL", "openflow_v4.group_features.actions.indirect.dec_mpls_ttl",
6737 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
6740 { &hf_openflow_v4_group_features_actions_indirect_push_vlan
,
6741 { "OFPAT_PUSH_VLAN", "openflow_v4.group_features.actions.indirect.push_vlan",
6742 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
6745 { &hf_openflow_v4_group_features_actions_indirect_pop_vlan
,
6746 { "OFPAT_POP_VLAN", "openflow_v4.group_features.actions.indirect.pop_vlan",
6747 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
6750 { &hf_openflow_v4_group_features_actions_indirect_push_mpls
,
6751 { "OFPAT_PUSH_MPLS", "openflow_v4.group_features.actions.indirect.push_mpls",
6752 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
6755 { &hf_openflow_v4_group_features_actions_indirect_pop_mpls
,
6756 { "OFPAT_POP_MPLS", "openflow_v4.group_features.actions.indirect.pop_mpls",
6757 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
6760 { &hf_openflow_v4_group_features_actions_indirect_set_queue
,
6761 { "OFPAT_SET_QUEUE", "openflow_v4.group_features.actions.indirect.set_queue",
6762 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
6765 { &hf_openflow_v4_group_features_actions_indirect_group
,
6766 { "OFPAT_GROUP", "openflow_v4.group_features.actions.indirect.group",
6767 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
6770 { &hf_openflow_v4_group_features_actions_indirect_set_nw_ttl
,
6771 { "OFPAT_SET_NW_TTL", "openflow_v4.group_features.actions.indirect.set_nw_ttl",
6772 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
6775 { &hf_openflow_v4_group_features_actions_indirect_dec_nw_ttl
,
6776 { "OFPAT_DEC_NW_TTL", "openflow_v4.group_features.actions.indirect.dec_nw_ttl",
6777 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
6780 { &hf_openflow_v4_group_features_actions_indirect_set_field
,
6781 { "OFPAT_SET_FIELD", "openflow_v4.group_features.actions.indirect.set_field",
6782 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
6785 { &hf_openflow_v4_group_features_actions_indirect_push_pbb
,
6786 { "OFPAT_PUSH_PBB", "openflow_v4.group_features.actions.indirect.push_pbb",
6787 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
6790 { &hf_openflow_v4_group_features_actions_indirect_pop_pbb
,
6791 { "OFPAT_POP_PBB", "openflow_v4.group_features.actions.indirect.pop_pbb",
6792 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
6795 { &hf_openflow_v4_group_features_actions_ff
,
6796 { "Actions (ff)", "openflow_v4.group_features.actions.ff",
6797 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6800 { &hf_openflow_v4_group_features_actions_ff_output
,
6801 { "OFPAT_OUTPUT", "openflow_v4.group_features.actions.ff.output",
6802 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_OUTPUT
,
6805 { &hf_openflow_v4_group_features_actions_ff_copy_ttl_out
,
6806 { "OFPAT_COPY_TTL_OUT", "openflow_v4.group_features.actions.ff.copy_ttl_out",
6807 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_OUT
,
6810 { &hf_openflow_v4_group_features_actions_ff_copy_ttl_in
,
6811 { "OFPAT_COPY_TTL_IN", "openflow_v4.group_features.actions.ff.copy_ttl_in",
6812 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_COPY_TTL_IN
,
6815 { &hf_openflow_v4_group_features_actions_ff_set_mpls_ttl
,
6816 { "OFPAT_SET_MPLS_TTL", "openflow_v4.group_features.actions.ff.set_mpls_ttl",
6817 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_MPLS_TTL
,
6820 { &hf_openflow_v4_group_features_actions_ff_dec_mpls_ttl
,
6821 { "OFPAT_DEC_MPLS_TTL", "openflow_v4.group_features.actions.ff.dec_mpls_ttl",
6822 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_MPLS_TTL
,
6825 { &hf_openflow_v4_group_features_actions_ff_push_vlan
,
6826 { "OFPAT_PUSH_VLAN", "openflow_v4.group_features.actions.ff.push_vlan",
6827 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_VLAN
,
6830 { &hf_openflow_v4_group_features_actions_ff_pop_vlan
,
6831 { "OFPAT_POP_VLAN", "openflow_v4.group_features.actions.ff.pop_vlan",
6832 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_VLAN
,
6835 { &hf_openflow_v4_group_features_actions_ff_push_mpls
,
6836 { "OFPAT_PUSH_MPLS", "openflow_v4.group_features.actions.ff.push_mpls",
6837 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_MPLS
,
6840 { &hf_openflow_v4_group_features_actions_ff_pop_mpls
,
6841 { "OFPAT_POP_MPLS", "openflow_v4.group_features.actions.ff.pop_mpls",
6842 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_MPLS
,
6845 { &hf_openflow_v4_group_features_actions_ff_set_queue
,
6846 { "OFPAT_SET_QUEUE", "openflow_v4.group_features.actions.ff.set_queue",
6847 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_QUEUE
,
6850 { &hf_openflow_v4_group_features_actions_ff_group
,
6851 { "OFPAT_GROUP", "openflow_v4.group_features.actions.ff.group",
6852 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_GROUP
,
6855 { &hf_openflow_v4_group_features_actions_ff_set_nw_ttl
,
6856 { "OFPAT_SET_NW_TTL", "openflow_v4.group_features.actions.ff.set_nw_ttl",
6857 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_NW_TTL
,
6860 { &hf_openflow_v4_group_features_actions_ff_dec_nw_ttl
,
6861 { "OFPAT_DEC_NW_TTL", "openflow_v4.group_features.actions.ff.dec_nw_ttl",
6862 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_DEC_NW_TTL
,
6865 { &hf_openflow_v4_group_features_actions_ff_set_field
,
6866 { "OFPAT_SET_FIELD", "openflow_v4.group_features.actions.ff.set_field",
6867 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_SET_FIELD
,
6870 { &hf_openflow_v4_group_features_actions_ff_push_pbb
,
6871 { "OFPAT_PUSH_PBB", "openflow_v4.group_features.actions.ff.push_pbb",
6872 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_PUSH_PBB
,
6875 { &hf_openflow_v4_group_features_actions_ff_pop_pbb
,
6876 { "OFPAT_POP_PBB", "openflow_v4.group_features.actions.ff.pop_pbb",
6877 FT_BOOLEAN
, 32, NULL
, 1 << OFPAT_POP_PBB
,
6880 { &hf_openflow_v4_meter_band_stats_packet_band_count
,
6881 { "Packet count", "openflow_v4.meter_band_stats.packet_band_count",
6882 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6885 { &hf_openflow_v4_meter_band_stats_byte_band_count
,
6886 { "Byte count", "openflow_v4.meter_band_stats.byte_band_count",
6887 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6890 { &hf_openflow_v4_meter_stats_meter_id
,
6891 { "Meter ID", "openflow_v4.meter_stats.meter_id",
6892 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_meter_id_reserved_values
), 0x0,
6895 { &hf_openflow_v4_meter_stats_len
,
6896 { "Length", "openflow_v4.meter_stats.length",
6897 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6900 { &hf_openflow_v4_meter_stats_pad
,
6901 { "Pad", "openflow_v4.meter_stats.pad",
6902 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
6905 { &hf_openflow_v4_meter_stats_flow_count
,
6906 { "Flow count", "openflow_v4.meter_stats.flow_count",
6907 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6910 { &hf_openflow_v4_meter_stats_packet_in_count
,
6911 { "Packet in count", "openflow_v4.meter_stats.packet_in_count",
6912 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6915 { &hf_openflow_v4_meter_stats_byte_in_count
,
6916 { "Byte in count", "openflow_v4.meter_stats.byte_in_count",
6917 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
6920 { &hf_openflow_v4_meter_stats_duration_sec
,
6921 { "Duration sec", "openflow_v4.meter_stats.duration_sec",
6922 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6925 { &hf_openflow_v4_meter_stats_duration_nsec
,
6926 { "Duration nsec", "openflow_v4.meter_stats.duration_nsec",
6927 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6930 { &hf_openflow_v4_meter_config_len
,
6931 { "Length", "openflow_v4.meter_config.len",
6932 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
6935 { &hf_openflow_v4_meter_config_flags
,
6936 { "Flags", "openflow_v4.meter_config.flags",
6937 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6940 { &hf_openflow_v4_meter_config_flags_kbps
,
6941 { "OFPMF_KBPS", "openflow_v4.meter_config.flags.kbps",
6942 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
6945 { &hf_openflow_v4_meter_config_flags_pktps
,
6946 { "OFPMF_PKTPS", "openflow_v4.meter_config.flags.ptkps",
6947 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
6950 { &hf_openflow_v4_meter_config_flags_burst
,
6951 { "OFPMF_BURST", "openflow_v4.meter_config.flags.burst",
6952 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
6955 { &hf_openflow_v4_meter_config_flags_stats
,
6956 { "OFPMF_STATS", "openflow_v4.meter_config.flags.stats",
6957 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
6960 { &hf_openflow_v4_meter_config_meter_id
,
6961 { "Meter ID", "openflow_v4.meter_config.meter_id",
6962 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_meter_id_reserved_values
), 0x0,
6965 { &hf_openflow_v4_meter_features_max_meter
,
6966 { "Max meters", "openflow_v4.meter_features.max_meter",
6967 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
6970 { &hf_openflow_v4_meter_features_band_types
,
6971 { "Band types", "openflow_v4.features.band_types",
6972 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6975 { &hf_openflow_v4_meter_features_band_types_drop
,
6976 { "OFPMBT_DROP", "openflow_v4.meter_features.band_types.drop",
6977 FT_BOOLEAN
, 32, NULL
, 1 << OFPMBT_DROP
,
6980 { &hf_openflow_v4_meter_features_band_types_dscp_remark
,
6981 { "OFPMBT_DSCP_REMARK", "openflow_v4.meter_features.band_types.dscp_remark",
6982 FT_BOOLEAN
, 32, NULL
, 1 << OFPMBT_DSCP_REMARK
,
6985 { &hf_openflow_v4_meter_features_capabilities
,
6986 { "Capabilities", "openflow_v4.meter_features.capabilities",
6987 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
6990 { &hf_openflow_v4_meter_features_capabilities_kbps
,
6991 { "OFPMF_KBPS", "openflow_v4.meter_features.capabilities.kbps",
6992 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
6995 { &hf_openflow_v4_meter_features_capabilities_pktps
,
6996 { "OFPMF_PKTPS", "openflow_v4.meter_features.capabilities.ptkps",
6997 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
7000 { &hf_openflow_v4_meter_features_capabilities_burst
,
7001 { "OFPMF_BURST", "openflow_v4.meter_features.capabilities.burst",
7002 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
7005 { &hf_openflow_v4_meter_features_capabilities_stats
,
7006 { "OFPMF_STATS", "openflow_v4.meter_features.capabilities.stats",
7007 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
7010 { &hf_openflow_v4_meter_features_max_bands
,
7011 { "Max bands", "openflow_v4.meter_features.max_bands",
7012 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7015 { &hf_openflow_v4_meter_features_max_color
,
7016 { "Max colors", "openflow_v4.meter_features.max_color",
7017 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7020 { &hf_openflow_v4_meter_features_pad
,
7021 { "Pad", "openflow_v4.meter_features.pad",
7022 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7025 { &hf_openflow_v4_multipart_reply_type
,
7026 { "Type", "openflow_v4.multipart_reply.type",
7027 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_multipart_type_values
), 0x0,
7030 { &hf_openflow_v4_multipart_reply_flags
,
7031 { "Flags", "openflow_v4.multipart_reply.flags",
7032 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
7035 { &hf_openflow_v4_multipart_reply_flags_more
,
7036 { "OFPMPF_REPLY_MORE", "openflow_v4.multipart_reply.flags.more",
7037 FT_UINT16
, BASE_HEX
, NULL
, OFPMPF_REPLY_MORE
,
7040 { &hf_openflow_v4_multipart_reply_pad
,
7041 { "Pad", "openflow_v4.multipart_reply.pad",
7042 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7045 { &hf_openflow_v4_multipart_reply_experimenter_experimenter
,
7046 { "Experimenter", "openflow_v4.multipart_reply.experimenter.experimenter",
7047 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7050 { &hf_openflow_v4_multipart_reply_experimenter_exp_type
,
7051 { "Experimenter type", "openflow_v4.multipart_reply.experimenter.exp_type",
7052 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7055 { &hf_openflow_v4_queue_get_config_request_port
,
7056 { "Port", "openflow_v4.queue_get_config_request.port",
7057 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
7060 { &hf_openflow_v4_queue_get_config_request_pad
,
7061 { "Pad", "openflow_v4.queue_get_config_request.pad",
7062 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7065 { &hf_openflow_v4_queue_prop_property
,
7066 { "Property", "openflow_v4.queue_prop.property",
7067 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_queue_prop_property_values
), 0x0,
7070 { &hf_openflow_v4_queue_prop_len
,
7071 { "Length", "openflow_v4.queue_prop.len",
7072 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7075 { &hf_openflow_v4_queue_prop_pad
,
7076 { "Pad", "openflow_v4.queue_prop.pad",
7077 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7080 { &hf_openflow_v4_queue_prop_min_rate_rate
,
7081 { "Rate", "openflow_v4.queue_prop.min_rate.rate",
7082 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_queue_prop_min_rate_reserved_values
), 0x0,
7085 { &hf_openflow_v4_queue_prop_min_rate_pad
,
7086 { "Pad", "openflow_v4.queue_prop.min_rate.pad",
7087 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7090 { &hf_openflow_v4_queue_prop_max_rate_rate
,
7091 { "Rate", "openflow_v4.queue_prop.max_rate.rate",
7092 FT_UINT16
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_queue_prop_max_rate_reserved_values
), 0x0,
7095 { &hf_openflow_v4_queue_prop_max_rate_pad
,
7096 { "Pad", "openflow_v4.queue_prop.max_rate.pad",
7097 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7100 { &hf_openflow_v4_queue_prop_experimenter_experimenter
,
7101 { "Experimenter", "openflow_v4.queue_prop.experimenter.experimenter",
7102 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
7105 { &hf_openflow_v4_queue_prop_experimenter_pad
,
7106 { "Pad", "openflow_v4.queue_prop.experimenter.pad",
7107 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7110 { &hf_openflow_v4_packet_queue_queue_id
,
7111 { "Queue ID", "openflow_v4.packet_queue.queue_id",
7112 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_queue_id_reserved_values
), 0x0,
7115 { &hf_openflow_v4_packet_queue_port
,
7116 { "Port", "openflow_v4.packet_queue.port",
7117 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
7120 { &hf_openflow_v4_packet_queue_len
,
7121 { "Length", "openflow_v4.packet_queue.len",
7122 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7125 { &hf_openflow_v4_packet_queue_pad
,
7126 { "Pad", "openflow_v4.packet_queue.pad",
7127 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7130 { &hf_openflow_v4_queue_get_config_reply_port
,
7131 { "Port", "openflow_v4.queue_get_config_reply.port",
7132 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_port_reserved_values
), 0x0,
7135 { &hf_openflow_v4_queue_get_config_reply_pad
,
7136 { "Pad", "openflow_v4.queue_get_config_reply.pad",
7137 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7140 { &hf_openflow_v4_role_request_role
,
7141 { "Role", "openflow_v4.role_request.role",
7142 FT_UINT32
, BASE_HEX
, VALS(openflow_v4_controller_role_values
), 0x0,
7145 { &hf_openflow_v4_role_request_pad
,
7146 { "Pad", "openflow_v4.role_request.pad",
7147 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7150 { &hf_openflow_v4_role_request_generation_id
,
7151 { "Generation ID", "openflow_v4.role_request.generation_id",
7152 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7155 { &hf_openflow_v4_role_reply_role
,
7156 { "Role", "openflow_v4.role_reply.role",
7157 FT_UINT32
, BASE_HEX
, VALS(openflow_v4_controller_role_values
), 0x0,
7160 { &hf_openflow_v4_role_reply_pad
,
7161 { "Pad", "openflow_v4.role_reply.pad",
7162 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7165 { &hf_openflow_v4_role_reply_generation_id
,
7166 { "Generation ID", "openflow_v4.role_reply.generation_id",
7167 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
7170 { &hf_openflow_v4_async_config_packet_in_mask_master
,
7171 { "Packet_in mask (master)", "openflow_v4.async_config.packet_in_mask.master",
7172 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7175 { &hf_openflow_v4_async_config_packet_in_mask_master_no_match
,
7176 { "OFPR_NO_MATCH", "openflow_v4.async_config.packet_in_mask.master.no_match",
7177 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_NO_MATCH
,
7180 { &hf_openflow_v4_async_config_packet_in_mask_master_action
,
7181 { "OFPR_ACTION", "openflow_v4.async_config.packet_in_mask.master.action",
7182 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_ACTION
,
7185 { &hf_openflow_v4_async_config_packet_in_mask_master_invalid_ttl
,
7186 { "OFPR_INVALID_TTL", "openflow_v4.async_config.packet_in_mask.master.invalid_ttl",
7187 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_INVALID_TTL
,
7190 { &hf_openflow_v4_async_config_packet_in_mask_slave
,
7191 { "Packet_in mask (slave)", "openflow_v4.async_config.packet_in_mask.slave",
7192 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7195 { &hf_openflow_v4_async_config_packet_in_mask_slave_no_match
,
7196 { "OFPR_NO_MATCH", "openflow_v4.async_config.packet_in_mask.slave.no_match",
7197 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_NO_MATCH
,
7200 { &hf_openflow_v4_async_config_packet_in_mask_slave_action
,
7201 { "OFPR_ACTION", "openflow_v4.async_config.packet_in_mask.slave.action",
7202 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_ACTION
,
7205 { &hf_openflow_v4_async_config_packet_in_mask_slave_invalid_ttl
,
7206 { "OFPR_INVALID_TTL", "openflow_v4.async_config.packet_in_mask.slave.invalid_ttl",
7207 FT_BOOLEAN
, 32, NULL
, 1 << OFPR_INVALID_TTL
,
7210 { &hf_openflow_v4_async_config_port_status_mask_master
,
7211 { "Port status mask (master)", "openflow_v4.async_config.port_status_mask.master",
7212 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7215 { &hf_openflow_v4_async_config_port_status_mask_master_add
,
7216 { "OFPPR_ADD", "openflow_v4.async_config.port_status_mask.master.add",
7217 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_ADD
,
7220 { &hf_openflow_v4_async_config_port_status_mask_master_delete
,
7221 { "OFPPR_DELETE", "openflow_v4.async_config.port_status_mask.master.delete",
7222 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_DELETE
,
7225 { &hf_openflow_v4_async_config_port_status_mask_master_modify
,
7226 { "OFPPR_MODIFY", "openflow_v4.async_config.port_status_mask.master.modify",
7227 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_MODIFY
,
7230 { &hf_openflow_v4_async_config_port_status_mask_slave
,
7231 { "Port status mask (slave)", "openflow_v4.async_config.port_status_mask.slave",
7232 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7235 { &hf_openflow_v4_async_config_port_status_mask_slave_add
,
7236 { "OFPPR_ADD", "openflow_v4.async_config.port_status_mask.slave.add",
7237 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_ADD
,
7240 { &hf_openflow_v4_async_config_port_status_mask_slave_delete
,
7241 { "OFPPR_DELETE", "openflow_v4.async_config.port_status_mask.slave.delete",
7242 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_DELETE
,
7245 { &hf_openflow_v4_async_config_port_status_mask_slave_modify
,
7246 { "OFPPR_MODIFY", "openflow_v4.async_config.port_status_mask.slave.modify",
7247 FT_BOOLEAN
, 32, NULL
, 1 << OFPPR_MODIFY
,
7250 { &hf_openflow_v4_async_config_flow_removed_mask_master
,
7251 { "Flow removed mask (master)", "openflow_v4.async_config.flow_removed_mask.master",
7252 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7255 { &hf_openflow_v4_async_config_flow_removed_mask_master_idle_timeout
,
7256 { "OFPRR_IDLE_TIMEOUT", "openflow_v4.async_config.flow_removed_mask.master.idle_timeout",
7257 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_IDLE_TIMEOUT
,
7260 { &hf_openflow_v4_async_config_flow_removed_mask_master_hard_timeout
,
7261 { "OFPRR_HARD_TIMEOUT", "openflow_v4.async_config.flow_removed_mask.master.hard_timeout",
7262 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_HARD_TIMEOUT
,
7265 { &hf_openflow_v4_async_config_flow_removed_mask_master_delete
,
7266 { "OFPRR_DELETE", "openflow_v4.async_config.flow_removed_mask.master.delete",
7267 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_DELETE
,
7270 { &hf_openflow_v4_async_config_flow_removed_mask_master_group_delete
,
7271 { "OFPRR_GROUP_DELETE", "openflow_v4.async_config.flow_removed_mask.master.group_delete",
7272 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_GROUP_DELETE
,
7275 { &hf_openflow_v4_async_config_flow_removed_mask_slave
,
7276 { "Flow removed mask (slave)", "openflow_v4.async_config.flow_removed_mask.slave",
7277 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7280 { &hf_openflow_v4_async_config_flow_removed_mask_slave_idle_timeout
,
7281 { "OFPRR_IDLE_TIMEOUT", "openflow_v4.async_config.flow_removed_mask.slave.idle_timeout",
7282 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_IDLE_TIMEOUT
,
7285 { &hf_openflow_v4_async_config_flow_removed_mask_slave_hard_timeout
,
7286 { "OFPRR_HARD_TIMEOUT", "openflow_v4.async_config.flow_removed_mask.slave.hard_timeout",
7287 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_HARD_TIMEOUT
,
7290 { &hf_openflow_v4_async_config_flow_removed_mask_slave_delete
,
7291 { "OFPRR_DELETE", "openflow_v4.async_config.flow_removed_mask.slave.delete",
7292 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_DELETE
,
7295 { &hf_openflow_v4_async_config_flow_removed_mask_slave_group_delete
,
7296 { "OFPRR_GROUP_DELETE", "openflow_v4.async_config.flow_removed_mask.slave.group_delete",
7297 FT_BOOLEAN
, 32, NULL
, 1 << OFPRR_GROUP_DELETE
,
7300 { &hf_openflow_v4_metermod_command
,
7301 { "Command", "openflow_v4.metermod.command",
7302 FT_UINT16
, BASE_DEC
, VALS(openflow_v4_metermod_command_values
), 0x0,
7305 { &hf_openflow_v4_metermod_flags
,
7306 { "Flags", "openflow_v4.metermod.flags",
7307 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7310 { &hf_openflow_v4_metermod_flags_kbps
,
7311 { "OFPMF_KBPS", "openflow_v4.metermod.flags.kbps",
7312 FT_BOOLEAN
, 32, NULL
, OFPMF_KBPS
,
7315 { &hf_openflow_v4_metermod_flags_pktps
,
7316 { "OFPMF_PKTPS", "openflow_v4.metermod.flags.ptkps",
7317 FT_BOOLEAN
, 32, NULL
, OFPMF_PKTPS
,
7320 { &hf_openflow_v4_metermod_flags_burst
,
7321 { "OFPMF_BURST", "openflow_v4.metermod.flags.burst",
7322 FT_BOOLEAN
, 32, NULL
, OFPMF_BURST
,
7325 { &hf_openflow_v4_metermod_flags_stats
,
7326 { "OFPMF_STATS", "openflow_v4.metermod.flags.stats",
7327 FT_BOOLEAN
, 32, NULL
, OFPMF_STATS
,
7330 { &hf_openflow_v4_metermod_meter_id
,
7331 { "Meter ID", "openflow_v4.metermod.meter_id",
7332 FT_UINT32
, BASE_DEC
|BASE_SPECIAL_VALS
, VALS(openflow_v4_meter_id_reserved_values
), 0x0,
7337 static int *ett
[] = {
7339 &ett_openflow_v4_flowmod_flags
,
7340 &ett_openflow_v4_bucket
,
7341 &ett_openflow_v4_oxm
,
7342 &ett_openflow_v4_match
,
7343 &ett_openflow_v4_action
,
7344 &ett_openflow_v4_instruction
,
7345 &ett_openflow_v4_port
,
7346 &ett_openflow_v4_port_config
,
7347 &ett_openflow_v4_port_state
,
7348 &ett_openflow_v4_port_current
,
7349 &ett_openflow_v4_port_advertised
,
7350 &ett_openflow_v4_port_supported
,
7351 &ett_openflow_v4_port_peer
,
7352 &ett_openflow_v4_meter_band
,
7353 &ett_openflow_v4_hello_element
,
7354 &ett_openflow_v4_error_data
,
7355 &ett_openflow_v4_switch_features_capabilities
,
7356 &ett_openflow_v4_switch_config_flags
,
7357 &ett_openflow_v4_packet_in_data
,
7358 &ett_openflow_v4_packet_out_data
,
7359 &ett_openflow_v4_portmod_config
,
7360 &ett_openflow_v4_portmod_mask
,
7361 &ett_openflow_v4_portmod_advertise
,
7362 &ett_openflow_v4_table_features
,
7363 &ett_openflow_v4_table_feature_prop
,
7364 &ett_openflow_v4_table_feature_prop_instruction_id
,
7365 &ett_openflow_v4_table_feature_prop_action_id
,
7366 &ett_openflow_v4_table_feature_prop_oxm_id
,
7367 &ett_openflow_v4_multipart_request_flags
,
7368 &ett_openflow_v4_flow_stats
,
7369 &ett_openflow_v4_flow_stats_flags
,
7370 &ett_openflow_v4_table_stats
,
7371 &ett_openflow_v4_port_stats
,
7372 &ett_openflow_v4_queue_stats
,
7373 &ett_openflow_v4_bucket_counter
,
7374 &ett_openflow_v4_group_stats
,
7375 &ett_openflow_v4_group_desc
,
7376 &ett_openflow_v4_group_features_types
,
7377 &ett_openflow_v4_group_features_capabilities
,
7378 &ett_openflow_v4_group_features_actions_all
,
7379 &ett_openflow_v4_group_features_actions_select
,
7380 &ett_openflow_v4_group_features_actions_indirect
,
7381 &ett_openflow_v4_group_features_actions_ff
,
7382 &ett_openflow_v4_meter_band_stats
,
7383 &ett_openflow_v4_meter_stats
,
7384 &ett_openflow_v4_meter_config
,
7385 &ett_openflow_v4_meter_config_flags
,
7386 &ett_openflow_v4_meter_features_band_types
,
7387 &ett_openflow_v4_meter_features_capabilities
,
7388 &ett_openflow_v4_multipart_reply_flags
,
7389 &ett_openflow_v4_queue_prop
,
7390 &ett_openflow_v4_packet_queue
,
7391 &ett_openflow_v4_async_config_packet_in_mask_master
,
7392 &ett_openflow_v4_async_config_packet_in_mask_slave
,
7393 &ett_openflow_v4_async_config_port_status_mask_master
,
7394 &ett_openflow_v4_async_config_port_status_mask_slave
,
7395 &ett_openflow_v4_async_config_flow_removed_mask_master
,
7396 &ett_openflow_v4_async_config_flow_removed_mask_slave
,
7397 &ett_openflow_v4_metermod_flags
7400 static ei_register_info ei
[] = {
7401 { &ei_openflow_v4_oxm_undecoded
,
7402 { "openflow_v4.oxm.undecoded", PI_UNDECODED
, PI_NOTE
,
7403 "Unknown OMX body.", EXPFILL
}
7405 { &ei_openflow_v4_match_undecoded
,
7406 { "openflow_v4.match.undecoded", PI_UNDECODED
, PI_NOTE
,
7407 "Unknown match body.", EXPFILL
}
7409 { &ei_openflow_v4_action_undecoded
,
7410 { "openflow_v4.action.undecoded", PI_UNDECODED
, PI_NOTE
,
7411 "Unknown action body.", EXPFILL
}
7413 { &ei_openflow_v4_instruction_undecoded
,
7414 { "openflow_v4.instruction.undecoded", PI_UNDECODED
, PI_NOTE
,
7415 "Unknown instruction body.", EXPFILL
}
7417 { &ei_openflow_v4_meter_band_undecoded
,
7418 { "openflow_v4.meter_band.undecoded", PI_UNDECODED
, PI_NOTE
,
7419 "Unknown meter band body.", EXPFILL
}
7421 { &ei_openflow_v4_hello_element_undecoded
,
7422 { "openflow_v4.hello_element.undecoded", PI_UNDECODED
, PI_NOTE
,
7423 "Unknown hello element body.", EXPFILL
}
7425 { &ei_openflow_v4_error_undecoded
,
7426 { "openflow_v4.error.undecoded", PI_UNDECODED
, PI_NOTE
,
7427 "Unknown error data.", EXPFILL
}
7429 { &ei_openflow_v4_experimenter_undecoded
,
7430 { "openflow_v4.experimenter.undecoded", PI_UNDECODED
, PI_NOTE
,
7431 "Unknown experimenter body.", EXPFILL
}
7433 { &ei_openflow_v4_table_feature_prop_undecoded
,
7434 { "openflow_v4.table_feature_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
7435 "Unknown table feature property body.", EXPFILL
}
7437 { &ei_openflow_v4_multipart_request_undecoded
,
7438 { "openflow_v4.multipart_request.undecoded", PI_UNDECODED
, PI_NOTE
,
7439 "Unknown multipart request body.", EXPFILL
}
7441 { &ei_openflow_v4_multipart_reply_undecoded
,
7442 { "openflow_v4.multipart_reply.undecoded", PI_UNDECODED
, PI_NOTE
,
7443 "Unknown multipart reply body.", EXPFILL
}
7445 { &ei_openflow_v4_queue_prop_undecoded
,
7446 { "openflow_v4.queue_prop.undecoded", PI_UNDECODED
, PI_NOTE
,
7447 "Unknown queue property body.", EXPFILL
}
7449 {&ei_openflow_v4_message_undecoded
,
7450 { "openflow_v4.message.undecoded", PI_UNDECODED
, PI_NOTE
,
7451 "Unknown message body.", EXPFILL
}
7455 expert_module_t
*expert_openflow_v4
;
7457 /* Register the protocol name and description */
7458 proto_openflow_v4
= proto_register_protocol("OpenFlow 1.3", "openflow_v4", "openflow_v4");
7460 register_dissector("openflow_v4", dissect_openflow_v4
, proto_openflow_v4
);
7462 /* Required function calls to register the header fields and subtrees */
7463 proto_register_field_array(proto_openflow_v4
, hf
, array_length(hf
));
7464 proto_register_subtree_array(ett
, array_length(ett
));
7465 expert_openflow_v4
= expert_register_protocol(proto_openflow_v4
);
7466 expert_register_field_array(expert_openflow_v4
, ei
, array_length(ei
));
7470 proto_reg_handoff_openflow_v4(void)
7472 eth_withoutfcs_handle
= find_dissector_add_dependency("eth_withoutfcs", proto_openflow_v4
);
7476 * Editor modelines - https://www.wireshark.org/tools/modelines.html
7481 * indent-tabs-mode: nil
7484 * vi: set shiftwidth=4 tabstop=8 expandtab:
7485 * :indentSize=4:tabSize=8:noTabs=true: