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