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