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