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