/src/wireshark/epan/dissectors/packet-openflow_v5.c
Line | Count | Source |
1 | | /* packet-openflow_v5.c |
2 | | * Routines for OpenFlow dissection |
3 | | * Copyright 2013, Anders Broman <anders.broman@ericsson.com> |
4 | | * Copyright 2013, Zoltan Lajos Kis <zoltan.lajos.kis@ericsson.com> |
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/iana-info.h> |
21 | | |
22 | | void proto_register_openflow_v5(void); |
23 | | void proto_reg_handoff_openflow_v5(void); |
24 | | static int dissect_openflow_message_v5(tvbuff_t *, packet_info *, proto_tree *, int); |
25 | | |
26 | | static dissector_handle_t eth_withoutfcs_handle; |
27 | | |
28 | | static int proto_openflow_v5; |
29 | | static int hf_openflow_v5_version; |
30 | | static int hf_openflow_v5_type; |
31 | | static int hf_openflow_v5_length; |
32 | | static int hf_openflow_v5_xid; |
33 | | static int hf_openflow_v5_oxm_class; |
34 | | static int hf_openflow_v5_oxm_field; |
35 | | static int hf_openflow_v5_oxm_field_basic; |
36 | | static int hf_openflow_v5_oxm_hm; |
37 | | static int hf_openflow_v5_oxm_length; |
38 | | static int hf_openflow_v5_oxm_experimenter_experimenter; |
39 | | static int hf_openflow_v5_oxm_value; |
40 | | static int hf_openflow_v5_oxm_value_etheraddr; |
41 | | static int hf_openflow_v5_oxm_value_vlan_present; |
42 | | static int hf_openflow_v5_oxm_value_vlan_vid; |
43 | | static int hf_openflow_v5_oxm_value_ethertype; |
44 | | static int hf_openflow_v5_oxm_value_ipv4addr; |
45 | | static int hf_openflow_v5_oxm_value_ipv6addr; |
46 | | static int hf_openflow_v5_oxm_value_ipproto; |
47 | | static int hf_openflow_v5_oxm_value_uint16; |
48 | | static int hf_openflow_v5_oxm_value_uint24; |
49 | | static int hf_openflow_v5_oxm_value_uint32; |
50 | | static int hf_openflow_v5_oxm_mask; |
51 | | static int hf_openflow_v5_oxm_mask_etheraddr; |
52 | | static int hf_openflow_v5_oxm_mask_ipv4addr; |
53 | | static int hf_openflow_v5_oxm_mask_ipv6addr; |
54 | | static int hf_openflow_v5_oxm_mask_vlan; |
55 | | static int hf_openflow_v5_match_type; |
56 | | static int hf_openflow_v5_match_length; |
57 | | static int hf_openflow_v5_match_pad; |
58 | | static int hf_openflow_v5_action_type; |
59 | | static int hf_openflow_v5_action_length; |
60 | | static int hf_openflow_v5_action_experimenter_experimenter; |
61 | | static int hf_openflow_v5_oxm_experimenter_value; |
62 | | static int hf_openflow_v5_action_output_port; |
63 | | static int hf_openflow_v5_action_output_max_len; |
64 | | static int hf_openflow_v5_action_output_pad; |
65 | | static int hf_openflow_v5_action_copy_ttl_out_pad; |
66 | | static int hf_openflow_v5_action_copy_ttl_in_pad; |
67 | | static int hf_openflow_v5_action_set_mpls_ttl_ttl; |
68 | | static int hf_openflow_v5_action_set_mpls_ttl_pad; |
69 | | static int hf_openflow_v5_action_dec_mpls_ttl_pad; |
70 | | static int hf_openflow_v5_action_push_vlan_ethertype; |
71 | | static int hf_openflow_v5_action_push_vlan_pad; |
72 | | static int hf_openflow_v5_action_pop_vlan_pad; |
73 | | static int hf_openflow_v5_action_push_mpls_ethertype; |
74 | | static int hf_openflow_v5_action_push_mpls_pad; |
75 | | static int hf_openflow_v5_action_pop_mpls_ethertype; |
76 | | static int hf_openflow_v5_action_pop_mpls_pad; |
77 | | static int hf_openflow_v5_action_set_queue_queue_id; |
78 | | static int hf_openflow_v5_action_group_group_id; |
79 | | static int hf_openflow_v5_action_set_nw_ttl_ttl; |
80 | | static int hf_openflow_v5_action_set_nw_ttl_pad; |
81 | | static int hf_openflow_v5_action_dec_nw_ttl_pad; |
82 | | static int hf_openflow_v5_action_set_field_pad; |
83 | | static int hf_openflow_v5_action_push_pbb_ethertype; |
84 | | static int hf_openflow_v5_action_push_pbb_pad; |
85 | | static int hf_openflow_v5_action_pop_pbb_pad; |
86 | | static int hf_openflow_v5_instruction_type; |
87 | | static int hf_openflow_v5_instruction_length; |
88 | | static int hf_openflow_v5_instruction_experimenter_experimenter; |
89 | | static int hf_openflow_v5_instruction_goto_table_table_id; |
90 | | static int hf_openflow_v5_instruction_goto_table_pad; |
91 | | static int hf_openflow_v5_instruction_write_metadata_pad; |
92 | | static int hf_openflow_v5_instruction_write_metadata_value; |
93 | | static int hf_openflow_v5_instruction_write_metadata_mask; |
94 | | static int hf_openflow_v5_instruction_actions_pad; |
95 | | static int hf_openflow_v5_instruction_meter_meter_id; |
96 | | static int hf_openflow_v5_port_desc_prop_type; |
97 | | static int hf_openflow_v5_port_desc_prop_length; |
98 | | static int hf_openflow_v5_port_desc_prop_ethernet_pad; |
99 | | static int hf_openflow_v5_port_desc_prop_ethernet_current; |
100 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_10mb_hd; |
101 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_10mb_fd; |
102 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_100mb_hd; |
103 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_100mb_fd; |
104 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_1gb_hd; |
105 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_1gb_fd; |
106 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_10gb_fd; |
107 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_40gb_fd; |
108 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_100gb_fd; |
109 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_1tb_fd; |
110 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_other; |
111 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_copper; |
112 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_fiber; |
113 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_autoneg; |
114 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_pause; |
115 | | static int hf_openflow_v5_port_desc_prop_ethernet_current_pause_asym; |
116 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised; |
117 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_hd; |
118 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_fd; |
119 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_hd; |
120 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_fd; |
121 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_hd; |
122 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_fd; |
123 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_10gb_fd; |
124 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_40gb_fd; |
125 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_100gb_fd; |
126 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_1tb_fd; |
127 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_other; |
128 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_copper; |
129 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_fiber; |
130 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_autoneg; |
131 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_pause; |
132 | | static int hf_openflow_v5_port_desc_prop_ethernet_advertised_pause_asym; |
133 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported; |
134 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_hd; |
135 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_fd; |
136 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_hd; |
137 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_fd; |
138 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_hd; |
139 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_fd; |
140 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_10gb_fd; |
141 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_40gb_fd; |
142 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_100gb_fd; |
143 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_1tb_fd; |
144 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_other; |
145 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_copper; |
146 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_fiber; |
147 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_autoneg; |
148 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_pause; |
149 | | static int hf_openflow_v5_port_desc_prop_ethernet_supported_pause_asym; |
150 | | static int hf_openflow_v5_port_desc_prop_optical_pad; |
151 | | static int hf_openflow_v5_port_desc_prop_optical_supported; |
152 | | static int hf_openflow_v5_port_desc_prop_optical_supported_rx_tune; |
153 | | static int hf_openflow_v5_port_desc_prop_optical_supported_tx_tune; |
154 | | static int hf_openflow_v5_port_desc_prop_optical_supported_tx_pwr; |
155 | | static int hf_openflow_v5_port_desc_prop_optical_supported_use_freq; |
156 | | static int hf_openflow_v5_port_desc_prop_optical_tx_min_freq_lmda; |
157 | | static int hf_openflow_v5_port_desc_prop_optical_tx_max_freq_lmda; |
158 | | static int hf_openflow_v5_port_desc_prop_optical_tx_grid_freq_lmda; |
159 | | static int hf_openflow_v5_port_desc_prop_optical_rx_min_freq_lmda; |
160 | | static int hf_openflow_v5_port_desc_prop_optical_rx_max_freq_lmda; |
161 | | static int hf_openflow_v5_port_desc_prop_optical_rx_grid_freq_lmda; |
162 | | static int hf_openflow_v5_port_desc_prop_optical_tx_pwr_min; |
163 | | static int hf_openflow_v5_port_desc_prop_optical_tx_pwr_max; |
164 | | static int hf_openflow_v5_port_desc_prop_experimenter_experimenter; |
165 | | static int hf_openflow_v5_port_desc_prop_experimenter_exp_type; |
166 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer; |
167 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_hd; |
168 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_fd; |
169 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_hd; |
170 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_fd; |
171 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_hd; |
172 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_fd; |
173 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_10gb_fd; |
174 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_40gb_fd; |
175 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_100gb_fd; |
176 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_1tb_fd; |
177 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_other; |
178 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_copper; |
179 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_fiber; |
180 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_autoneg; |
181 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_pause; |
182 | | static int hf_openflow_v5_port_desc_prop_ethernet_peer_pause_asym; |
183 | | static int hf_openflow_v5_port_desc_prop_ethernet_curr_speed; |
184 | | static int hf_openflow_v5_port_desc_prop_ethernet_max_speed; |
185 | | static int hf_openflow_v5_port_stats_prop_type; |
186 | | static int hf_openflow_v5_port_stats_prop_length; |
187 | | static int hf_openflow_v5_port_stats_prop_ethernet_pad; |
188 | | static int hf_openflow_v5_port_stats_prop_ethernet_rx_frame_err; |
189 | | static int hf_openflow_v5_port_stats_prop_ethernet_rx_over_err; |
190 | | static int hf_openflow_v5_port_stats_prop_ethernet_rx_crc_err; |
191 | | static int hf_openflow_v5_port_stats_prop_ethernet_collisions; |
192 | | static int hf_openflow_v5_port_stats_prop_optical_pad; |
193 | | static int hf_openflow_v5_port_stats_prop_optical_flags; |
194 | | static int hf_openflow_v5_port_stats_prop_optical_flags_rx_tune; |
195 | | static int hf_openflow_v5_port_stats_prop_optical_flags_tx_tune; |
196 | | static int hf_openflow_v5_port_stats_prop_optical_flags_tx_pwr; |
197 | | static int hf_openflow_v5_port_stats_prop_optical_flags_rx_pwr; |
198 | | static int hf_openflow_v5_port_stats_prop_optical_flags_tx_bias; |
199 | | static int hf_openflow_v5_port_stats_prop_optical_flags_tx_temp; |
200 | | static int hf_openflow_v5_port_stats_prop_optical_tx_freq_lmda; |
201 | | static int hf_openflow_v5_port_stats_prop_optical_tx_offset; |
202 | | static int hf_openflow_v5_port_stats_prop_optical_tx_grid_span; |
203 | | static int hf_openflow_v5_port_stats_prop_optical_rx_freq_lmda; |
204 | | static int hf_openflow_v5_port_stats_prop_optical_rx_offset; |
205 | | static int hf_openflow_v5_port_stats_prop_optical_rx_grid_span; |
206 | | static int hf_openflow_v5_port_stats_prop_optical_tx_pwr; |
207 | | static int hf_openflow_v5_port_stats_prop_optical_rx_pwr; |
208 | | static int hf_openflow_v5_port_stats_prop_optical_bias_current; |
209 | | static int hf_openflow_v5_port_stats_prop_optical_temperature; |
210 | | static int hf_openflow_v5_port_stats_prop_experimenter_experimenter; |
211 | | static int hf_openflow_v5_port_stats_prop_experimenter_exp_type; |
212 | | static int hf_openflow_v5_port_port_no; |
213 | | static int hf_openflow_v5_port_length; |
214 | | static int hf_openflow_v5_port_pad; |
215 | | static int hf_openflow_v5_port_hw_addr; |
216 | | static int hf_openflow_v5_port_pad2; |
217 | | static int hf_openflow_v5_port_name; |
218 | | static int hf_openflow_v5_port_config; |
219 | | static int hf_openflow_v5_port_config_port_down; |
220 | | static int hf_openflow_v5_port_config_no_recv; |
221 | | static int hf_openflow_v5_port_config_no_fwd; |
222 | | static int hf_openflow_v5_port_config_no_packet_in; |
223 | | static int hf_openflow_v5_port_state; |
224 | | static int hf_openflow_v5_port_state_link_down; |
225 | | static int hf_openflow_v5_port_state_blocked; |
226 | | static int hf_openflow_v5_port_state_live; |
227 | | static int hf_openflow_v5_meter_band_type; |
228 | | static int hf_openflow_v5_meter_band_len; |
229 | | static int hf_openflow_v5_meter_band_rate; |
230 | | static int hf_openflow_v5_meter_band_burst_size; |
231 | | static int hf_openflow_v5_meter_band_drop_pad; |
232 | | static int hf_openflow_v5_meter_band_dscp_remark_prec_level; |
233 | | static int hf_openflow_v5_meter_band_dscp_remark_pad; |
234 | | static int hf_openflow_v5_meter_band_experimenter_experimenter; |
235 | | static int hf_openflow_v5_hello_element_type; |
236 | | static int hf_openflow_v5_hello_element_length; |
237 | | static int hf_openflow_v5_hello_element_version_bitmap; |
238 | | static int hf_openflow_v5_hello_element_pad; |
239 | | static int hf_openflow_v5_error_type; |
240 | | static int hf_openflow_v5_error_hello_failed_code; |
241 | | static int hf_openflow_v5_error_bad_request_code; |
242 | | static int hf_openflow_v5_error_bad_action_code; |
243 | | static int hf_openflow_v5_error_bad_instruction_code; |
244 | | static int hf_openflow_v5_error_bad_match_code; |
245 | | static int hf_openflow_v5_error_flow_mod_failed_code; |
246 | | static int hf_openflow_v5_error_group_mod_failed_code; |
247 | | static int hf_openflow_v5_error_port_mod_failed_code; |
248 | | static int hf_openflow_v5_error_table_mod_failed_code; |
249 | | static int hf_openflow_v5_error_queue_op_failed_code; |
250 | | static int hf_openflow_v5_error_switch_config_failed_code; |
251 | | static int hf_openflow_v5_error_role_request_failed_code; |
252 | | static int hf_openflow_v5_error_meter_mod_failed_code; |
253 | | static int hf_openflow_v5_error_table_features_failed_code; |
254 | | static int hf_openflow_v5_error_bad_property_code; |
255 | | static int hf_openflow_v5_error_async_config_failed_code; |
256 | | static int hf_openflow_v5_error_flow_monitor_failed_code; |
257 | | static int hf_openflow_v5_error_bundle_failed_code; |
258 | | static int hf_openflow_v5_error_code; |
259 | | static int hf_openflow_v5_error_data_text; |
260 | | static int hf_openflow_v5_error_data_body; |
261 | | static int hf_openflow_v5_error_experimenter; |
262 | | static int hf_openflow_v5_echo_data; |
263 | | static int hf_openflow_v5_experimenter_experimenter; |
264 | | static int hf_openflow_v5_experimenter_exp_type; |
265 | | static int hf_openflow_v5_switch_features_datapath_id; |
266 | | static int hf_openflow_v5_switch_features_n_buffers; |
267 | | static int hf_openflow_v5_switch_features_n_tables; |
268 | | static int hf_openflow_v5_switch_features_auxiliary_id; |
269 | | static int hf_openflow_v5_switch_features_pad; |
270 | | static int hf_openflow_v5_switch_features_capabilities; |
271 | | static int hf_openflow_v5_switch_features_capabilities_flow_stats; |
272 | | static int hf_openflow_v5_switch_features_capabilities_table_stats; |
273 | | static int hf_openflow_v5_switch_features_capabilities_port_stats; |
274 | | static int hf_openflow_v5_switch_features_capabilities_group_stats; |
275 | | static int hf_openflow_v5_switch_features_capabilities_ip_reasm; |
276 | | static int hf_openflow_v5_switch_features_capabilities_queue_stats; |
277 | | static int hf_openflow_v5_switch_features_capabilities_port_blocked; |
278 | | static int hf_openflow_v5_switch_features_reserved; |
279 | | static int hf_openflow_v5_switch_config_flags; |
280 | | static int hf_openflow_v5_switch_config_flags_fragments; |
281 | | static int hf_openflow_v5_switch_config_miss_send_len; |
282 | | static int hf_openflow_v5_packet_in_buffer_id; |
283 | | static int hf_openflow_v5_packet_in_total_len; |
284 | | static int hf_openflow_v5_packet_in_reason; |
285 | | static int hf_openflow_v5_packet_in_table_id; |
286 | | static int hf_openflow_v5_packet_in_cookie; |
287 | | static int hf_openflow_v5_packet_in_pad; |
288 | | static int hf_openflow_v5_flow_removed_cookie; |
289 | | static int hf_openflow_v5_flow_removed_priority; |
290 | | static int hf_openflow_v5_flow_removed_reason; |
291 | | static int hf_openflow_v5_flow_removed_table_id; |
292 | | static int hf_openflow_v5_flow_removed_duration_sec; |
293 | | static int hf_openflow_v5_flow_removed_duration_nsec; |
294 | | static int hf_openflow_v5_flow_removed_idle_timeout; |
295 | | static int hf_openflow_v5_flow_removed_hard_timeout; |
296 | | static int hf_openflow_v5_flow_removed_packet_count; |
297 | | static int hf_openflow_v5_flow_removed_byte_count; |
298 | | static int hf_openflow_v5_port_status_reason; |
299 | | static int hf_openflow_v5_port_status_pad; |
300 | | static int hf_openflow_v5_packet_out_buffer_id; |
301 | | static int hf_openflow_v5_packet_out_in_port; |
302 | | static int hf_openflow_v5_packet_out_acts_len; |
303 | | static int hf_openflow_v5_packet_out_pad; |
304 | | static int hf_openflow_v5_flowmod_cookie; |
305 | | static int hf_openflow_v5_flowmod_cookie_mask; |
306 | | static int hf_openflow_v5_flowmod_table_id; |
307 | | static int hf_openflow_v5_flowmod_command; |
308 | | static int hf_openflow_v5_flowmod_idle_timeout; |
309 | | static int hf_openflow_v5_flowmod_hard_timeout; |
310 | | static int hf_openflow_v5_flowmod_priority; |
311 | | static int hf_openflow_v5_flowmod_buffer_id; |
312 | | static int hf_openflow_v5_flowmod_out_port; |
313 | | static int hf_openflow_v5_flowmod_out_group; |
314 | | static int hf_openflow_v5_flowmod_flags; |
315 | | static int hf_openflow_v5_flowmod_flags_send_flow_rem; |
316 | | static int hf_openflow_v5_flowmod_flags_check_overlap; |
317 | | static int hf_openflow_v5_flowmod_flags_reset_counts; |
318 | | static int hf_openflow_v5_flowmod_flags_no_packet_counts; |
319 | | static int hf_openflow_v5_flowmod_flags_no_byte_counts; |
320 | | static int hf_openflow_v5_flowmod_importance; |
321 | | static int hf_openflow_v5_bucket_length; |
322 | | static int hf_openflow_v5_bucket_weight; |
323 | | static int hf_openflow_v5_bucket_watch_port; |
324 | | static int hf_openflow_v5_bucket_watch_group; |
325 | | static int hf_openflow_v5_bucket_pad; |
326 | | static int hf_openflow_v5_groupmod_command; |
327 | | static int hf_openflow_v5_groupmod_type; |
328 | | static int hf_openflow_v5_groupmod_pad; |
329 | | static int hf_openflow_v5_groupmod_group_id; |
330 | | static int hf_openflow_v5_portmod_prop_type; |
331 | | static int hf_openflow_v5_portmod_prop_length; |
332 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise; |
333 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_hd; |
334 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_fd; |
335 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_hd; |
336 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_fd; |
337 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_hd; |
338 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_fd; |
339 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_10gb_fd; |
340 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_40gb_fd; |
341 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_100gb_fd; |
342 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_1tb_fd; |
343 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_other; |
344 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_copper; |
345 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_fiber; |
346 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_autoneg; |
347 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_pause; |
348 | | static int hf_openflow_v5_portmod_prop_ethernet_advertise_pause_asym; |
349 | | static int hf_openflow_v5_portmod_prop_optical_configure; |
350 | | static int hf_openflow_v5_portmod_prop_optical_configure_rx_tune; |
351 | | static int hf_openflow_v5_portmod_prop_optical_configure_tx_tune; |
352 | | static int hf_openflow_v5_portmod_prop_optical_configure_tx_pwr; |
353 | | static int hf_openflow_v5_portmod_prop_optical_configure_use_freq; |
354 | | static int hf_openflow_v5_portmod_prop_optical_freq_lmda; |
355 | | static int hf_openflow_v5_portmod_prop_optical_fl_offset; |
356 | | static int hf_openflow_v5_portmod_prop_optical_grid_span; |
357 | | static int hf_openflow_v5_portmod_prop_optical_tx_pwr; |
358 | | static int hf_openflow_v5_portmod_prop_experimenter_experimenter; |
359 | | static int hf_openflow_v5_portmod_prop_experimenter_exp_type; |
360 | | static int hf_openflow_v5_portmod_port_no; |
361 | | static int hf_openflow_v5_portmod_pad; |
362 | | static int hf_openflow_v5_portmod_hw_addr; |
363 | | static int hf_openflow_v5_portmod_pad2; |
364 | | static int hf_openflow_v5_portmod_config; |
365 | | static int hf_openflow_v5_portmod_config_port_down; |
366 | | static int hf_openflow_v5_portmod_config_no_recv; |
367 | | static int hf_openflow_v5_portmod_config_no_fwd; |
368 | | static int hf_openflow_v5_portmod_config_no_packet_in; |
369 | | static int hf_openflow_v5_portmod_mask; |
370 | | static int hf_openflow_v5_portmod_mask_port_down; |
371 | | static int hf_openflow_v5_portmod_mask_no_recv; |
372 | | static int hf_openflow_v5_portmod_mask_no_fwd; |
373 | | static int hf_openflow_v5_portmod_mask_no_packet_in; |
374 | | static int hf_openflow_v5_tablemod_table_id; |
375 | | static int hf_openflow_v5_tablemod_pad; |
376 | | static int hf_openflow_v5_tablemod_config; |
377 | | static int hf_openflow_v5_tablemod_config_eviction; |
378 | | static int hf_openflow_v5_tablemod_config_vacancy_events; |
379 | | static int hf_openflow_v5_tablemod_prop_type; |
380 | | static int hf_openflow_v5_tablemod_prop_length; |
381 | | static int hf_openflow_v5_tablemod_prop_eviction_flags; |
382 | | static int hf_openflow_v5_tablemod_prop_eviction_flags_other; |
383 | | static int hf_openflow_v5_tablemod_prop_eviction_flags_importance; |
384 | | static int hf_openflow_v5_tablemod_prop_eviction_flags_lifetime; |
385 | | static int hf_openflow_v5_tablemod_prop_vacancy_vacancy_down; |
386 | | static int hf_openflow_v5_tablemod_prop_vacancy_vacancy_up; |
387 | | static int hf_openflow_v5_tablemod_prop_vacancy_vacancy; |
388 | | static int hf_openflow_v5_tablemod_prop_vacancy_pad; |
389 | | static int hf_openflow_v5_tablemod_prop_experimenter_experimenter; |
390 | | static int hf_openflow_v5_tablemod_prop_experimenter_exp_type; |
391 | | static int hf_openflow_v5_flow_stats_request_table_id; |
392 | | static int hf_openflow_v5_flow_stats_request_pad; |
393 | | static int hf_openflow_v5_flow_stats_request_out_port; |
394 | | static int hf_openflow_v5_flow_stats_request_out_group; |
395 | | static int hf_openflow_v5_flow_stats_request_pad2; |
396 | | static int hf_openflow_v5_flow_stats_request_cookie; |
397 | | static int hf_openflow_v5_flow_stats_request_cookie_mask; |
398 | | static int hf_openflow_v5_aggregate_stats_request_table_id; |
399 | | static int hf_openflow_v5_aggregate_stats_request_pad; |
400 | | static int hf_openflow_v5_aggregate_stats_request_out_port; |
401 | | static int hf_openflow_v5_aggregate_stats_request_out_group; |
402 | | static int hf_openflow_v5_aggregate_stats_request_pad2; |
403 | | static int hf_openflow_v5_aggregate_stats_request_cookie; |
404 | | static int hf_openflow_v5_aggregate_stats_request_cookie_mask; |
405 | | static int hf_openflow_v5_table_feature_prop_type; |
406 | | static int hf_openflow_v5_table_feature_prop_length; |
407 | | static int hf_openflow_v5_table_feature_prop_next_tables_next_table_id; |
408 | | static int hf_openflow_v5_table_feature_prop_table_sync_from_table_id; |
409 | | static int hf_openflow_v5_table_feature_prop_experimenter_experimenter; |
410 | | static int hf_openflow_v5_table_feature_prop_experimenter_exp_type; |
411 | | static int hf_openflow_v5_table_feature_prop_pad; |
412 | | static int hf_openflow_v5_table_features_length; |
413 | | static int hf_openflow_v5_table_features_table_id; |
414 | | static int hf_openflow_v5_table_features_pad; |
415 | | static int hf_openflow_v5_table_features_name; |
416 | | static int hf_openflow_v5_table_features_metadata_match; |
417 | | static int hf_openflow_v5_table_features_metadata_write; |
418 | | static int hf_openflow_v5_table_features_capabilities; |
419 | | static int hf_openflow_v5_table_features_capabilities_eviction; |
420 | | static int hf_openflow_v5_table_features_capabilities_vacancy_events; |
421 | | static int hf_openflow_v5_table_features_max_entries; |
422 | | static int hf_openflow_v5_port_stats_request_port_no; |
423 | | static int hf_openflow_v5_port_stats_request_pad; |
424 | | static int hf_openflow_v5_queue_stats_request_port_no; |
425 | | static int hf_openflow_v5_queue_stats_request_queue_id; |
426 | | static int hf_openflow_v5_group_stats_request_group_id; |
427 | | static int hf_openflow_v5_group_stats_request_pad; |
428 | | static int hf_openflow_v5_meter_stats_request_meter_id; |
429 | | static int hf_openflow_v5_meter_stats_request_pad; |
430 | | static int hf_openflow_v5_meter_config_request_meter_id; |
431 | | static int hf_openflow_v5_meter_config_request_pad; |
432 | | static int hf_openflow_v5_queue_desc_request_port_no; |
433 | | static int hf_openflow_v5_queue_desc_request_queue_id; |
434 | | static int hf_openflow_v5_flow_monitor_request_monitor_id; |
435 | | static int hf_openflow_v5_flow_monitor_request_out_port; |
436 | | static int hf_openflow_v5_flow_monitor_request_out_group; |
437 | | static int hf_openflow_v5_flow_monitor_request_flags; |
438 | | static int hf_openflow_v5_flow_monitor_request_flags_initial; |
439 | | static int hf_openflow_v5_flow_monitor_request_flags_add; |
440 | | static int hf_openflow_v5_flow_monitor_request_flags_removed; |
441 | | static int hf_openflow_v5_flow_monitor_request_flags_modify; |
442 | | static int hf_openflow_v5_flow_monitor_request_flags_instructions; |
443 | | static int hf_openflow_v5_flow_monitor_request_flags_no_abbrev; |
444 | | static int hf_openflow_v5_flow_monitor_request_flags_only_own; |
445 | | static int hf_openflow_v5_flow_monitor_request_table_id; |
446 | | static int hf_openflow_v5_flow_monitor_request_command; |
447 | | static int hf_openflow_v5_multipart_request_type; |
448 | | static int hf_openflow_v5_multipart_request_flags; |
449 | | static int hf_openflow_v5_multipart_request_flags_more; |
450 | | static int hf_openflow_v5_multipart_request_pad; |
451 | | static int hf_openflow_v5_multipart_request_experimenter_experimenter; |
452 | | static int hf_openflow_v5_multipart_request_experimenter_exp_type; |
453 | | static int hf_openflow_v5_switch_description_mfr_desc; |
454 | | static int hf_openflow_v5_switch_description_hw_desc; |
455 | | static int hf_openflow_v5_switch_description_sw_desc; |
456 | | static int hf_openflow_v5_switch_description_serial_num; |
457 | | static int hf_openflow_v5_switch_description_dp_desc; |
458 | | static int hf_openflow_v5_flow_stats_length; |
459 | | static int hf_openflow_v5_flow_stats_table_id; |
460 | | static int hf_openflow_v5_flow_stats_pad; |
461 | | static int hf_openflow_v5_flow_stats_duration_sec; |
462 | | static int hf_openflow_v5_flow_stats_duration_nsec; |
463 | | static int hf_openflow_v5_flow_stats_priority; |
464 | | static int hf_openflow_v5_flow_stats_idle_timeout; |
465 | | static int hf_openflow_v5_flow_stats_hard_timeout; |
466 | | static int hf_openflow_v5_flow_stats_flags; |
467 | | static int hf_openflow_v5_flow_stats_flags_send_flow_rem; |
468 | | static int hf_openflow_v5_flow_stats_flags_check_overlap; |
469 | | static int hf_openflow_v5_flow_stats_flags_reset_counts; |
470 | | static int hf_openflow_v5_flow_stats_flags_no_packet_counts; |
471 | | static int hf_openflow_v5_flow_stats_flags_no_byte_counts; |
472 | | static int hf_openflow_v5_flow_stats_importance; |
473 | | static int hf_openflow_v5_flow_stats_pad2; |
474 | | static int hf_openflow_v5_flow_stats_cookie; |
475 | | static int hf_openflow_v5_flow_stats_packet_count; |
476 | | static int hf_openflow_v5_flow_stats_byte_count; |
477 | | static int hf_openflow_v5_aggregate_stats_packet_count; |
478 | | static int hf_openflow_v5_aggregate_stats_byte_count; |
479 | | static int hf_openflow_v5_aggregate_stats_flow_count; |
480 | | static int hf_openflow_v5_aggregate_stats_pad; |
481 | | static int hf_openflow_v5_table_stats_table_id; |
482 | | static int hf_openflow_v5_table_stats_pad; |
483 | | static int hf_openflow_v5_table_stats_active_count; |
484 | | static int hf_openflow_v5_table_stats_lookup_count; |
485 | | static int hf_openflow_v5_table_stats_match_count; |
486 | | static int hf_openflow_v5_port_stats_length; |
487 | | static int hf_openflow_v5_port_stats_pad; |
488 | | static int hf_openflow_v5_port_stats_port_no; |
489 | | static int hf_openflow_v5_port_stats_duration_sec; |
490 | | static int hf_openflow_v5_port_stats_duration_nsec; |
491 | | static int hf_openflow_v5_port_stats_rx_packets; |
492 | | static int hf_openflow_v5_port_stats_tx_packets; |
493 | | static int hf_openflow_v5_port_stats_rx_bytes; |
494 | | static int hf_openflow_v5_port_stats_tx_bytes; |
495 | | static int hf_openflow_v5_port_stats_rx_dropped; |
496 | | static int hf_openflow_v5_port_stats_tx_dropped; |
497 | | static int hf_openflow_v5_port_stats_rx_errors; |
498 | | static int hf_openflow_v5_port_stats_tx_errors; |
499 | | static int hf_openflow_v5_queue_stats_length; |
500 | | static int hf_openflow_v5_queue_stats_pad; |
501 | | static int hf_openflow_v5_queue_stats_port_no; |
502 | | static int hf_openflow_v5_queue_stats_queue_id; |
503 | | static int hf_openflow_v5_queue_stats_tx_bytes; |
504 | | static int hf_openflow_v5_queue_stats_tx_packets; |
505 | | static int hf_openflow_v5_queue_stats_tx_errors; |
506 | | static int hf_openflow_v5_queue_stats_duration_sec; |
507 | | static int hf_openflow_v5_queue_stats_duration_nsec; |
508 | | static int hf_openflow_v5_queue_stats_prop_type; |
509 | | static int hf_openflow_v5_queue_stats_prop_length; |
510 | | static int hf_openflow_v5_queue_stats_prop_experimenter_experimenter; |
511 | | static int hf_openflow_v5_queue_stats_prop_experimenter_exp_type; |
512 | | static int hf_openflow_v5_bucket_counter_packet_count; |
513 | | static int hf_openflow_v5_bucket_counter_byte_count; |
514 | | static int hf_openflow_v5_group_stats_length; |
515 | | static int hf_openflow_v5_group_stats_pad; |
516 | | static int hf_openflow_v5_group_stats_group_id; |
517 | | static int hf_openflow_v5_group_stats_ref_count; |
518 | | static int hf_openflow_v5_group_stats_pad2; |
519 | | static int hf_openflow_v5_group_stats_packet_count; |
520 | | static int hf_openflow_v5_group_stats_byte_count; |
521 | | static int hf_openflow_v5_group_desc_length; |
522 | | static int hf_openflow_v5_group_desc_type; |
523 | | static int hf_openflow_v5_group_desc_pad; |
524 | | static int hf_openflow_v5_group_desc_group_id; |
525 | | static int hf_openflow_v5_group_features_types; |
526 | | static int hf_openflow_v5_group_features_types_all; |
527 | | static int hf_openflow_v5_group_features_types_select; |
528 | | static int hf_openflow_v5_group_features_types_indirect; |
529 | | static int hf_openflow_v5_group_features_types_ff; |
530 | | static int hf_openflow_v5_group_features_capabilities; |
531 | | static int hf_openflow_v5_group_features_capabilities_select_weight; |
532 | | static int hf_openflow_v5_group_features_capabilities_select_liveness; |
533 | | static int hf_openflow_v5_group_features_capabilities_chaining; |
534 | | static int hf_openflow_v5_group_features_capabilities_chaining_checks; |
535 | | static int hf_openflow_v5_group_features_max_groups_all; |
536 | | static int hf_openflow_v5_group_features_max_groups_select; |
537 | | static int hf_openflow_v5_group_features_max_groups_indirect; |
538 | | static int hf_openflow_v5_group_features_max_groups_ff; |
539 | | static int hf_openflow_v5_group_features_actions_all; |
540 | | static int hf_openflow_v5_group_features_actions_all_output; |
541 | | static int hf_openflow_v5_group_features_actions_all_copy_ttl_out; |
542 | | static int hf_openflow_v5_group_features_actions_all_copy_ttl_in; |
543 | | static int hf_openflow_v5_group_features_actions_all_set_mpls_ttl; |
544 | | static int hf_openflow_v5_group_features_actions_all_dec_mpls_ttl; |
545 | | static int hf_openflow_v5_group_features_actions_all_push_vlan; |
546 | | static int hf_openflow_v5_group_features_actions_all_pop_vlan; |
547 | | static int hf_openflow_v5_group_features_actions_all_push_mpls; |
548 | | static int hf_openflow_v5_group_features_actions_all_pop_mpls; |
549 | | static int hf_openflow_v5_group_features_actions_all_set_queue; |
550 | | static int hf_openflow_v5_group_features_actions_all_group; |
551 | | static int hf_openflow_v5_group_features_actions_all_set_nw_ttl; |
552 | | static int hf_openflow_v5_group_features_actions_all_dec_nw_ttl; |
553 | | static int hf_openflow_v5_group_features_actions_all_set_field; |
554 | | static int hf_openflow_v5_group_features_actions_all_push_pbb; |
555 | | static int hf_openflow_v5_group_features_actions_all_pop_pbb; |
556 | | static int hf_openflow_v5_group_features_actions_select; |
557 | | static int hf_openflow_v5_group_features_actions_select_output; |
558 | | static int hf_openflow_v5_group_features_actions_select_copy_ttl_out; |
559 | | static int hf_openflow_v5_group_features_actions_select_copy_ttl_in; |
560 | | static int hf_openflow_v5_group_features_actions_select_set_mpls_ttl; |
561 | | static int hf_openflow_v5_group_features_actions_select_dec_mpls_ttl; |
562 | | static int hf_openflow_v5_group_features_actions_select_push_vlan; |
563 | | static int hf_openflow_v5_group_features_actions_select_pop_vlan; |
564 | | static int hf_openflow_v5_group_features_actions_select_push_mpls; |
565 | | static int hf_openflow_v5_group_features_actions_select_pop_mpls; |
566 | | static int hf_openflow_v5_group_features_actions_select_set_queue; |
567 | | static int hf_openflow_v5_group_features_actions_select_group; |
568 | | static int hf_openflow_v5_group_features_actions_select_set_nw_ttl; |
569 | | static int hf_openflow_v5_group_features_actions_select_dec_nw_ttl; |
570 | | static int hf_openflow_v5_group_features_actions_select_set_field; |
571 | | static int hf_openflow_v5_group_features_actions_select_push_pbb; |
572 | | static int hf_openflow_v5_group_features_actions_select_pop_pbb; |
573 | | static int hf_openflow_v5_group_features_actions_indirect; |
574 | | static int hf_openflow_v5_group_features_actions_indirect_output; |
575 | | static int hf_openflow_v5_group_features_actions_indirect_copy_ttl_out; |
576 | | static int hf_openflow_v5_group_features_actions_indirect_copy_ttl_in; |
577 | | static int hf_openflow_v5_group_features_actions_indirect_set_mpls_ttl; |
578 | | static int hf_openflow_v5_group_features_actions_indirect_dec_mpls_ttl; |
579 | | static int hf_openflow_v5_group_features_actions_indirect_push_vlan; |
580 | | static int hf_openflow_v5_group_features_actions_indirect_pop_vlan; |
581 | | static int hf_openflow_v5_group_features_actions_indirect_push_mpls; |
582 | | static int hf_openflow_v5_group_features_actions_indirect_pop_mpls; |
583 | | static int hf_openflow_v5_group_features_actions_indirect_set_queue; |
584 | | static int hf_openflow_v5_group_features_actions_indirect_group; |
585 | | static int hf_openflow_v5_group_features_actions_indirect_set_nw_ttl; |
586 | | static int hf_openflow_v5_group_features_actions_indirect_dec_nw_ttl; |
587 | | static int hf_openflow_v5_group_features_actions_indirect_set_field; |
588 | | static int hf_openflow_v5_group_features_actions_indirect_push_pbb; |
589 | | static int hf_openflow_v5_group_features_actions_indirect_pop_pbb; |
590 | | static int hf_openflow_v5_group_features_actions_ff; |
591 | | static int hf_openflow_v5_group_features_actions_ff_output; |
592 | | static int hf_openflow_v5_group_features_actions_ff_copy_ttl_out; |
593 | | static int hf_openflow_v5_group_features_actions_ff_copy_ttl_in; |
594 | | static int hf_openflow_v5_group_features_actions_ff_set_mpls_ttl; |
595 | | static int hf_openflow_v5_group_features_actions_ff_dec_mpls_ttl; |
596 | | static int hf_openflow_v5_group_features_actions_ff_push_vlan; |
597 | | static int hf_openflow_v5_group_features_actions_ff_pop_vlan; |
598 | | static int hf_openflow_v5_group_features_actions_ff_push_mpls; |
599 | | static int hf_openflow_v5_group_features_actions_ff_pop_mpls; |
600 | | static int hf_openflow_v5_group_features_actions_ff_set_queue; |
601 | | static int hf_openflow_v5_group_features_actions_ff_group; |
602 | | static int hf_openflow_v5_group_features_actions_ff_set_nw_ttl; |
603 | | static int hf_openflow_v5_group_features_actions_ff_dec_nw_ttl; |
604 | | static int hf_openflow_v5_group_features_actions_ff_set_field; |
605 | | static int hf_openflow_v5_group_features_actions_ff_push_pbb; |
606 | | static int hf_openflow_v5_group_features_actions_ff_pop_pbb; |
607 | | static int hf_openflow_v5_meter_band_stats_packet_band_count; |
608 | | static int hf_openflow_v5_meter_band_stats_byte_band_count; |
609 | | static int hf_openflow_v5_meter_stats_meter_id; |
610 | | static int hf_openflow_v5_meter_stats_len; |
611 | | static int hf_openflow_v5_meter_stats_pad; |
612 | | static int hf_openflow_v5_meter_stats_flow_count; |
613 | | static int hf_openflow_v5_meter_stats_packet_in_count; |
614 | | static int hf_openflow_v5_meter_stats_byte_in_count; |
615 | | static int hf_openflow_v5_meter_stats_duration_sec; |
616 | | static int hf_openflow_v5_meter_stats_duration_nsec; |
617 | | static int hf_openflow_v5_meter_config_len; |
618 | | static int hf_openflow_v5_meter_config_flags; |
619 | | static int hf_openflow_v5_meter_config_flags_kbps; |
620 | | static int hf_openflow_v5_meter_config_flags_pktps; |
621 | | static int hf_openflow_v5_meter_config_flags_burst; |
622 | | static int hf_openflow_v5_meter_config_flags_stats; |
623 | | static int hf_openflow_v5_meter_config_meter_id; |
624 | | static int hf_openflow_v5_meter_features_max_meter; |
625 | | static int hf_openflow_v5_meter_features_band_types; |
626 | | static int hf_openflow_v5_meter_features_band_types_drop; |
627 | | static int hf_openflow_v5_meter_features_band_types_dscp_remark; |
628 | | static int hf_openflow_v5_meter_features_capabilities; |
629 | | static int hf_openflow_v5_meter_features_capabilities_kbps; |
630 | | static int hf_openflow_v5_meter_features_capabilities_pktps; |
631 | | static int hf_openflow_v5_meter_features_capabilities_burst; |
632 | | static int hf_openflow_v5_meter_features_capabilities_stats; |
633 | | static int hf_openflow_v5_meter_features_max_bands; |
634 | | static int hf_openflow_v5_meter_features_max_color; |
635 | | static int hf_openflow_v5_meter_features_pad; |
636 | | static int hf_openflow_v5_flow_update_length; |
637 | | static int hf_openflow_v5_flow_update_event; |
638 | | static int hf_openflow_v5_flow_update_full_table_id; |
639 | | static int hf_openflow_v5_flow_update_full_reason; |
640 | | static int hf_openflow_v5_flow_update_full_zero; |
641 | | static int hf_openflow_v5_flow_update_full_idle_timeout; |
642 | | static int hf_openflow_v5_flow_update_full_hard_timeout; |
643 | | static int hf_openflow_v5_flow_update_full_priority; |
644 | | static int hf_openflow_v5_flow_update_full_zeros; |
645 | | static int hf_openflow_v5_flow_update_full_cookie; |
646 | | static int hf_openflow_v5_flow_update_abbrev_xid; |
647 | | static int hf_openflow_v5_flow_update_paused_zeros; |
648 | | static int hf_openflow_v5_multipart_reply_type; |
649 | | static int hf_openflow_v5_multipart_reply_flags; |
650 | | static int hf_openflow_v5_multipart_reply_flags_more; |
651 | | static int hf_openflow_v5_multipart_reply_pad; |
652 | | static int hf_openflow_v5_multipart_reply_experimenter_experimenter; |
653 | | static int hf_openflow_v5_multipart_reply_experimenter_exp_type; |
654 | | static int hf_openflow_v5_table_desc_length; |
655 | | static int hf_openflow_v5_table_desc_table_id; |
656 | | static int hf_openflow_v5_table_desc_pad; |
657 | | static int hf_openflow_v5_table_desc_config; |
658 | | static int hf_openflow_v5_table_desc_config_eviction; |
659 | | static int hf_openflow_v5_table_desc_config_vacancy_events; |
660 | | static int hf_openflow_v5_queue_desc_port_no; |
661 | | static int hf_openflow_v5_queue_desc_queue_id; |
662 | | static int hf_openflow_v5_queue_desc_len; |
663 | | static int hf_openflow_v5_queue_desc_pad; |
664 | | static int hf_openflow_v5_queue_desc_prop_property; |
665 | | static int hf_openflow_v5_queue_desc_prop_len; |
666 | | static int hf_openflow_v5_queue_desc_prop_pad; |
667 | | static int hf_openflow_v5_queue_desc_prop_min_rate_rate; |
668 | | static int hf_openflow_v5_queue_desc_prop_min_rate_pad; |
669 | | static int hf_openflow_v5_queue_desc_prop_max_rate_rate; |
670 | | static int hf_openflow_v5_queue_desc_prop_max_rate_pad; |
671 | | static int hf_openflow_v5_queue_desc_prop_experimenter_experimenter; |
672 | | static int hf_openflow_v5_queue_desc_prop_experimenter_exp_type; |
673 | | static int hf_openflow_v5_role_request_role; |
674 | | static int hf_openflow_v5_role_request_pad; |
675 | | static int hf_openflow_v5_role_request_generation_id; |
676 | | static int hf_openflow_v5_role_reply_role; |
677 | | static int hf_openflow_v5_role_reply_pad; |
678 | | static int hf_openflow_v5_role_reply_generation_id; |
679 | | static int hf_openflow_v5_async_config_prop_type; |
680 | | static int hf_openflow_v5_async_config_prop_length; |
681 | | static int hf_openflow_v5_async_config_prop_reason_packet_in_mask; |
682 | | static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_table_miss; |
683 | | static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_apply_action; |
684 | | static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_invalid_ttl; |
685 | | static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_action_set; |
686 | | static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_group; |
687 | | static int hf_openflow_v5_async_config_prop_reason_packet_in_mask_packet_out; |
688 | | static int hf_openflow_v5_async_config_prop_reason_port_status_mask; |
689 | | static int hf_openflow_v5_async_config_prop_reason_port_status_mask_add; |
690 | | static int hf_openflow_v5_async_config_prop_reason_port_status_mask_delete; |
691 | | static int hf_openflow_v5_async_config_prop_reason_port_status_mask_modify; |
692 | | static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask; |
693 | | static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_idle_timeout; |
694 | | static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_hard_timeout; |
695 | | static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_delete; |
696 | | static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_group_delete; |
697 | | static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_meter_delete; |
698 | | static int hf_openflow_v5_async_config_prop_reason_flow_removed_mask_eviction; |
699 | | static int hf_openflow_v5_async_config_prop_reason_role_status_mask; |
700 | | static int hf_openflow_v5_async_config_prop_reason_role_status_mask_master_request; |
701 | | static int hf_openflow_v5_async_config_prop_reason_role_status_mask_config; |
702 | | static int hf_openflow_v5_async_config_prop_reason_role_status_mask_experimenter; |
703 | | static int hf_openflow_v5_async_config_prop_reason_table_status_mask; |
704 | | static int hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_down; |
705 | | static int hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_up; |
706 | | static int hf_openflow_v5_async_config_prop_reason_requestforward_mask; |
707 | | static int hf_openflow_v5_async_config_prop_reason_requestforward_mask_group_mod; |
708 | | static int hf_openflow_v5_async_config_prop_reason_requestforward_mask_meter_mod; |
709 | | static int hf_openflow_v5_async_config_prop_experimenter_experimenter; |
710 | | static int hf_openflow_v5_async_config_prop_experimenter_exp_type; |
711 | | static int hf_openflow_v5_metermod_command; |
712 | | static int hf_openflow_v5_metermod_flags; |
713 | | static int hf_openflow_v5_metermod_flags_kbps; |
714 | | static int hf_openflow_v5_metermod_flags_pktps; |
715 | | static int hf_openflow_v5_metermod_flags_burst; |
716 | | static int hf_openflow_v5_metermod_flags_stats; |
717 | | static int hf_openflow_v5_metermod_meter_id; |
718 | | static int hf_openflow_v5_role_status_role; |
719 | | static int hf_openflow_v5_role_status_reason; |
720 | | static int hf_openflow_v5_role_status_pad; |
721 | | static int hf_openflow_v5_role_status_generation_id; |
722 | | static int hf_openflow_v5_table_status_reason; |
723 | | static int hf_openflow_v5_table_status_pad; |
724 | | static int hf_openflow_v5_bundle_control_bundle_id; |
725 | | static int hf_openflow_v5_bundle_control_type; |
726 | | static int hf_openflow_v5_bundle_control_flags; |
727 | | static int hf_openflow_v5_bundle_control_flags_atomic; |
728 | | static int hf_openflow_v5_bundle_control_flags_ordered; |
729 | | static int hf_openflow_v5_bundle_prop_type; |
730 | | static int hf_openflow_v5_bundle_prop_length; |
731 | | static int hf_openflow_v5_bundle_prop_experimenter_experimenter; |
732 | | static int hf_openflow_v5_bundle_prop_experimenter_exp_type; |
733 | | static int hf_openflow_v5_bundle_add_bundle_id; |
734 | | static int hf_openflow_v5_bundle_add_pad; |
735 | | static int hf_openflow_v5_bundle_add_flags; |
736 | | static int hf_openflow_v5_bundle_add_flags_atomic; |
737 | | static int hf_openflow_v5_bundle_add_flags_ordered; |
738 | | |
739 | | static int ett_openflow_v5; |
740 | | static int ett_openflow_v5_flowmod_flags; |
741 | | static int ett_openflow_v5_bucket; |
742 | | static int ett_openflow_v5_oxm; |
743 | | static int ett_openflow_v5_match; |
744 | | static int ett_openflow_v5_action; |
745 | | static int ett_openflow_v5_instruction; |
746 | | static int ett_openflow_v5_port_desc_prop; |
747 | | static int ett_openflow_v5_port_desc_prop_ethernet_current; |
748 | | static int ett_openflow_v5_port_desc_prop_ethernet_advertised; |
749 | | static int ett_openflow_v5_port_desc_prop_ethernet_supported; |
750 | | static int ett_openflow_v5_port_desc_prop_ethernet_peer; |
751 | | static int ett_openflow_v5_port_desc_prop_optical_supported; |
752 | | static int ett_openflow_v5_port_stats_prop; |
753 | | static int ett_openflow_v5_port_stats_prop_optical_flags; |
754 | | static int ett_openflow_v5_port; |
755 | | static int ett_openflow_v5_port_config; |
756 | | static int ett_openflow_v5_port_state; |
757 | | static int ett_openflow_v5_meter_band; |
758 | | static int ett_openflow_v5_hello_element; |
759 | | static int ett_openflow_v5_error_data; |
760 | | static int ett_openflow_v5_switch_features_capabilities; |
761 | | static int ett_openflow_v5_switch_config_flags; |
762 | | static int ett_openflow_v5_packet_in_data; |
763 | | static int ett_openflow_v5_packet_out_data; |
764 | | static int ett_openflow_v5_portmod_prop; |
765 | | static int ett_openflow_v5_portmod_prop_ethernet_advertise; |
766 | | static int ett_openflow_v5_portmod_prop_optical_configure; |
767 | | static int ett_openflow_v5_portmod_config; |
768 | | static int ett_openflow_v5_portmod_mask; |
769 | | static int ett_openflow_v5_tablemod_config; |
770 | | static int ett_openflow_v5_tablemod_prop; |
771 | | static int ett_openflow_v5_tablemod_prop_eviction_flags; |
772 | | static int ett_openflow_v5_table_features; |
773 | | static int ett_openflow_v5_table_features_capabilities; |
774 | | static int ett_openflow_v5_table_feature_prop; |
775 | | static int ett_openflow_v5_table_feature_prop_instruction_id; |
776 | | static int ett_openflow_v5_table_feature_prop_action_id; |
777 | | static int ett_openflow_v5_table_feature_prop_oxm_id; |
778 | | static int ett_openflow_v5_flow_monitor_request_flags; |
779 | | static int ett_openflow_v5_multipart_request_flags; |
780 | | static int ett_openflow_v5_flow_stats; |
781 | | static int ett_openflow_v5_flow_stats_flags; |
782 | | static int ett_openflow_v5_table_stats; |
783 | | static int ett_openflow_v5_port_stats; |
784 | | static int ett_openflow_v5_queue_stats; |
785 | | static int ett_openflow_v5_queue_stats_prop; |
786 | | static int ett_openflow_v5_bucket_counter; |
787 | | static int ett_openflow_v5_group_stats; |
788 | | static int ett_openflow_v5_group_desc; |
789 | | static int ett_openflow_v5_group_features_types; |
790 | | static int ett_openflow_v5_group_features_capabilities; |
791 | | static int ett_openflow_v5_group_features_actions_all; |
792 | | static int ett_openflow_v5_group_features_actions_select; |
793 | | static int ett_openflow_v5_group_features_actions_indirect; |
794 | | static int ett_openflow_v5_group_features_actions_ff; |
795 | | static int ett_openflow_v5_meter_band_stats; |
796 | | static int ett_openflow_v5_meter_stats; |
797 | | static int ett_openflow_v5_meter_config; |
798 | | static int ett_openflow_v5_meter_config_flags; |
799 | | static int ett_openflow_v5_meter_features_band_types; |
800 | | static int ett_openflow_v5_meter_features_capabilities; |
801 | | static int ett_openflow_v5_flow_update; |
802 | | static int ett_openflow_v5_multipart_reply_flags; |
803 | | static int ett_openflow_v5_table_desc; |
804 | | static int ett_openflow_v5_table_desc_config; |
805 | | static int ett_openflow_v5_queue_desc; |
806 | | static int ett_openflow_v5_queue_desc_prop; |
807 | | static int ett_openflow_v5_async_config_prop; |
808 | | static int ett_openflow_v5_async_config_prop_reason_packet_in_mask; |
809 | | static int ett_openflow_v5_async_config_prop_reason_port_status_mask; |
810 | | static int ett_openflow_v5_async_config_prop_reason_flow_removed_mask; |
811 | | static int ett_openflow_v5_async_config_prop_reason_role_status_mask; |
812 | | static int ett_openflow_v5_async_config_prop_reason_table_status_mask; |
813 | | static int ett_openflow_v5_async_config_prop_reason_requestforward_mask; |
814 | | static int ett_openflow_v5_metermod_flags; |
815 | | static int ett_openflow_v5_requestforward_request; |
816 | | static int ett_openflow_v5_bundle_control_flags; |
817 | | static int ett_openflow_v5_bundle_prop; |
818 | | static int ett_openflow_v5_bundle_add_flags; |
819 | | static int ett_openflow_v5_bundle_add_message; |
820 | | |
821 | | static expert_field ei_openflow_v5_match_undecoded; |
822 | | static expert_field ei_openflow_v5_oxm_undecoded; |
823 | | static expert_field ei_openflow_v5_action_undecoded; |
824 | | static expert_field ei_openflow_v5_instruction_undecoded; |
825 | | static expert_field ei_openflow_v5_port_desc_prop_undecoded; |
826 | | static expert_field ei_openflow_v5_port_stats_prop_undecoded; |
827 | | static expert_field ei_openflow_v5_meter_band_undecoded; |
828 | | static expert_field ei_openflow_v5_hello_element_undecoded; |
829 | | static expert_field ei_openflow_v5_hello_element_length_bad; |
830 | | static expert_field ei_openflow_v5_error_undecoded; |
831 | | static expert_field ei_openflow_v5_experimenter_undecoded; |
832 | | static expert_field ei_openflow_v5_portmod_prop_undecoded; |
833 | | static expert_field ei_openflow_v5_tablemod_prop_undecoded; |
834 | | static expert_field ei_openflow_v5_table_feature_prop_undecoded; |
835 | | static expert_field ei_openflow_v5_multipart_request_undecoded; |
836 | | static expert_field ei_openflow_v5_queue_stats_prop_undecoded; |
837 | | static expert_field ei_openflow_v5_flow_update_undecoded; |
838 | | static expert_field ei_openflow_v5_multipart_reply_undecoded; |
839 | | static expert_field ei_openflow_v5_queue_desc_prop_undecoded; |
840 | | static expert_field ei_openflow_v5_async_config_prop_undecoded; |
841 | | static expert_field ei_openflow_v5_bundle_prop_undecoded; |
842 | | static expert_field ei_openflow_v5_message_undecoded; |
843 | | static expert_field ei_openflow_v5_length_too_short; |
844 | | |
845 | | static const value_string openflow_v5_version_values[] = { |
846 | | { 0x05, "1.4" }, |
847 | | { 0, NULL } |
848 | | }; |
849 | | |
850 | 6 | #define OFPT_HELLO 0 |
851 | 1 | #define OFPT_ERROR 1 |
852 | 0 | #define OFPT_ECHO_REQUEST 2 |
853 | 0 | #define OFPT_ECHO_REPLY 3 |
854 | 1 | #define OFPT_EXPERIMENTER 4 |
855 | 1 | #define OFPT_FEATURES_REQUEST 5 |
856 | 1 | #define OFPT_FEATURES_REPLY 6 |
857 | 1 | #define OFPT_GET_CONFIG_REQUEST 7 |
858 | 1 | #define OFPT_GET_CONFIG_REPLY 8 |
859 | 1 | #define OFPT_SET_CONFIG 9 |
860 | 0 | #define OFPT_PACKET_IN 10 |
861 | 0 | #define OFPT_FLOW_REMOVED 11 |
862 | 0 | #define OFPT_PORT_STATUS 12 |
863 | 0 | #define OFPT_PACKET_OUT 13 |
864 | 2 | #define OFPT_FLOW_MOD 14 |
865 | 0 | #define OFPT_GROUP_MOD 15 |
866 | 7 | #define OFPT_PORT_MOD 16 |
867 | 0 | #define OFPT_TABLE_MOD 17 |
868 | 9 | #define OFPT_MULTIPART_REQUEST 18 |
869 | 162 | #define OFPT_MULTIPART_REPLY 19 |
870 | 0 | #define OFPT_BARRIER_REQUEST 20 |
871 | 0 | #define OFPT_BARRIER_REPLY 21 |
872 | 0 | #define OFPT_ROLE_REQUEST 24 |
873 | 0 | #define OFPT_ROLE_REPLY 25 |
874 | 0 | #define OFPT_GET_ASYNC_REQUEST 26 |
875 | 11 | #define OFPT_GET_ASYNC_REPLY 27 |
876 | 11 | #define OFPT_SET_ASYNC 28 |
877 | 0 | #define OFPT_METER_MOD 29 |
878 | 0 | #define OFPT_ROLE_STATUS 30 |
879 | 0 | #define OFPT_TABLE_STATUS 31 |
880 | 0 | #define OFPT_REQUESTFORWARD 32 |
881 | 0 | #define OFPT_BUNDLE_CONTROL 33 |
882 | 0 | #define OFPT_BUNDLE_ADD_MESSAGE 34 |
883 | | static const value_string openflow_v5_type_values[] = { |
884 | | { OFPT_HELLO, "OFPT_HELLO" }, |
885 | | { OFPT_ERROR, "OFPT_ERROR" }, |
886 | | { OFPT_ECHO_REQUEST, "OFPT_ECHO_REQUEST" }, |
887 | | { OFPT_ECHO_REPLY, "OFPT_ECHO_REPLY" }, |
888 | | { OFPT_EXPERIMENTER, "OFPT_EXPERIMENTER" }, |
889 | | { OFPT_FEATURES_REQUEST, "OFPT_FEATURES_REQUEST" }, |
890 | | { OFPT_FEATURES_REPLY, "OFPT_FEATURES_REPLY" }, |
891 | | { OFPT_GET_CONFIG_REQUEST, "OFPT_GET_CONFIG_REQUEST" }, |
892 | | { OFPT_GET_CONFIG_REPLY, "OFPT_GET_CONFIG_REPLY" }, |
893 | | { OFPT_SET_CONFIG, "OFPT_SET_CONFIG" }, |
894 | | { OFPT_PACKET_IN, "OFPT_PACKET_IN" }, |
895 | | { OFPT_FLOW_REMOVED, "OFPT_FLOW_REMOVED" }, |
896 | | { OFPT_PORT_STATUS, "OFPT_PORT_STATUS" }, |
897 | | { OFPT_PACKET_OUT, "OFPT_PACKET_OUT" }, |
898 | | { OFPT_FLOW_MOD, "OFPT_FLOW_MOD" }, |
899 | | { OFPT_GROUP_MOD, "OFPT_GROUP_MOD" }, |
900 | | { OFPT_PORT_MOD, "OFPT_PORT_MOD" }, |
901 | | { OFPT_TABLE_MOD, "OFPT_TABLE_MOD" }, |
902 | | { OFPT_MULTIPART_REQUEST, "OFPT_MULTIPART_REQUEST" }, |
903 | | { OFPT_MULTIPART_REPLY, "OFPT_MULTIPART_REPLY" }, |
904 | | { OFPT_BARRIER_REQUEST, "OFPT_BARRIER_REQUEST" }, |
905 | | { OFPT_BARRIER_REPLY, "OFPT_BARRIER_REPLY" }, |
906 | | { OFPT_ROLE_REQUEST, "OFPT_ROLE_REQUEST" }, |
907 | | { OFPT_ROLE_REPLY, "OFPT_ROLE_REPLY" }, |
908 | | { OFPT_GET_ASYNC_REQUEST, "OFPT_GET_ASYNC_REQUEST" }, |
909 | | { OFPT_GET_ASYNC_REPLY, "OFPT_GET_ASYNC_REPLY" }, |
910 | | { OFPT_SET_ASYNC, "OFPT_SET_ASYNC" }, |
911 | | { OFPT_METER_MOD, "OFPT_METER_MOD" }, |
912 | | { OFPT_ROLE_STATUS, "OFPT_ROLE_STATUS" }, |
913 | | { OFPT_TABLE_STATUS, "OFPT_TABLE_STATUS" }, |
914 | | { OFPT_REQUESTFORWARD, "OFPT_REQUESTFORWARD" }, |
915 | | { OFPT_BUNDLE_CONTROL, "OFPT_BUNDLE_CONTROL" }, |
916 | | { OFPT_BUNDLE_ADD_MESSAGE, "OFPT_BUNDLE_ADD_MESSAGE" }, |
917 | | { 0, NULL } |
918 | | }; |
919 | | static value_string_ext openflow_v5_type_values_ext = VALUE_STRING_EXT_INIT(openflow_v5_type_values); |
920 | | |
921 | | static int |
922 | | dissect_openflow_header_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
923 | 204 | { |
924 | | /* uint8_t version; */ |
925 | 204 | proto_tree_add_item(tree, hf_openflow_v5_version, tvb, offset, 1, ENC_BIG_ENDIAN); |
926 | 204 | offset++; |
927 | | |
928 | | /* uint8_t type; */ |
929 | 204 | proto_tree_add_item(tree, hf_openflow_v5_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
930 | 204 | offset++; |
931 | | |
932 | | /* uint16_t length; */ |
933 | 204 | proto_tree_add_item(tree, hf_openflow_v5_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
934 | 204 | offset+=2; |
935 | | |
936 | | /* uint32_t xid; */ |
937 | 204 | proto_tree_add_item(tree, hf_openflow_v5_xid, tvb, offset, 4, ENC_BIG_ENDIAN); |
938 | 204 | offset+=4; |
939 | | |
940 | 204 | return offset; |
941 | 204 | } |
942 | | |
943 | | #define OFPP_MAX 0xffffff00 /* Last usable port number. */ |
944 | | static const value_string openflow_v5_port_reserved_values[] = { |
945 | | { 0xfffffff8, "OFPP_IN_PORT" }, |
946 | | { 0xfffffff9, "OFPP_TABLE" }, |
947 | | { 0xfffffffa, "OFPP_NORMAL" }, |
948 | | { 0xfffffffb, "OFPP_FLOOD" }, |
949 | | { 0xfffffffc, "OFPP_ALL" }, |
950 | | { 0xfffffffd, "OFPP_CONTROLLER" }, |
951 | | { 0xfffffffe, "OFPP_LOCAL" }, |
952 | | { 0xffffffff, "OFPP_ANY" }, |
953 | | { 0, NULL } |
954 | | }; |
955 | | |
956 | | #define OFPG_MAX 0xffffff00 /* Last usable group number. */ |
957 | | static const value_string openflow_v5_group_reserved_values[] = { |
958 | | { 0xfffffffc, "OFPG_ALL" }, |
959 | | { 0xffffffff, "OFPG_ANY" }, |
960 | | { 0, NULL } |
961 | | }; |
962 | | |
963 | | #define OFPTT_MAX 254 /* Last usable table number. */ |
964 | | static const value_string openflow_v5_table_reserved_values[] = { |
965 | | { 255, "OFPTT_ALL"}, |
966 | | { 0, NULL} |
967 | | }; |
968 | | |
969 | | |
970 | | #define OFP_NO_BUFFER 0xffffffff /* No buffering. */ |
971 | | static const value_string openflow_v5_buffer_reserved_values[] = { |
972 | | { 0xffffffff, "OFP_NO_BUFFER" }, |
973 | | { 0, NULL} |
974 | | }; |
975 | | |
976 | | #define OFPXMC_NXM_0 0x0000 /* Backward compatibility with NXM */ |
977 | | #define OFPXMC_NXM_1 0x0001 /* Backward compatibility with NXM */ |
978 | 548 | #define OFPXMC_OPENFLOW_BASIC 0x8000 /* Basic class for OpenFlow */ |
979 | 203 | #define OFPXMC_EXPERIMENTER 0xFFFF /* Experimenter class */ |
980 | | static const value_string openflow_v5_oxm_class_values[] = { |
981 | | { 0x0000, "OFPXMC_NMX_0" }, |
982 | | { 0x0001, "OFPXMC_NXM_1" }, |
983 | | { 0x8000, "OFPXMC_OPENFLOW_BASIC" }, |
984 | | { 0xFFFF, "OFPXMC_EXPERIMENTER" }, |
985 | | { 0, NULL} |
986 | | }; |
987 | | |
988 | 0 | #define OFPXMT_OFB_IN_PORT 0 |
989 | 0 | #define OFPXMT_OFB_IN_PHY_PORT 1 |
990 | | #define OFPXMT_OFB_METADATA 2 |
991 | 0 | #define OFPXMT_OFB_ETH_DST 3 |
992 | 0 | #define OFPXMT_OFB_ETH_SRC 4 |
993 | 0 | #define OFPXMT_OFB_ETH_TYPE 5 |
994 | 0 | #define OFPXMT_OFB_VLAN_VID 6 |
995 | | #define OFPXMT_OFB_VLAN_PCP 7 |
996 | | #define OFPXMT_OFB_IP_DSCP 8 |
997 | | #define OFPXMT_OFB_IP_ECN 9 |
998 | 0 | #define OFPXMT_OFB_IP_PROTO 10 |
999 | 0 | #define OFPXMT_OFB_IPV4_SRC 11 |
1000 | 0 | #define OFPXMT_OFB_IPV4_DST 12 |
1001 | 0 | #define OFPXMT_OFB_TCP_SRC 13 |
1002 | 0 | #define OFPXMT_OFB_TCP_DST 14 |
1003 | 0 | #define OFPXMT_OFB_UDP_SRC 15 |
1004 | 0 | #define OFPXMT_OFB_UDP_DST 16 |
1005 | 0 | #define OFPXMT_OFB_SCTP_SRC 17 |
1006 | 0 | #define OFPXMT_OFB_SCTP_DST 18 |
1007 | | #define OFPXMT_OFB_ICMPV4_TYPE 19 |
1008 | | #define OFPXMT_OFB_ICMPV4_CODE 20 |
1009 | | #define OFPXMT_OFB_ARP_OP 21 |
1010 | 0 | #define OFPXMT_OFB_ARP_SPA 22 |
1011 | 0 | #define OFPXMT_OFB_ARP_TPA 23 |
1012 | 0 | #define OFPXMT_OFB_ARP_SHA 24 |
1013 | 0 | #define OFPXMT_OFB_ARP_THA 25 |
1014 | 0 | #define OFPXMT_OFB_IPV6_SRC 26 |
1015 | 0 | #define OFPXMT_OFB_IPV6_DST 27 |
1016 | | #define OFPXMT_OFB_IPV6_FLABEL 28 |
1017 | | #define OFPXMT_OFB_ICMPV6_TYPE 29 |
1018 | | #define OFPXMT_OFB_ICMPV6_CODE 30 |
1019 | | #define OFPXMT_OFB_IPV6_ND_TARGET 31 |
1020 | 0 | #define OFPXMT_OFB_IPV6_ND_SLL 32 |
1021 | 0 | #define OFPXMT_OFB_IPV6_ND_TLL 33 |
1022 | 0 | #define OFPXMT_OFB_MPLS_LABEL 34 |
1023 | | #define OFPXMT_OFB_MPLS_TC 35 |
1024 | | #define OFPXMT_OFP_MPLS_BOS 36 |
1025 | | #define OFPXMT_OFB_PBB_ISID 37 |
1026 | | #define OFPXMT_OFB_TUNNEL_ID 38 |
1027 | | #define OFPXMT_OFB_IPV6_EXTHDR 39 |
1028 | | #define OFPXMT_OFB_PBB_UCA 41 |
1029 | | static const value_string openflow_v5_oxm_basic_field_values[] = { |
1030 | | { 0, "OFPXMT_OFB_IN_PORT" }, |
1031 | | { 1, "OFPXMT_OFB_IN_PHY_PORT" }, |
1032 | | { 2, "OFPXMT_OFB_METADATA" }, |
1033 | | { 3, "OFPXMT_OFB_ETH_DST" }, |
1034 | | { 4, "OFPXMT_OFB_ETH_SRC" }, |
1035 | | { 5, "OFPXMT_OFB_ETH_TYPE" }, |
1036 | | { 6, "OFPXMT_OFB_VLAN_VID" }, |
1037 | | { 7, "OFPXMT_OFB_VLAN_PCP" }, |
1038 | | { 8, "OFPXMT_OFB_IP_DSCP" }, |
1039 | | { 9, "OFPXMT_OFB_IP_ECN" }, |
1040 | | { 10, "OFPXMT_OFB_IP_PROTO" }, |
1041 | | { 11, "OFPXMT_OFB_IPV4_SRC" }, |
1042 | | { 12, "OFPXMT_OFB_IPV4_DST" }, |
1043 | | { 13, "OFPXMT_OFB_TCP_SRC" }, |
1044 | | { 14, "OFPXMT_OFB_TCP_DST" }, |
1045 | | { 15, "OFPXMT_OFB_UDP_SRC" }, |
1046 | | { 16, "OFPXMT_OFB_UDP_DST" }, |
1047 | | { 17, "OFPXMT_OFB_SCTP_SRC" }, |
1048 | | { 18, "OFPXMT_OFB_SCTP_DST" }, |
1049 | | { 19, "OFPXMT_OFB_ICMPV4_TYPE" }, |
1050 | | { 20, "OFPXMT_OFB_ICMPV4_CODE" }, |
1051 | | { 21, "OFPXMT_OFB_ARP_OP" }, |
1052 | | { 22, "OFPXMT_OFB_ARP_SPA" }, |
1053 | | { 23, "OFPXMT_OFB_ARP_TPA" }, |
1054 | | { 24, "OFPXMT_OFB_ARP_SHA" }, |
1055 | | { 25, "OFPXMT_OFB_ARP_THA" }, |
1056 | | { 26, "OFPXMT_OFB_IPV6_SRC" }, |
1057 | | { 27, "OFPXMT_OFB_IPV6_DST" }, |
1058 | | { 28, "OFPXMT_OFB_IPV6_FLABEL" }, |
1059 | | { 29, "OFPXMT_OFB_ICMPV6_TYPE" }, |
1060 | | { 30, "OFPXMT_OFB_ICMPV6_CODE" }, |
1061 | | { 31, "OFPXMT_OFB_IPV6_ND_TARGET" }, |
1062 | | { 32, "OFPXMT_OFB_IPV6_ND_SLL" }, |
1063 | | { 33, "OFPXMT_OFB_IPV6_ND_TLL" }, |
1064 | | { 34, "OFPXMT_OFB_MPLS_LABEL" }, |
1065 | | { 35, "OFPXMT_OFB_MPLS_TC" }, |
1066 | | { 36, "OFPXMT_OFP_MPLS_BOS" }, |
1067 | | { 37, "OFPXMT_OFB_PBB_ISID" }, |
1068 | | { 38, "OFPXMT_OFB_TUNNEL_ID" }, |
1069 | | { 39, "OFPXMT_OFB_IPV6_EXTHDR" }, |
1070 | | { 40, "UNASSIGNED" }, /* include to allow direct lookup */ |
1071 | | { 41, "OFPXMT_OFB_PBB_UCA" }, |
1072 | | { 0, NULL } |
1073 | | }; |
1074 | | static value_string_ext openflow_v5_oxm_basic_field_values_ext = VALUE_STRING_EXT_INIT(openflow_v5_oxm_basic_field_values); |
1075 | | |
1076 | 203 | #define OXM_FIELD_MASK 0xfe |
1077 | 203 | #define OXM_FIELD_OFFSET 1 |
1078 | 203 | #define OXM_HM_MASK 0x01 |
1079 | | static int |
1080 | | dissect_openflow_oxm_header_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) |
1081 | 345 | { |
1082 | 345 | uint16_t oxm_class; |
1083 | | |
1084 | | /* oxm_class */ |
1085 | 345 | proto_tree_add_item_ret_uint16(tree, hf_openflow_v5_oxm_class, tvb, offset, 2, ENC_BIG_ENDIAN, &oxm_class); |
1086 | 345 | offset+=2; |
1087 | | |
1088 | | /* oxm_field */ |
1089 | 345 | if (oxm_class == OFPXMC_OPENFLOW_BASIC) { |
1090 | 0 | proto_tree_add_bits_item(tree, hf_openflow_v5_oxm_field_basic, tvb, (offset * 8), 7, ENC_NA); |
1091 | 345 | } else { |
1092 | 345 | proto_tree_add_bits_item(tree, hf_openflow_v5_oxm_field, tvb, (offset * 8), 7, ENC_NA); |
1093 | 345 | } |
1094 | | |
1095 | | /* oxm_hm */ |
1096 | 345 | proto_tree_add_bits_item(tree, hf_openflow_v5_oxm_hm, tvb, (offset * 8) + 7, 1, ENC_NA); |
1097 | 345 | offset+=1; |
1098 | | |
1099 | | /* oxm_length */ |
1100 | 345 | proto_tree_add_item(tree, hf_openflow_v5_oxm_length, tvb, offset, 1, ENC_BIG_ENDIAN); |
1101 | 345 | offset+=1; |
1102 | | |
1103 | 345 | return offset; |
1104 | 345 | } |
1105 | | |
1106 | | |
1107 | 16 | #define OFPVID_PRESENT 0x1000 |
1108 | | static int |
1109 | | dissect_openflow_oxm_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) |
1110 | 203 | { |
1111 | 203 | proto_tree *oxm_tree; |
1112 | 203 | uint16_t oxm_class; |
1113 | 203 | uint16_t oxm_end; |
1114 | 203 | uint8_t oxm_field_hm; |
1115 | 203 | uint8_t oxm_hm; |
1116 | 203 | uint8_t oxm_field; |
1117 | 203 | uint8_t oxm_length; |
1118 | 203 | uint8_t field_length; |
1119 | | |
1120 | 203 | oxm_class = tvb_get_ntohs(tvb, offset); |
1121 | 203 | oxm_field_hm = tvb_get_uint8(tvb, offset + 2); |
1122 | 203 | oxm_length = tvb_get_uint8(tvb, offset + 3); |
1123 | 203 | oxm_end = offset + 4 + oxm_length; |
1124 | | |
1125 | 203 | oxm_field = (oxm_field_hm & OXM_FIELD_MASK) >> OXM_FIELD_OFFSET; |
1126 | 203 | oxm_hm = oxm_field_hm & OXM_HM_MASK; |
1127 | 203 | field_length = (oxm_hm == 0) ? oxm_length : (oxm_length / 2); |
1128 | | |
1129 | 203 | oxm_tree = proto_tree_add_subtree(tree, tvb, offset, oxm_length + 4, ett_openflow_v5_oxm, NULL, "OXM field"); |
1130 | | |
1131 | 203 | offset = dissect_openflow_oxm_header_v5(tvb, pinfo, oxm_tree, offset); |
1132 | | |
1133 | 203 | if (oxm_class == OFPXMC_OPENFLOW_BASIC) { |
1134 | 0 | switch(oxm_field) { |
1135 | 0 | case OFPXMT_OFB_IN_PORT: |
1136 | 0 | case OFPXMT_OFB_IN_PHY_PORT: |
1137 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_uint32, tvb, offset, 4, ENC_BIG_ENDIAN); |
1138 | 0 | offset+=4; |
1139 | 0 | break; |
1140 | | |
1141 | 0 | case OFPXMT_OFB_ETH_DST: |
1142 | 0 | case OFPXMT_OFB_ETH_SRC: |
1143 | 0 | case OFPXMT_OFB_ARP_SHA: |
1144 | 0 | case OFPXMT_OFB_ARP_THA: |
1145 | 0 | case OFPXMT_OFB_IPV6_ND_SLL: /*The source link-layer address option in an IPv6 Neighbor Discovery message */ |
1146 | 0 | case OFPXMT_OFB_IPV6_ND_TLL: /*The target link-layer address option in an IPv6 Neighbor Discovery message */ |
1147 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_etheraddr, tvb, offset, 6, ENC_NA); |
1148 | 0 | offset+=6; |
1149 | 0 | if (oxm_hm) { |
1150 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_mask_etheraddr, tvb, offset, 6, ENC_NA); |
1151 | 0 | offset+=6; |
1152 | 0 | } |
1153 | 0 | break; |
1154 | | |
1155 | 0 | case OFPXMT_OFB_ETH_TYPE: |
1156 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_ethertype, tvb, offset, 2, ENC_BIG_ENDIAN); |
1157 | 0 | offset+=2; |
1158 | 0 | break; |
1159 | | |
1160 | 0 | case OFPXMT_OFB_VLAN_VID: |
1161 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_vlan_present, tvb, offset, 2, ENC_BIG_ENDIAN); |
1162 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_vlan_vid, tvb, offset, 2, ENC_BIG_ENDIAN); |
1163 | 0 | offset+=2; |
1164 | 0 | if (oxm_hm) { |
1165 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_mask_vlan, tvb, offset, 2, ENC_BIG_ENDIAN); |
1166 | 0 | offset+=2; |
1167 | 0 | } |
1168 | 0 | break; |
1169 | | |
1170 | 0 | case OFPXMT_OFB_IP_PROTO: |
1171 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_ipproto, tvb, offset, 1, ENC_BIG_ENDIAN); |
1172 | 0 | offset+=1; |
1173 | 0 | break; |
1174 | | |
1175 | 0 | case OFPXMT_OFB_IPV4_SRC: |
1176 | 0 | case OFPXMT_OFB_IPV4_DST: |
1177 | 0 | case OFPXMT_OFB_ARP_SPA: |
1178 | 0 | case OFPXMT_OFB_ARP_TPA: |
1179 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_ipv4addr, tvb, offset, 4, ENC_BIG_ENDIAN); |
1180 | 0 | offset+=4; |
1181 | 0 | if (oxm_hm) { |
1182 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_mask_ipv4addr, tvb, offset, 4, ENC_BIG_ENDIAN); |
1183 | 0 | offset+=4; |
1184 | 0 | } |
1185 | 0 | break; |
1186 | | |
1187 | 0 | case OFPXMT_OFB_TCP_SRC: |
1188 | 0 | case OFPXMT_OFB_TCP_DST: |
1189 | 0 | case OFPXMT_OFB_UDP_SRC: |
1190 | 0 | case OFPXMT_OFB_UDP_DST: |
1191 | 0 | case OFPXMT_OFB_SCTP_SRC: |
1192 | 0 | case OFPXMT_OFB_SCTP_DST: |
1193 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_uint16, tvb, offset, 2, ENC_BIG_ENDIAN); |
1194 | 0 | offset+=2; |
1195 | 0 | break; |
1196 | | |
1197 | 0 | case OFPXMT_OFB_IPV6_SRC: |
1198 | 0 | case OFPXMT_OFB_IPV6_DST: |
1199 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_ipv6addr, tvb, offset, 16, ENC_NA); |
1200 | 0 | offset+=16; |
1201 | 0 | if (oxm_hm) { |
1202 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_mask_ipv6addr, tvb, offset, 16, ENC_NA); |
1203 | 0 | offset+=16; |
1204 | 0 | } |
1205 | 0 | break; |
1206 | | |
1207 | 0 | case OFPXMT_OFB_MPLS_LABEL: |
1208 | | /* size differs in specification and header file */ |
1209 | 0 | if (field_length == 3) { |
1210 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_uint24, tvb, offset, 3, ENC_BIG_ENDIAN); |
1211 | 0 | offset+=3; |
1212 | 0 | } else if (field_length == 4) { |
1213 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value_uint32, tvb, offset, 4, ENC_BIG_ENDIAN); |
1214 | 0 | offset+=4; |
1215 | 0 | } |
1216 | 0 | break; |
1217 | | |
1218 | 0 | default: |
1219 | | /* value */ |
1220 | 0 | if (field_length > 0) { |
1221 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_value, tvb, offset, field_length, ENC_NA); |
1222 | 0 | offset += field_length; |
1223 | 0 | } |
1224 | | |
1225 | | /* mask */ |
1226 | 0 | if (field_length > 0 && oxm_hm != 0) { |
1227 | 0 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_mask, tvb, offset, field_length, ENC_NA); |
1228 | 0 | offset += field_length; |
1229 | 0 | } |
1230 | 0 | break; |
1231 | 0 | } |
1232 | | |
1233 | 0 | if(oxm_end > offset){ |
1234 | 0 | proto_tree_add_expert_format(oxm_tree, pinfo, &ei_openflow_v5_oxm_undecoded, |
1235 | 0 | tvb, offset, oxm_end-offset, "Undecoded Data"); |
1236 | 0 | offset = oxm_end; |
1237 | 0 | } |
1238 | |
|
1239 | 203 | } else if (oxm_class == OFPXMC_EXPERIMENTER) { |
1240 | | /* uint32_t experimenter; */ |
1241 | 3 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
1242 | 3 | offset+=4; |
1243 | 3 | proto_tree_add_item(oxm_tree, hf_openflow_v5_oxm_experimenter_value, tvb, offset, oxm_length - 4, ENC_NA); |
1244 | 3 | offset+=(oxm_length - 4); |
1245 | 200 | } else { |
1246 | 200 | proto_tree_add_expert_format(oxm_tree, pinfo, &ei_openflow_v5_oxm_undecoded, |
1247 | 200 | tvb, offset, oxm_length, "Unknown OXM body."); |
1248 | 200 | offset+=oxm_length; |
1249 | 200 | } |
1250 | | |
1251 | 203 | return offset; |
1252 | 203 | } |
1253 | | |
1254 | 4 | #define OFPMT_STANDARD 0 /* Standard Match. Deprecated. */ |
1255 | 12 | #define OFPMT_OXM 1 /* OpenFlow Extensible Match */ |
1256 | | static const value_string openflow_v5_match_type_values[] = { |
1257 | | { 0, "OFPMT_STANDARD" }, |
1258 | | { 1, "OFPMT_OXM" }, |
1259 | | { 0, NULL } |
1260 | | }; |
1261 | | |
1262 | | static int |
1263 | | dissect_openflow_match_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
1264 | 75 | { |
1265 | 75 | proto_item *ti; |
1266 | 75 | proto_tree *match_tree; |
1267 | 75 | uint16_t match_type; |
1268 | 75 | uint16_t match_length; |
1269 | 75 | int32_t fields_end; |
1270 | 75 | uint16_t pad_length; |
1271 | | |
1272 | 75 | match_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_match, &ti, "Match"); |
1273 | | |
1274 | | /* uint16_t type; */ |
1275 | 75 | proto_tree_add_item_ret_uint16(match_tree, hf_openflow_v5_match_type, tvb, offset, 2, ENC_BIG_ENDIAN, &match_type); |
1276 | 75 | offset+=2; |
1277 | | |
1278 | | /* uint16_t length; (excluding padding) */ |
1279 | 75 | match_length = tvb_get_ntohs(tvb, offset); |
1280 | 75 | pad_length = (match_length + 7)/8*8 - match_length; |
1281 | 75 | proto_item_set_len(ti, match_length + pad_length); |
1282 | 75 | ti = proto_tree_add_item(match_tree, hf_openflow_v5_match_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
1283 | 75 | offset+=2; |
1284 | | |
1285 | 75 | if (match_length < 4) { |
1286 | 50 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
1287 | 50 | return offset; |
1288 | 50 | } |
1289 | | |
1290 | | /* body */ |
1291 | 25 | switch (match_type) { |
1292 | 4 | case OFPMT_STANDARD: |
1293 | 4 | if (match_length <= 4) { |
1294 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
1295 | 0 | offset = length; |
1296 | 0 | break; |
1297 | 0 | } |
1298 | 4 | proto_tree_add_expert_format(match_tree, pinfo, &ei_openflow_v5_match_undecoded, |
1299 | 4 | tvb, offset, match_length - 4, "Standard match body (deprecated)."); |
1300 | 4 | offset+=match_length-4; |
1301 | 4 | break; |
1302 | | |
1303 | 12 | case OFPMT_OXM: |
1304 | 12 | fields_end = offset + match_length - 4; |
1305 | 215 | while(offset < fields_end) { |
1306 | 203 | offset = dissect_openflow_oxm_v5(tvb, pinfo, match_tree, offset); |
1307 | 203 | } |
1308 | 12 | break; |
1309 | | |
1310 | 9 | default: |
1311 | 9 | if (match_length <= 4) { |
1312 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
1313 | 0 | offset = length; |
1314 | 0 | break; |
1315 | 0 | } |
1316 | 9 | proto_tree_add_expert_format(match_tree, pinfo, &ei_openflow_v5_match_undecoded, |
1317 | 9 | tvb, offset, match_length - 4, "Unknown match body."); |
1318 | 9 | offset+=match_length-4; |
1319 | 9 | break; |
1320 | 25 | } |
1321 | | |
1322 | | /* pad; Exactly ((length + 7)/8*8 - length) (between 0 and 7) bytes of all-zero bytes. */ |
1323 | 18 | if (pad_length > 0) { |
1324 | 14 | proto_tree_add_item(match_tree, hf_openflow_v5_match_pad, tvb, offset, pad_length, ENC_NA); |
1325 | 14 | offset+=pad_length; |
1326 | 14 | } |
1327 | | |
1328 | 18 | return offset; |
1329 | 25 | } |
1330 | | |
1331 | | #define OFPM_MAX 0xffffff00 /* Last usable meter number. */ |
1332 | | static const value_string openflow_v5_meter_id_reserved_values[] = { |
1333 | | { 0xfffffffd, "OFPM_SLOWPATH" }, |
1334 | | { 0xfffffffe, "OFPM_CONTROLLER" }, |
1335 | | { 0xffffffff, "OFPM_ALL" }, |
1336 | | { 0, NULL } |
1337 | | }; |
1338 | | |
1339 | 17 | #define OFPMBT_DROP 1 |
1340 | 16 | #define OFPMBT_DSCP_REMARK 2 |
1341 | 1 | #define OFPMBT_EXPERIMENTER 0xFFFF |
1342 | | static const value_string openflow_v5_meter_band_type_values[] = { |
1343 | | { OFPMBT_DROP, "OFPMBT_DROP" }, |
1344 | | { OFPMBT_DSCP_REMARK, "OFPMBT_DSCP_REMARK" }, |
1345 | | { OFPMBT_EXPERIMENTER, "OFPMBT_EXPERIMENTER" }, |
1346 | | { 0, NULL } |
1347 | | }; |
1348 | | |
1349 | | #define OFPMF_KBPS 1 << 0 |
1350 | | #define OFPMF_PKTPS 1 << 1 |
1351 | | #define OFPMF_BURST 1 << 2 |
1352 | | #define OFPMF_STATS 1 << 3 |
1353 | | |
1354 | | static int |
1355 | | dissect_openflow_meter_band_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
1356 | 80 | { |
1357 | 80 | proto_item *ti; |
1358 | 80 | proto_tree *band_tree; |
1359 | 80 | uint16_t band_type; |
1360 | 80 | uint16_t band_len; |
1361 | | |
1362 | 80 | band_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_meter_band, &ti, "Meter band"); |
1363 | | |
1364 | | /* uint16_t type; */ |
1365 | 80 | proto_tree_add_item_ret_uint16(band_tree, hf_openflow_v5_meter_band_type, tvb, offset, 2, ENC_BIG_ENDIAN, &band_type); |
1366 | 80 | offset+=2; |
1367 | | |
1368 | | /* uint16_t len; */ |
1369 | 80 | band_len = tvb_get_ntohs(tvb, offset); |
1370 | 80 | proto_item_set_len(ti, band_len); |
1371 | 80 | ti = proto_tree_add_item(band_tree, hf_openflow_v5_meter_band_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
1372 | 80 | offset+=2; |
1373 | | |
1374 | | /* uint32_t rate; */ |
1375 | 80 | proto_tree_add_item(band_tree, hf_openflow_v5_meter_band_rate, tvb, offset, 4, ENC_BIG_ENDIAN); |
1376 | 80 | offset+=4; |
1377 | | |
1378 | | /* uint32_t burst_size; */ |
1379 | 80 | proto_tree_add_item(band_tree, hf_openflow_v5_meter_band_burst_size, tvb, offset, 4, ENC_BIG_ENDIAN); |
1380 | 80 | offset+=4; |
1381 | | |
1382 | 80 | if (band_len < 12) { |
1383 | 66 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
1384 | 66 | return offset; |
1385 | 66 | } |
1386 | | |
1387 | 14 | switch (band_type) { |
1388 | 1 | case OFPMBT_DROP: |
1389 | | /* uint8_t pad[4]; */ |
1390 | 1 | proto_tree_add_item(band_tree, hf_openflow_v5_meter_band_drop_pad, tvb, offset, 4, ENC_NA); |
1391 | 1 | offset+=4; |
1392 | 1 | break; |
1393 | | |
1394 | 0 | case OFPMBT_DSCP_REMARK: |
1395 | | /* uint8_t prec_level; */ |
1396 | 0 | proto_tree_add_item(band_tree, hf_openflow_v5_meter_band_dscp_remark_prec_level, tvb, offset, 1, ENC_BIG_ENDIAN); |
1397 | 0 | offset+=1; |
1398 | | |
1399 | | /* uint8_t pad[3]; */ |
1400 | 0 | proto_tree_add_item(band_tree, hf_openflow_v5_meter_band_dscp_remark_pad, tvb, offset, 3, ENC_NA); |
1401 | 0 | offset+=3; |
1402 | 0 | break; |
1403 | | |
1404 | 1 | case OFPMBT_EXPERIMENTER: |
1405 | | /* uint32_t experimenter; */ |
1406 | 1 | proto_tree_add_item(band_tree, hf_openflow_v5_meter_band_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
1407 | 1 | offset+=4; |
1408 | | |
1409 | | /* uint32_t experimenter_data[0]; */ |
1410 | 1 | proto_tree_add_expert_format(band_tree, pinfo, &ei_openflow_v5_meter_band_undecoded, |
1411 | 1 | tvb, offset, offset - 16 + band_len, "Experimenter meter band body."); |
1412 | 1 | offset+=band_len-16; |
1413 | 1 | break; |
1414 | | |
1415 | 9 | default: |
1416 | 9 | proto_tree_add_expert_format(band_tree, pinfo, &ei_openflow_v5_meter_band_undecoded, |
1417 | 9 | tvb, offset, offset - 12 + band_len, "Unknown meter band body."); |
1418 | 9 | offset+=band_len-12; |
1419 | 9 | break; |
1420 | 14 | } |
1421 | | |
1422 | 5 | return offset; |
1423 | 14 | } |
1424 | | |
1425 | | |
1426 | 1 | #define OFPHET_VERSIONBITMAP 1 |
1427 | | static const value_string openflow_v5_hello_element_type_values[] = { |
1428 | | { 1, "OFPHET_VERSIONBITMAP" }, |
1429 | | { 0, NULL } |
1430 | | }; |
1431 | | |
1432 | | static int |
1433 | | dissect_openflow_hello_element_v5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, uint16_t length) |
1434 | 11 | { |
1435 | 11 | proto_tree *elem_tree; |
1436 | 11 | uint16_t elem_type; |
1437 | 11 | uint16_t elem_length; |
1438 | 11 | uint16_t pad_length; |
1439 | | |
1440 | 11 | elem_tree = proto_tree_add_subtree(tree, tvb, offset, length - offset, ett_openflow_v5_hello_element, NULL, "Element"); |
1441 | | |
1442 | | /* uint16_t type; */ |
1443 | 11 | elem_type = tvb_get_ntohs(tvb, offset); |
1444 | 11 | proto_tree_add_item(elem_tree, hf_openflow_v5_hello_element_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
1445 | 11 | offset+=2; |
1446 | | |
1447 | | /* uint16_t length; */ |
1448 | 11 | elem_length = tvb_get_ntohs(tvb, offset); |
1449 | 11 | proto_tree_add_item(elem_tree, hf_openflow_v5_hello_element_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
1450 | 11 | offset+=2; |
1451 | | |
1452 | 11 | if (elem_length < 4) { |
1453 | 1 | proto_tree_add_expert_format(elem_tree, pinfo, &ei_openflow_v5_hello_element_length_bad, |
1454 | 1 | tvb, offset - 2, 2, "Illegal hello element length: %u (must be >= 4)", elem_length); |
1455 | 1 | return length; |
1456 | 1 | } |
1457 | | |
1458 | 10 | pad_length = (elem_length + 7)/8*8 - elem_length; |
1459 | 10 | elem_length -= 4; |
1460 | | |
1461 | 10 | switch (elem_type) { |
1462 | 1 | case OFPHET_VERSIONBITMAP: |
1463 | | /* bitmap */ |
1464 | 1 | proto_tree_add_item(elem_tree, hf_openflow_v5_hello_element_version_bitmap, tvb, offset, elem_length, ENC_NA); |
1465 | 1 | offset += elem_length; |
1466 | 1 | break; |
1467 | | |
1468 | 9 | default: |
1469 | 9 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_hello_element_undecoded, |
1470 | 9 | tvb, offset, elem_length, "Unknown hello element body."); |
1471 | 9 | offset += elem_length; |
1472 | 9 | break; |
1473 | 10 | } |
1474 | | |
1475 | 6 | if (pad_length > 0) { |
1476 | 6 | proto_tree_add_item(tree, hf_openflow_v5_hello_element_pad, tvb, offset, pad_length, ENC_NA); |
1477 | 6 | offset+=pad_length; |
1478 | 6 | } |
1479 | | |
1480 | 6 | return offset; |
1481 | 10 | } |
1482 | | |
1483 | | static void |
1484 | | dissect_openflow_hello_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
1485 | 6 | { |
1486 | | |
1487 | 17 | while (offset < length) { |
1488 | 11 | offset = dissect_openflow_hello_element_v5(tvb, pinfo, tree, offset, length); |
1489 | 11 | } |
1490 | 6 | } |
1491 | | |
1492 | | |
1493 | 0 | #define OFPET_HELLO_FAILED 0 |
1494 | 0 | #define OFPET_BAD_REQUEST 1 |
1495 | 0 | #define OFPET_BAD_ACTION 2 |
1496 | 0 | #define OFPET_BAD_INSTRUCTION 3 |
1497 | 0 | #define OFPET_BAD_MATCH 4 |
1498 | 0 | #define OFPET_FLOW_MOD_FAILED 5 |
1499 | 0 | #define OFPET_GROUP_MOD_FAILED 6 |
1500 | 0 | #define OFPET_PORT_MOD_FAILED 7 |
1501 | 0 | #define OFPET_TABLE_MOD_FAILED 8 |
1502 | 0 | #define OFPET_QUEUE_OP_FAILED 9 |
1503 | 0 | #define OFPET_SWITCH_CONFIG_FAILED 10 |
1504 | 0 | #define OFPET_ROLE_REQUEST_FAILED 11 |
1505 | 0 | #define OFPET_METER_MOD_FAILED 12 |
1506 | 0 | #define OFPET_TABLE_FEATURES_FAILED 13 |
1507 | 0 | #define OFPET_BAD_PROPERTY 14 |
1508 | 0 | #define OFPET_ASYNC_CONFIG_FAILED 15 |
1509 | 0 | #define OFPET_FLOW_MONITOR_FAILED 16 |
1510 | 0 | #define OFPET_BUNDLE_FAILED 17 |
1511 | 0 | #define OFPET_EXPERIMENTER 0xffff |
1512 | | static const value_string openflow_v5_error_type_values[] = { |
1513 | | { 0, "OFPET_HELLO_FAILED" }, |
1514 | | { 1, "OFPET_BAD_REQUEST" }, |
1515 | | { 2, "OFPET_BAD_ACTION" }, |
1516 | | { 3, "OFPET_BAD_INSTRUCTION" }, |
1517 | | { 4, "OFPET_BAD_MATCH" }, |
1518 | | { 5, "OFPET_FLOW_MOD_FAILED" }, |
1519 | | { 6, "OFPET_GROUP_MOD_FAILED" }, |
1520 | | { 7, "OFPET_PORT_MOD_FAILED" }, |
1521 | | { 8, "OFPET_TABLE_MOD_FAILED" }, |
1522 | | { 9, "OFPET_QUEUE_OP_FAILED" }, |
1523 | | { 10, "OFPET_SWITCH_CONFIG_FAILED" }, |
1524 | | { 11, "OFPET_ROLE_REQUEST_FAILED" }, |
1525 | | { 12, "OFPET_METER_MOD_FAILED" }, |
1526 | | { 13, "OFPET_TABLE_FEATURES_FAILED" }, |
1527 | | { 14, "OFPET_BAD_PROPERTY" }, |
1528 | | { 15, "OFPET_ASYNC_CONFIG_FAILED" }, |
1529 | | { 16, "OFPET_FLOW_MONITOR_FAILED" }, |
1530 | | { 17, "OFPET_BUNDLE_FAILED" }, |
1531 | | { 0xffff, "OFPET_EXPERIMENTER" }, |
1532 | | { 0, NULL} |
1533 | | }; |
1534 | | |
1535 | | static const value_string openflow_v5_error_hello_failed_code_values[] = { |
1536 | | { 0, "OFPHFC_INCOMPATIBLE" }, |
1537 | | { 1, "OFPHFC_EPERM" }, |
1538 | | { 0, NULL } |
1539 | | }; |
1540 | | |
1541 | | static const value_string openflow_v5_error_bad_request_code_values[] = { |
1542 | | { 0, "OFPBRC_BAD_VERSION" }, |
1543 | | { 1, "OFPBRC_BAD_TYPE" }, |
1544 | | { 2, "OFPBRC_BAD_MULTIPART" }, |
1545 | | { 3, "OFPBRC_BAD_EXPERIMENTER" }, |
1546 | | { 4, "OFPBRC_BAD_EXP_TYPE" }, |
1547 | | { 5, "OFPBRC_EPERM" }, |
1548 | | { 6, "OFPBRC_BAD_LEN" }, |
1549 | | { 7, "OFPBRC_BUFFER_EMPTY" }, |
1550 | | { 8, "OFPBRC_BUFFER_UNKNOWN" }, |
1551 | | { 9, "OFPBRC_BAD_TABLE_ID" }, |
1552 | | { 10, "OFPBRC_IS_SLAVE" }, |
1553 | | { 11, "OFPBRC_BAD_PORT" }, |
1554 | | { 12, "OFPBRC_BAD_PACKET" }, |
1555 | | { 13, "OFPBRC_MULTIPART_BUFFER_OVERFLOW" }, |
1556 | | { 14, "OFPBRC_MULTIPART_REQUEST_TIMEOUT" }, |
1557 | | { 15, "OFPBRC_MULTIPART_REPLY_TIMEOUT" }, |
1558 | | { 0, NULL } |
1559 | | }; |
1560 | | |
1561 | | static const value_string openflow_v5_error_bad_action_code_values[] = { |
1562 | | { 0, "OFPBAC_BAD_TYPE" }, |
1563 | | { 1, "OFPBAC_BAD_LEN" }, |
1564 | | { 2, "OFPBAC_BAD_EXPERIMENTER" }, |
1565 | | { 3, "OFPBAC_BAD_EXP_TYPE" }, |
1566 | | { 4, "OFPBAC_BAD_OUT_PORT" }, |
1567 | | { 5, "OFPBAC_BAD_ARGUMENT" }, |
1568 | | { 6, "OFPBAC_EPERM" }, |
1569 | | { 7, "OFPBAC_TOO_MANY" }, |
1570 | | { 8, "OFPBAC_BAD_QUEUE" }, |
1571 | | { 9, "OFPBAC_BAD_OUT_GROUP" }, |
1572 | | { 10, "OFPBAC_MATCH_INCONSISTENT" }, |
1573 | | { 11, "OFPBAC_UNSUPPORTED_ORDER" }, |
1574 | | { 12, "OFPBAC_BAD_TAG" }, |
1575 | | { 13, "OFPBAC_BAD_SET_TYPE" }, |
1576 | | { 14, "OFPBAC_BAD_SET_LEN" }, |
1577 | | { 15, "OFPBAC_BAD_SET_ARGUMENT" }, |
1578 | | { 0, NULL } |
1579 | | }; |
1580 | | |
1581 | | static const value_string openflow_v5_error_bad_instruction_code_values[] = { |
1582 | | { 0, "OFPBIC_UNKNOWN_INST" }, |
1583 | | { 1, "OFPBIC_UNSUP_INST" }, |
1584 | | { 2, "OFPBIC_BAD_TABLE_ID" }, |
1585 | | { 3, "OFPBIC_UNSUP_METADATA" }, |
1586 | | { 4, "OFPBIC_UNSUP_METADATA_MASK" }, |
1587 | | { 5, "OFPBIC_BAD_EXPERIMENTER" }, |
1588 | | { 6, "OFPBIC_BAD_EXP_TYPE" }, |
1589 | | { 7, "OFPBIC_BAD_LEN" }, |
1590 | | { 8, "OFPBIC_EPERM" }, |
1591 | | { 9, "OFPBIC_DUP_INST" }, |
1592 | | { 0, NULL } |
1593 | | }; |
1594 | | |
1595 | | static const value_string openflow_v5_error_bad_match_code_values[] = { |
1596 | | { 0, "OFPBMC_BAD_TYPE" }, |
1597 | | { 1, "OFPBMC_BAD_LEN" }, |
1598 | | { 2, "OFPBMC_BAD_TAG" }, |
1599 | | { 3, "OFPBMC_BAD_DL_ADDR_MASK" }, |
1600 | | { 4, "OFPBMC_BAD_NW_ADDR_MASK" }, |
1601 | | { 5, "OFPBMC_BAD_WILDCARDS" }, |
1602 | | { 6, "OFPBMC_BAD_FIELD" }, |
1603 | | { 7, "OFPBMC_BAD_VALUE" }, |
1604 | | { 8, "OFPBMC_BAD_MASK" }, |
1605 | | { 9, "OFPBMC_BAD_PREREQ" }, |
1606 | | { 10, "OFPBMC_DUP_FIELD" }, |
1607 | | { 11, "OFPBMC_EPERM" }, |
1608 | | { 0, NULL } |
1609 | | }; |
1610 | | |
1611 | | static const value_string openflow_v5_error_flow_mod_failed_code_values[] = { |
1612 | | { 0, "OFPFMFC_UNKNOWN" }, |
1613 | | { 1, "OFPFMFC_TABLE_FULL" }, |
1614 | | { 2, "OFPFMFC_BAD_TABLE_ID" }, |
1615 | | { 3, "OFPFMFC_OVERLAP" }, |
1616 | | { 4, "OFPFMFC_EPERM" }, |
1617 | | { 5, "OFPFMFC_BAD_TIMEOUT" }, |
1618 | | { 6, "OFPFMFC_BAD_COMMAND" }, |
1619 | | { 7, "OFPFMFC_BAD_FLAGS" }, |
1620 | | { 8, "OFPFMFC_CANT_SYNC" }, |
1621 | | { 9, "OFPFMFC_BAD_PRIORITY" }, |
1622 | | { 0, NULL } |
1623 | | }; |
1624 | | |
1625 | | static const value_string openflow_v5_error_group_mod_failed_code_values[] = { |
1626 | | { 0, "OFPGMFC_GROUP_EXISTS" }, |
1627 | | { 1, "OFPGMFC_INVALID_GROUP" }, |
1628 | | { 2, "OFPGMFC_WEIGHT_UNSUPPORTED" }, |
1629 | | { 3, "OFPGMFC_OUT_OF_GROUPS" }, |
1630 | | { 4, "OFPGMFC_OUT_OF_BUCKETS" }, |
1631 | | { 5, "OFPGMFC_CHAINING_UNSUPPORTED" }, |
1632 | | { 6, "OFPGMFC_WATCH_UNSUPPORTED" }, |
1633 | | { 7, "OFPGMFC_LOOP" }, |
1634 | | { 8, "OFPGMFC_UNKNOWN_GROUP" }, |
1635 | | { 9, "OFPGMFC_CHAINED_GROUP" }, |
1636 | | { 10, "OFPGMFC_BAD_TYPE" }, |
1637 | | { 11, "OFPGMFC_BAD_COMMAND" }, |
1638 | | { 12, "OFPGMFC_BAD_BUCKET" }, |
1639 | | { 13, "OFPGMFC_BAD_WATCH" }, |
1640 | | { 14, "OFPGMFC_EPERM" }, |
1641 | | { 0, NULL } |
1642 | | }; |
1643 | | |
1644 | | static const value_string openflow_v5_error_port_mod_failed_code_values[] = { |
1645 | | { 0, "OFPPMFC_BAD_PORT" }, |
1646 | | { 1, "OFPPMFC_BAD_HW_ADDR" }, |
1647 | | { 2, "OFPPMFC_BAD_CONFIG" }, |
1648 | | { 3, "OFPPMFC_BAD_ADVERTISE" }, |
1649 | | { 4, "OFPPMFC_EPERM" }, |
1650 | | { 0, NULL } |
1651 | | }; |
1652 | | |
1653 | | static const value_string openflow_v5_error_table_mod_failed_code_values[] = { |
1654 | | { 0, "OFPTMFC_BAD_TABLE" }, |
1655 | | { 1, "OFPTMFC_BAD_CONFIG" }, |
1656 | | { 2, "OFPTMFC_EPERM" }, |
1657 | | { 0, NULL } |
1658 | | }; |
1659 | | |
1660 | | static const value_string openflow_v5_error_queue_op_failed_code_values[] = { |
1661 | | { 0, "OFPQOFC_BAD_PORT" }, |
1662 | | { 1, "OFPQOFC_BAD_QUEUE" }, |
1663 | | { 2, "OFPQOFC_EPERM" }, |
1664 | | { 0, NULL } |
1665 | | }; |
1666 | | |
1667 | | static const value_string openflow_v5_error_switch_config_failed_code_values[] = { |
1668 | | { 0, "OFPSCFC_BAD_FLAGS" }, |
1669 | | { 1, "OFPSCFC_BAD_LEN" }, |
1670 | | { 2, "OFPQCFC_EPERM" }, |
1671 | | { 0, NULL } |
1672 | | }; |
1673 | | |
1674 | | static const value_string openflow_v5_error_role_request_failed_code_values[] = { |
1675 | | { 0, "OFPRRFC_STALE" }, |
1676 | | { 1, "OFPRRFC_UNSUP" }, |
1677 | | { 2, "OFPRRFC_BAD_ROLE" }, |
1678 | | { 0, NULL } |
1679 | | }; |
1680 | | |
1681 | | static const value_string openflow_v5_error_meter_mod_failed_code_values[] = { |
1682 | | { 0, "OFPMMFC_UNKNOWN" }, |
1683 | | { 1, "OFPMMFC_METER_EXISTS" }, |
1684 | | { 2, "OFPMMFC_INVALID_METER" }, |
1685 | | { 3, "OFPMMFC_UNKNOWN_METER" }, |
1686 | | { 4, "OFPMMFC_BAD_COMMAND" }, |
1687 | | { 5, "OFPMMFC_BAD_FLAGS" }, |
1688 | | { 6, "OFPMMFC_BAD_RATE" }, |
1689 | | { 7, "OFPMMFC_BAD_BURST" }, |
1690 | | { 8, "OFPMMFC_BAD_BAND" }, |
1691 | | { 9, "OFPMMFC_BAD_BAND_VALUE" }, |
1692 | | { 10, "OFPMMFC_OUT_OF_METERS" }, |
1693 | | { 11, "OFPMMFC_OUT_OF_BANDS" }, |
1694 | | { 0, NULL } |
1695 | | }; |
1696 | | |
1697 | | static const value_string openflow_v5_error_table_features_failed_code_values[] = { |
1698 | | { 0, "OFPTFFC_BAD_TABLE" }, |
1699 | | { 1, "OFPTFFC_BAD_METADATA" }, |
1700 | | { 5, "OFPTFFC_EPERM" }, |
1701 | | { 0, NULL } |
1702 | | }; |
1703 | | |
1704 | | static const value_string openflow_v5_error_bad_property_code_values[] = { |
1705 | | { 0, "OFPBPC_BAD_TYPE" }, |
1706 | | { 1, "OFPBPC_BAD_LEN" }, |
1707 | | { 2, "OFPBPC_BAD_VALUE" }, |
1708 | | { 3, "OFPBPC_TOO_MANY" }, |
1709 | | { 4, "OFPBPC_DUP_TYPE" }, |
1710 | | { 5, "OFPBPC_BAD_EXPERIMENTER" }, |
1711 | | { 6, "OFPBPC_BAD_EXP_TYPE" }, |
1712 | | { 7, "OFPBPC_BAD_EXP_VALUE" }, |
1713 | | { 8, "OFPBPC_EPERM" }, |
1714 | | { 0, NULL } |
1715 | | }; |
1716 | | |
1717 | | static const value_string openflow_v5_error_async_config_failed_code_values[] = { |
1718 | | { 0, "OFPACFC_INVALID" }, |
1719 | | { 1, "OFPACFC_UNSUPPORTED" }, |
1720 | | { 2, "OFPACFC_EPERM" }, |
1721 | | { 0, NULL } |
1722 | | }; |
1723 | | |
1724 | | static const value_string openflow_v5_error_flow_monitor_failed_code_values[] = { |
1725 | | { 0, "OFPMOFC_UNKNOWN" }, |
1726 | | { 1, "OFPMOFC_MONITOR_EXISTS" }, |
1727 | | { 2, "OFPMOFC_INVALID_MONITOR" }, |
1728 | | { 3, "OFPMOFC_UNKNOWN_MONITOR" }, |
1729 | | { 4, "OFPMOFC_BAD_COMMAND" }, |
1730 | | { 5, "OFPMOFC_BAD_FLAGS" }, |
1731 | | { 6, "OFPMOFC_BAD_TABLE_ID" }, |
1732 | | { 7, "OFPMOFC_BAD_OUT" }, |
1733 | | { 0, NULL } |
1734 | | }; |
1735 | | |
1736 | | static const value_string openflow_v5_error_bundle_failed_code_values[] = { |
1737 | | { 0, "OFPBFC_UNKNOWN" }, |
1738 | | { 1, "OFPBFC_EPERM" }, |
1739 | | { 2, "OFPBFC_BAD_ID" }, |
1740 | | { 3, "OFPBFC_BUNDLE_EXIST" }, |
1741 | | { 4, "OFPBFC_BUNDLE_CLOSED" }, |
1742 | | { 5, "OFPBFC_OUT_OF_BUNDLES" }, |
1743 | | { 6, "OFPBFC_BAD_TYPE" }, |
1744 | | { 7, "OFPBFC_BAD_FLAGS" }, |
1745 | | { 8, "OFPBFC_MSG_BAD_LEN" }, |
1746 | | { 9, "OFPBFC_MSG_BAD_XID" }, |
1747 | | { 10, "OFPBFC_MSG_UNSUP" }, |
1748 | | { 11, "OFPBFC_MSG_CONFLICT" }, |
1749 | | { 12, "OFPBFC_MSG_TOO_MANY" }, |
1750 | | { 13, "OFPBFC_MSG_FAILED" }, |
1751 | | { 14, "OFPBFC_TIMEOUT" }, |
1752 | | { 15, "OFPBFC_BUNDLE_IN_PROGRESS" }, |
1753 | | { 0, NULL } |
1754 | | }; |
1755 | | |
1756 | | static void |
1757 | | // NOLINTNEXTLINE(misc-no-recursion) |
1758 | | dissect_openflow_error_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
1759 | 1 | { |
1760 | 1 | proto_tree *data_tree; |
1761 | 1 | proto_item *data_ti; |
1762 | 1 | uint16_t error_type; |
1763 | | |
1764 | | /* uint16_t type; */ |
1765 | 1 | proto_tree_add_item_ret_uint16(tree, hf_openflow_v5_error_type, tvb, offset, 2, ENC_BIG_ENDIAN, &error_type); |
1766 | 1 | offset +=2; |
1767 | | |
1768 | | /* uint16_t code; */ |
1769 | 1 | switch(error_type) { |
1770 | 0 | case OFPET_HELLO_FAILED: |
1771 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_hello_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1772 | 0 | break; |
1773 | 0 | case OFPET_BAD_REQUEST: |
1774 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_bad_request_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1775 | 0 | break; |
1776 | 0 | case OFPET_BAD_ACTION: |
1777 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_bad_action_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1778 | 0 | break; |
1779 | 0 | case OFPET_BAD_INSTRUCTION: |
1780 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_bad_instruction_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1781 | 0 | break; |
1782 | 0 | case OFPET_BAD_MATCH: |
1783 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_bad_match_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1784 | 0 | break; |
1785 | 0 | case OFPET_FLOW_MOD_FAILED: |
1786 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_flow_mod_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1787 | 0 | break; |
1788 | 0 | case OFPET_GROUP_MOD_FAILED: |
1789 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_group_mod_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1790 | 0 | break; |
1791 | 0 | case OFPET_PORT_MOD_FAILED: |
1792 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_port_mod_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1793 | 0 | break; |
1794 | 0 | case OFPET_TABLE_MOD_FAILED: |
1795 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_table_mod_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1796 | 0 | break; |
1797 | 0 | case OFPET_QUEUE_OP_FAILED: |
1798 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_queue_op_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1799 | 0 | break; |
1800 | 0 | case OFPET_SWITCH_CONFIG_FAILED: |
1801 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_switch_config_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1802 | 0 | break; |
1803 | 0 | case OFPET_ROLE_REQUEST_FAILED: |
1804 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_role_request_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1805 | 0 | break; |
1806 | 0 | case OFPET_METER_MOD_FAILED: |
1807 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_meter_mod_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1808 | 0 | break; |
1809 | 0 | case OFPET_TABLE_FEATURES_FAILED: |
1810 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_table_features_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1811 | 0 | break; |
1812 | 0 | case OFPET_BAD_PROPERTY: |
1813 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_bad_property_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1814 | 0 | break; |
1815 | 0 | case OFPET_ASYNC_CONFIG_FAILED: |
1816 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_async_config_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1817 | 0 | break; |
1818 | 0 | case OFPET_FLOW_MONITOR_FAILED: |
1819 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_flow_monitor_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1820 | 0 | break; |
1821 | 0 | case OFPET_BUNDLE_FAILED: |
1822 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_bundle_failed_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1823 | 0 | break; |
1824 | 0 | case OFPET_EXPERIMENTER: |
1825 | 1 | default: |
1826 | 1 | proto_tree_add_item(tree, hf_openflow_v5_error_code, tvb, offset, 2, ENC_BIG_ENDIAN); |
1827 | 1 | break; |
1828 | 1 | } |
1829 | 1 | offset +=2; |
1830 | | |
1831 | 1 | switch(error_type) { |
1832 | 0 | case OFPET_HELLO_FAILED: |
1833 | | /* uint8_t data[0]; contains an ASCII text string */ |
1834 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_data_text, tvb, offset, length - 12, ENC_ASCII); |
1835 | | /*offset += length - 12;*/ |
1836 | 0 | break; |
1837 | | |
1838 | 0 | case OFPET_BAD_REQUEST: |
1839 | 0 | case OFPET_BAD_ACTION: |
1840 | 0 | case OFPET_BAD_INSTRUCTION: |
1841 | 0 | case OFPET_BAD_MATCH: |
1842 | 0 | case OFPET_FLOW_MOD_FAILED: |
1843 | 0 | case OFPET_GROUP_MOD_FAILED: |
1844 | 0 | case OFPET_PORT_MOD_FAILED: |
1845 | 0 | case OFPET_TABLE_MOD_FAILED: |
1846 | 0 | case OFPET_QUEUE_OP_FAILED: |
1847 | 0 | case OFPET_SWITCH_CONFIG_FAILED: |
1848 | 0 | case OFPET_ROLE_REQUEST_FAILED: |
1849 | 0 | case OFPET_METER_MOD_FAILED: |
1850 | 0 | case OFPET_TABLE_FEATURES_FAILED: { |
1851 | | /* uint8_t data[0]; contains at least the first 64 bytes of the failed request. */ |
1852 | 0 | bool save_in_error_pkt; |
1853 | |
|
1854 | 0 | data_ti = proto_tree_add_item(tree, hf_openflow_v5_error_data_body, tvb, offset, length - 20, ENC_NA); |
1855 | 0 | data_tree = proto_item_add_subtree(data_ti, ett_openflow_v5_error_data); |
1856 | | |
1857 | | /* Save error pkt */ |
1858 | 0 | save_in_error_pkt = pinfo->flags.in_error_pkt; |
1859 | 0 | pinfo->flags.in_error_pkt = true; |
1860 | | |
1861 | | /* Disable update/change of column info */ |
1862 | 0 | col_set_writable(pinfo->cinfo, -1, false); |
1863 | |
|
1864 | 0 | dissect_openflow_message_v5(tvb, pinfo, data_tree, offset); |
1865 | | |
1866 | | /* Restore the "we're inside an error packet" flag. */ |
1867 | 0 | pinfo->flags.in_error_pkt = save_in_error_pkt; |
1868 | | |
1869 | | /* Restore the capability of update/change column info */ |
1870 | 0 | col_set_writable(pinfo->cinfo, -1, true); |
1871 | | |
1872 | | /*offset += length - 12;*/ |
1873 | 0 | } |
1874 | 0 | break; |
1875 | | |
1876 | 0 | case OFPET_EXPERIMENTER: |
1877 | | /* uint32_t experimenter */ |
1878 | 0 | proto_tree_add_item(tree, hf_openflow_v5_error_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
1879 | 0 | offset+=4; |
1880 | | /* uint8_t data[0]; */ |
1881 | 0 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_error_undecoded, |
1882 | 0 | tvb, offset, length - 16, "Experimenter error body."); |
1883 | | /*offset += length - 16;*/ |
1884 | 0 | break; |
1885 | | |
1886 | 1 | default: |
1887 | | /* uint8_t data[0]; */ |
1888 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_error_undecoded, |
1889 | 1 | tvb, offset, length - 12, "Unknown error body."); |
1890 | | /*offset += length - 12;*/ |
1891 | 1 | break; |
1892 | 1 | } |
1893 | 1 | } |
1894 | | |
1895 | | |
1896 | | static void |
1897 | | dissect_openflow_echo_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
1898 | 0 | { |
1899 | | /* data */ |
1900 | 0 | if (offset < length) { |
1901 | 0 | proto_tree_add_item(tree, hf_openflow_v5_echo_data, tvb, offset, length - offset, ENC_NA); |
1902 | 0 | } |
1903 | 0 | } |
1904 | | |
1905 | | |
1906 | | static void |
1907 | | dissect_openflow_experimenter_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
1908 | 1 | { |
1909 | | /* uint32_t experimenter; */ |
1910 | 1 | proto_tree_add_item(tree, hf_openflow_v5_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
1911 | 1 | offset+=4; |
1912 | | |
1913 | | /* uint32_t exp_type; */ |
1914 | 1 | proto_tree_add_item(tree, hf_openflow_v5_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
1915 | 1 | offset+=4; |
1916 | | |
1917 | | /* data */ |
1918 | 1 | if (offset < length) { |
1919 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_experimenter_undecoded, |
1920 | 1 | tvb, offset, length - 16, "Experimenter body."); |
1921 | 1 | } |
1922 | 1 | } |
1923 | | |
1924 | 16 | #define OFPC_FLOW_STATS 1<<0 |
1925 | 16 | #define OFPC_TABLE_STATS 1<<1 |
1926 | 16 | #define OFPC_PORT_STATS 1<<2 |
1927 | 16 | #define OFPC_GROUP_STATS 1<<3 |
1928 | 16 | #define OFPC_IP_REASM 1<<5 |
1929 | 16 | #define OFPC_QUEUE_STATS 1<<6 |
1930 | 16 | #define OFPC_PORT_BLOCKED 1<<8 |
1931 | | static void |
1932 | | dissect_openflow_switch_features_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
1933 | 1 | { |
1934 | 1 | proto_item *ti; |
1935 | 1 | proto_tree *cap_tree; |
1936 | | |
1937 | | /* uint64_t datapath_id; */ |
1938 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_features_datapath_id, tvb, offset, 8, ENC_BIG_ENDIAN); |
1939 | 1 | offset+=8; |
1940 | | |
1941 | | /* uint32_t n_buffers; */ |
1942 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_features_n_buffers, tvb, offset, 4, ENC_BIG_ENDIAN); |
1943 | 1 | offset+=4; |
1944 | | |
1945 | | /* uint8_t n_tables; */ |
1946 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_features_n_tables, tvb, offset, 1, ENC_BIG_ENDIAN); |
1947 | 1 | offset++; |
1948 | | |
1949 | | /* uint8_t auxiliary_id; */ |
1950 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_features_auxiliary_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
1951 | 1 | offset++; |
1952 | | |
1953 | | /* uint8_t pad[2]; */ |
1954 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_features_pad, tvb, offset, 2, ENC_BIG_ENDIAN); |
1955 | 1 | offset+=2; |
1956 | | |
1957 | | /* uint32_t capabilities; */ |
1958 | 1 | ti = proto_tree_add_item(tree, hf_openflow_v5_switch_features_capabilities, tvb, offset, 4, ENC_BIG_ENDIAN); |
1959 | 1 | cap_tree = proto_item_add_subtree(ti, ett_openflow_v5_switch_features_capabilities); |
1960 | | |
1961 | 1 | proto_tree_add_item(cap_tree, hf_openflow_v5_switch_features_capabilities_flow_stats, tvb, offset, 4, ENC_BIG_ENDIAN); |
1962 | 1 | proto_tree_add_item(cap_tree, hf_openflow_v5_switch_features_capabilities_table_stats, tvb, offset, 4, ENC_BIG_ENDIAN); |
1963 | 1 | proto_tree_add_item(cap_tree, hf_openflow_v5_switch_features_capabilities_port_stats, tvb, offset, 4, ENC_BIG_ENDIAN); |
1964 | 1 | proto_tree_add_item(cap_tree, hf_openflow_v5_switch_features_capabilities_group_stats, tvb, offset, 4, ENC_BIG_ENDIAN); |
1965 | 1 | proto_tree_add_item(cap_tree, hf_openflow_v5_switch_features_capabilities_ip_reasm, tvb, offset, 4, ENC_BIG_ENDIAN); |
1966 | 1 | proto_tree_add_item(cap_tree, hf_openflow_v5_switch_features_capabilities_queue_stats, tvb, offset, 4, ENC_BIG_ENDIAN); |
1967 | 1 | proto_tree_add_item(cap_tree, hf_openflow_v5_switch_features_capabilities_port_blocked, tvb, offset, 4, ENC_BIG_ENDIAN); |
1968 | 1 | offset+=4; |
1969 | | |
1970 | | /* uint32_t reserved; */ |
1971 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_features_reserved, tvb, offset, 4, ENC_BIG_ENDIAN); |
1972 | | /*offset+=4;*/ |
1973 | 1 | } |
1974 | | |
1975 | | static const value_string openflow_v5_switch_config_fragments_values[] = { |
1976 | | { 0, "OFPC_FRAG_NORMAL" }, |
1977 | | { 1, "OFPC_FRAG_DROP" }, |
1978 | | { 2, "OFPC_FRAG_REASM" }, |
1979 | | { 0, NULL } |
1980 | | }; |
1981 | | |
1982 | | #define OFPCML_MAX 0xffe5 /* Maximum max_len value. */ |
1983 | | static const value_string openflow_v5_controller_max_len_reserved_values[] = { |
1984 | | { 0xffff, "OFPCML_NO_BUFFER" }, |
1985 | | { 0, NULL } |
1986 | | }; |
1987 | | |
1988 | | static void |
1989 | | dissect_openflow_switch_config_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
1990 | 1 | { |
1991 | 1 | proto_item *ti; |
1992 | 1 | proto_tree *flags_tree; |
1993 | | |
1994 | | /* uint16_t flags; */ |
1995 | 1 | ti = proto_tree_add_item(tree, hf_openflow_v5_switch_config_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
1996 | 1 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_switch_config_flags); |
1997 | | |
1998 | | /* fragments */ |
1999 | 1 | proto_tree_add_bits_item(flags_tree, hf_openflow_v5_switch_config_flags_fragments, tvb, (offset * 8) + 14, 2, ENC_NA); |
2000 | 1 | offset+=2; |
2001 | | |
2002 | | /* uint16_t miss_send_len; */ |
2003 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_config_miss_send_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
2004 | | /*offset+=2;*/ |
2005 | 1 | } |
2006 | | |
2007 | 16 | #define OFPR_TABLE_MISS 0 |
2008 | 16 | #define OFPR_APPLY_ACTION 1 |
2009 | 16 | #define OFPR_INVALID_TTL 2 |
2010 | 16 | #define OFPR_ACTION_SET 3 |
2011 | 16 | #define OFPR_GROUP 4 |
2012 | 16 | #define OFPR_PACKET_OUT 5 |
2013 | | static const value_string openflow_v5_packet_in_reason_values[] = { |
2014 | | { OFPR_TABLE_MISS, "OFPR_TABLE_MISS" }, |
2015 | | { OFPR_APPLY_ACTION, "OFPR_APPLY_ACTION" }, |
2016 | | { OFPR_INVALID_TTL, "OFPR_INVALID_TTL" }, |
2017 | | { OFPR_ACTION_SET, "OFPR_ACTION_SET" }, |
2018 | | { OFPR_GROUP, "OFPR_GROUP " }, |
2019 | | { OFPR_PACKET_OUT, "OFPR_PACKET_OUT" }, |
2020 | | { 0, NULL } |
2021 | | }; |
2022 | | |
2023 | | static void |
2024 | | dissect_openflow_packet_in_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2025 | 0 | { |
2026 | 0 | proto_tree *data_tree; |
2027 | 0 | tvbuff_t *next_tvb; |
2028 | 0 | bool save_writable; |
2029 | 0 | bool save_in_error_pkt; |
2030 | 0 | address save_dl_src, save_dl_dst, save_net_src, save_net_dst, save_src, save_dst; |
2031 | | |
2032 | | /* uint32_t buffer_id; */ |
2033 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_in_buffer_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
2034 | 0 | offset+=4; |
2035 | | |
2036 | | /* uint16_t total_len; */ |
2037 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_in_total_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
2038 | 0 | offset+=2; |
2039 | | |
2040 | | /* uint8_t reason; */ |
2041 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_in_reason, tvb, offset, 1, ENC_BIG_ENDIAN); |
2042 | 0 | offset+=1; |
2043 | | |
2044 | | /* uint8_t table_id; */ |
2045 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_in_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
2046 | 0 | offset+=1; |
2047 | | |
2048 | | /* uint64_t cookie; */ |
2049 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_in_cookie, tvb, offset, 8, ENC_BIG_ENDIAN); |
2050 | 0 | offset+=8; |
2051 | | |
2052 | | /* struct ofp_match match; */ |
2053 | 0 | offset = dissect_openflow_match_v5(tvb, pinfo, tree, offset, length); |
2054 | | |
2055 | | /* uint8_t pad[2]; */ |
2056 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_in_pad, tvb, offset, 2, ENC_NA); |
2057 | 0 | offset+=2; |
2058 | | |
2059 | | /* uint8_t data[0]; */ |
2060 | 0 | if (offset < length) { |
2061 | 0 | data_tree = proto_tree_add_subtree(tree, tvb, offset, length - offset, ett_openflow_v5_packet_in_data, NULL, "Data"); |
2062 | | |
2063 | | /* save some state */ |
2064 | 0 | save_writable = col_get_writable(pinfo->cinfo, -1); |
2065 | 0 | save_in_error_pkt = pinfo->flags.in_error_pkt; |
2066 | 0 | copy_address_shallow(&save_dl_src, &pinfo->dl_src); |
2067 | 0 | copy_address_shallow(&save_dl_dst, &pinfo->dl_dst); |
2068 | 0 | copy_address_shallow(&save_net_src, &pinfo->net_src); |
2069 | 0 | copy_address_shallow(&save_net_dst, &pinfo->net_dst); |
2070 | 0 | copy_address_shallow(&save_src, &pinfo->src); |
2071 | 0 | copy_address_shallow(&save_dst, &pinfo->dst); |
2072 | | |
2073 | | /* dissect data */ |
2074 | 0 | col_set_writable(pinfo->cinfo, -1, false); |
2075 | 0 | next_tvb = tvb_new_subset_length(tvb, offset, length - offset); |
2076 | 0 | call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, data_tree); |
2077 | | |
2078 | | /* restore saved state */ |
2079 | 0 | col_set_writable(pinfo->cinfo, -1, save_writable); |
2080 | 0 | pinfo->flags.in_error_pkt = save_in_error_pkt; |
2081 | 0 | copy_address_shallow(&pinfo->dl_src, &save_dl_src); |
2082 | 0 | copy_address_shallow(&pinfo->dl_dst, &save_dl_dst); |
2083 | 0 | copy_address_shallow(&pinfo->net_src, &save_net_src); |
2084 | 0 | copy_address_shallow(&pinfo->net_dst, &save_net_dst); |
2085 | 0 | copy_address_shallow(&pinfo->src, &save_src); |
2086 | 0 | copy_address_shallow(&pinfo->dst, &save_dst); |
2087 | 0 | } |
2088 | 0 | } |
2089 | | |
2090 | | |
2091 | 16 | #define OFPRR_IDLE_TIMEOUT 0 |
2092 | 16 | #define OFPRR_HARD_TIMEOUT 1 |
2093 | 16 | #define OFPRR_DELETE 2 |
2094 | 16 | #define OFPRR_GROUP_DELETE 3 |
2095 | 16 | #define OFPRR_METER_DELETE 4 |
2096 | 16 | #define OFPRR_EVICTION 5 |
2097 | | static const value_string openflow_v5_flow_removed_reason_values[] = { |
2098 | | { OFPRR_IDLE_TIMEOUT, "OFPRR_IDLE_TIMEOUT" }, |
2099 | | { OFPRR_HARD_TIMEOUT, "OFPRR_HARD_TIMEOUT" }, |
2100 | | { OFPRR_DELETE, "OFPRR_DELETE" }, |
2101 | | { OFPRR_GROUP_DELETE, "OFPRR_GROUP_DELETE" }, |
2102 | | { OFPRR_METER_DELETE, "OFPRR_METER_DELETE" }, |
2103 | | { OFPRR_EVICTION, "OFPRR_EVICTION" }, |
2104 | | { 0, NULL } |
2105 | | }; |
2106 | | |
2107 | | static void |
2108 | | dissect_openflow_flow_removed_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2109 | 0 | { |
2110 | | /* uint64_t cookie; */ |
2111 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_cookie, tvb, offset, 8, ENC_BIG_ENDIAN); |
2112 | 0 | offset+=8; |
2113 | | |
2114 | | /* uint16_t priority; */ |
2115 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_priority, tvb, offset, 2, ENC_BIG_ENDIAN); |
2116 | 0 | offset+=2; |
2117 | | |
2118 | | /* uint8_t reason; */ |
2119 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_reason, tvb, offset, 1, ENC_BIG_ENDIAN); |
2120 | 0 | offset+=1; |
2121 | | |
2122 | | /* uint8_t table_id; */ |
2123 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
2124 | 0 | offset+=1; |
2125 | | |
2126 | | /* uint32_t duration_sec; */ |
2127 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_duration_sec, tvb, offset, 4, ENC_BIG_ENDIAN); |
2128 | 0 | offset+=4; |
2129 | | |
2130 | | /* uint32_t duration_nsec; */ |
2131 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_duration_nsec, tvb, offset, 4, ENC_BIG_ENDIAN); |
2132 | 0 | offset+=4; |
2133 | | |
2134 | | /* uint16_t idle_timeout; */ |
2135 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_idle_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
2136 | 0 | offset+=2; |
2137 | | |
2138 | | /* uint16_t hard_timeout; */ |
2139 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_hard_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
2140 | 0 | offset+=2; |
2141 | | |
2142 | | /* uint64_t packet_count; */ |
2143 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_packet_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
2144 | 0 | offset+=8; |
2145 | | |
2146 | | /* uint64_t byte_count; */ |
2147 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_removed_byte_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
2148 | 0 | offset+=8; |
2149 | | |
2150 | | /* struct ofp_match match; */ |
2151 | 0 | dissect_openflow_match_v5(tvb, pinfo, tree, offset, length); |
2152 | 0 | } |
2153 | | |
2154 | 101 | #define OFPAT_OUTPUT 0 /* Output to switch port. */ |
2155 | 64 | #define OFPAT_COPY_TTL_OUT 11 /* Copy TTL "outwards" */ |
2156 | 64 | #define OFPAT_COPY_TTL_IN 12 /* Copy TTL "inwards" */ |
2157 | 64 | #define OFPAT_SET_MPLS_TTL 15 /* MPLS TTL */ |
2158 | 65 | #define OFPAT_DEC_MPLS_TTL 16 /* Decrement MPLS TTL */ |
2159 | 64 | #define OFPAT_PUSH_VLAN 17 /* Push a new VLAN tag */ |
2160 | 64 | #define OFPAT_POP_VLAN 18 /* Pop the outer VLAN tag */ |
2161 | 64 | #define OFPAT_PUSH_MPLS 19 /* Push a new MPLS tag */ |
2162 | 64 | #define OFPAT_POP_MPLS 20 /* Pop the outer MPLS tag */ |
2163 | 64 | #define OFPAT_SET_QUEUE 21 /* Set queue id when outputting to a port */ |
2164 | 64 | #define OFPAT_GROUP 22 /* Apply group. */ |
2165 | 65 | #define OFPAT_SET_NW_TTL 23 /* IP TTL. */ |
2166 | 64 | #define OFPAT_DEC_NW_TTL 24 /* Decrement IP TTL. */ |
2167 | 64 | #define OFPAT_SET_FIELD 25 /* Set a header field using OXM TLV format. */ |
2168 | 64 | #define OFPAT_PUSH_PBB 26 /* Push a new PBB service tag (I-TAG) */ |
2169 | 64 | #define OFPAT_POP_PBB 27 /* Pop the outer PBB service tag (I-TAG) */ |
2170 | 117 | #define OFPAT_EXPERIMENTER 0xffff |
2171 | | |
2172 | | static const value_string openflow_v5_action_type_values[] = { |
2173 | | { 0, "OFPAT_OUTPUT" }, |
2174 | | { 11, "OFPAT_COPY_TTL_OUT" }, |
2175 | | { 12, "OFPAT_COPY_TTL_IN" }, |
2176 | | { 15, "OFPAT_SET_MPLS_TTL" }, |
2177 | | { 16, "OFPAT_DEC_MPLS_TTL" }, |
2178 | | { 17, "OFPAT_PUSH_VLAN" }, |
2179 | | { 18, "OFPAT_POP_VLAN" }, |
2180 | | { 19, "OFPAT_PUSH_MPLS" }, |
2181 | | { 20, "OFPAT_POP_MPLS" }, |
2182 | | { 21, "OFPAT_SET_QUEUE" }, |
2183 | | { 22, "OFPAT_GROUP" }, |
2184 | | { 23, "OFPAT_SET_NW_TTL" }, |
2185 | | { 24, "OFPAT_DEC_NW_TTL" }, |
2186 | | { 25, "OFPAT_SET_FIELD" }, |
2187 | | { 26, "OFPAT_PUSH_PBB" }, |
2188 | | { 27, "OFPAT_POP_PBB" }, |
2189 | | { 0xffff, "OFPAT_EXPERIMENTER" }, |
2190 | | { 0, NULL} |
2191 | | }; |
2192 | | |
2193 | | |
2194 | | |
2195 | | static int |
2196 | | dissect_openflow_action_header_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) |
2197 | 116 | { |
2198 | 116 | uint16_t act_type; |
2199 | | |
2200 | | /* uint16_t type; */ |
2201 | 116 | act_type = tvb_get_ntohs(tvb, offset); |
2202 | 116 | proto_tree_add_item(tree, hf_openflow_v5_action_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
2203 | 116 | offset+=2; |
2204 | | |
2205 | | /* uint16_t length; */ |
2206 | 116 | proto_tree_add_item(tree, hf_openflow_v5_action_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
2207 | 116 | offset+=2; |
2208 | | |
2209 | 116 | if (act_type == OFPAT_EXPERIMENTER) { |
2210 | | /* uint32_t experimenter; */ |
2211 | 3 | proto_tree_add_item(tree, hf_openflow_v5_action_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
2212 | 3 | offset+=4; |
2213 | 3 | } |
2214 | | |
2215 | 116 | return offset; |
2216 | 116 | } |
2217 | | |
2218 | | |
2219 | | static int |
2220 | | dissect_openflow_action_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset) |
2221 | 62 | { |
2222 | 62 | proto_tree *act_tree; |
2223 | 62 | uint16_t act_type; |
2224 | 62 | uint16_t act_length; |
2225 | 62 | int32_t act_end; |
2226 | | |
2227 | 62 | act_type = tvb_get_ntohs(tvb, offset); |
2228 | 62 | act_length = tvb_get_ntohs(tvb, offset + 2); |
2229 | 62 | act_end = offset + act_length; |
2230 | | |
2231 | 62 | act_tree = proto_tree_add_subtree(tree, tvb, offset, act_length, ett_openflow_v5_action, NULL, "Action"); |
2232 | | |
2233 | 62 | offset = dissect_openflow_action_header_v5(tvb, pinfo, act_tree, offset); |
2234 | | |
2235 | 62 | switch (act_type) { |
2236 | 37 | case OFPAT_OUTPUT: |
2237 | | /* uint32_t port; */ |
2238 | 37 | proto_tree_add_item(act_tree, hf_openflow_v5_action_output_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
2239 | 37 | offset+=4; |
2240 | | |
2241 | | /* uint16_t max_len; */ |
2242 | 37 | proto_tree_add_item(act_tree, hf_openflow_v5_action_output_max_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
2243 | 37 | offset+=2; |
2244 | | |
2245 | | /* uint8_t pad[6]; */ |
2246 | 37 | proto_tree_add_item(act_tree, hf_openflow_v5_action_output_pad, tvb, offset, 6, ENC_NA); |
2247 | 37 | offset+=6; |
2248 | | |
2249 | 37 | break; |
2250 | | |
2251 | 0 | case OFPAT_COPY_TTL_OUT: |
2252 | | /* uint8_t pad[4]; */ |
2253 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_copy_ttl_out_pad, tvb, offset, 4, ENC_NA); |
2254 | 0 | offset+=4; |
2255 | 0 | break; |
2256 | | |
2257 | 0 | case OFPAT_COPY_TTL_IN: |
2258 | | /* uint8_t pad[4]; */ |
2259 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_copy_ttl_in_pad, tvb, offset, 4, ENC_NA); |
2260 | 0 | offset+=4; |
2261 | 0 | break; |
2262 | | |
2263 | 0 | case OFPAT_SET_MPLS_TTL: |
2264 | | /* uint8_t mpls_ttl; */ |
2265 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_set_mpls_ttl_ttl, tvb, offset, 1, ENC_BIG_ENDIAN); |
2266 | 0 | offset+=1; |
2267 | | |
2268 | | /* uint8_t pad[3]; */ |
2269 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_set_mpls_ttl_pad, tvb, offset, 3, ENC_NA); |
2270 | 0 | offset+=3; |
2271 | 0 | break; |
2272 | | |
2273 | 1 | case OFPAT_DEC_MPLS_TTL: |
2274 | | /* uint8_t pad[4]; */ |
2275 | 1 | proto_tree_add_item(act_tree, hf_openflow_v5_action_dec_mpls_ttl_pad, tvb, offset, 4, ENC_NA); |
2276 | 1 | offset+=4; |
2277 | 1 | break; |
2278 | | |
2279 | 0 | case OFPAT_PUSH_VLAN: |
2280 | | /* uint16_t ethertype; */ |
2281 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_push_vlan_ethertype, tvb, offset, 2, ENC_BIG_ENDIAN); |
2282 | 0 | offset+=2; |
2283 | | |
2284 | | /* uint8_t pad[2]; */ |
2285 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_push_vlan_pad, tvb, offset, 2, ENC_NA); |
2286 | 0 | offset+=2; |
2287 | 0 | break; |
2288 | | |
2289 | 0 | case OFPAT_POP_VLAN: |
2290 | | /* uint8_t pad[4]; */ |
2291 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_pop_vlan_pad, tvb, offset, 4, ENC_NA); |
2292 | 0 | offset+=4; |
2293 | 0 | break; |
2294 | | |
2295 | 0 | case OFPAT_PUSH_MPLS: |
2296 | | /* uint16_t ethertype; */ |
2297 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_push_mpls_ethertype, tvb, offset, 2, ENC_BIG_ENDIAN); |
2298 | 0 | offset+=2; |
2299 | | |
2300 | | /* uint8_t pad[2]; */ |
2301 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_push_mpls_pad, tvb, offset, 2, ENC_NA); |
2302 | 0 | offset+=2; |
2303 | 0 | break; |
2304 | | |
2305 | 0 | case OFPAT_POP_MPLS: |
2306 | | /* uint16_t ethertype; */ |
2307 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_pop_mpls_ethertype, tvb, offset, 2, ENC_BIG_ENDIAN); |
2308 | 0 | offset+=2; |
2309 | | |
2310 | | /* uint8_t pad[2]; */ |
2311 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_pop_mpls_pad, tvb, offset, 2, ENC_NA); |
2312 | 0 | offset+=2; |
2313 | 0 | break; |
2314 | | |
2315 | 0 | case OFPAT_SET_QUEUE: |
2316 | | /* uint32_t queue_id; */ |
2317 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_set_queue_queue_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
2318 | 0 | offset+=4; |
2319 | 0 | break; |
2320 | | |
2321 | 0 | case OFPAT_GROUP: |
2322 | | /* uint32_t group_id; */ |
2323 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_group_group_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
2324 | 0 | offset+=4; |
2325 | 0 | break; |
2326 | | |
2327 | 1 | case OFPAT_SET_NW_TTL: |
2328 | | /* uint8_t nw_ttl; */ |
2329 | 1 | proto_tree_add_item(act_tree, hf_openflow_v5_action_set_nw_ttl_ttl, tvb, offset, 1, ENC_BIG_ENDIAN); |
2330 | 1 | offset+=1; |
2331 | | |
2332 | | /* uint8_t pad[3]; */ |
2333 | 1 | proto_tree_add_item(act_tree, hf_openflow_v5_action_set_nw_ttl_pad, tvb, offset, 3, ENC_NA); |
2334 | 1 | offset+=3; |
2335 | 1 | break; |
2336 | | |
2337 | 0 | case OFPAT_DEC_NW_TTL: |
2338 | | /* uint8_t pad[4]; */ |
2339 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_dec_nw_ttl_pad, tvb, offset, 4, ENC_NA); |
2340 | 0 | offset+=4; |
2341 | 0 | break; |
2342 | | |
2343 | 0 | case OFPAT_SET_FIELD: |
2344 | 0 | offset = dissect_openflow_oxm_v5(tvb, pinfo, act_tree, offset); |
2345 | | |
2346 | | /* padded to 64 bits */ |
2347 | 0 | if (offset < act_end) { |
2348 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_set_field_pad, tvb, offset, act_end - offset, ENC_NA); |
2349 | 0 | offset = act_end; |
2350 | 0 | } |
2351 | 0 | break; |
2352 | | |
2353 | 0 | case OFPAT_PUSH_PBB: |
2354 | | /* uint16_t ethertype; */ |
2355 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_push_pbb_ethertype, tvb, offset, 2, ENC_BIG_ENDIAN); |
2356 | 0 | offset+=2; |
2357 | | |
2358 | | /* uint8_t pad[2]; */ |
2359 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_push_pbb_pad, tvb, offset, 2, ENC_NA); |
2360 | 0 | offset+=2; |
2361 | 0 | break; |
2362 | | |
2363 | 0 | case OFPAT_POP_PBB: |
2364 | | /* uint8_t pad[4]; */ |
2365 | 0 | proto_tree_add_item(act_tree, hf_openflow_v5_action_pop_pbb_pad, tvb, offset, 4, ENC_NA); |
2366 | 0 | offset+=4; |
2367 | 0 | break; |
2368 | | |
2369 | 1 | case OFPAT_EXPERIMENTER: |
2370 | 1 | if (act_length <= 8) { |
2371 | 1 | expert_add_info(pinfo, act_tree, &ei_openflow_v5_length_too_short); |
2372 | 1 | offset = tvb_reported_length(tvb); |
2373 | 1 | break; |
2374 | 1 | } |
2375 | 0 | proto_tree_add_expert_format(act_tree, pinfo, &ei_openflow_v5_action_undecoded, |
2376 | 0 | tvb, offset, act_length - 8, "Experimenter action body."); |
2377 | 0 | offset += act_length - 8; |
2378 | 0 | break; |
2379 | | |
2380 | 22 | default: |
2381 | 22 | if (act_length <= 4) { |
2382 | 12 | expert_add_info(pinfo, act_tree, &ei_openflow_v5_length_too_short); |
2383 | 12 | offset = tvb_reported_length(tvb); |
2384 | 12 | break; |
2385 | 12 | } |
2386 | 10 | proto_tree_add_expert_format(act_tree, pinfo, &ei_openflow_v5_action_undecoded, |
2387 | 10 | tvb, offset, act_length - 4, "Unknown action body."); |
2388 | 10 | offset += act_length - 4; |
2389 | 10 | break; |
2390 | 62 | } |
2391 | | |
2392 | 50 | return offset; |
2393 | 62 | } |
2394 | | |
2395 | | |
2396 | 80 | #define OFPPF_10MB_HD 1 << 0 |
2397 | 80 | #define OFPPF_10MB_FD 1 << 1 |
2398 | 80 | #define OFPPF_100MB_HD 1 << 2 |
2399 | 80 | #define OFPPF_100MB_FD 1 << 3 |
2400 | 80 | #define OFPPF_1GB_HD 1 << 4 |
2401 | 80 | #define OFPPF_1GB_FD 1 << 5 |
2402 | 80 | #define OFPPF_10GB_FD 1 << 6 |
2403 | 80 | #define OFPPF_40GB_FD 1 << 7 |
2404 | 80 | #define OFPPF_100GB_FD 1 << 8 |
2405 | 80 | #define OFPPF_1TB_FD 1 << 9 |
2406 | 80 | #define OFPPF_OTHER 1 << 10 |
2407 | | |
2408 | 80 | #define OFPPF_COPPER 1 << 11 |
2409 | 80 | #define OFPPF_FIBER 1 << 12 |
2410 | 80 | #define OFPPF_AUTONEG 1 << 13 |
2411 | 80 | #define OFPPF_PAUSE 1 << 14 |
2412 | 80 | #define OFPPF_PAUSE_ASYM 1 << 15 |
2413 | | static int |
2414 | | dissect_openflow_port_desc_prop_ethernet_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2415 | 33 | { |
2416 | 33 | proto_item *ti; |
2417 | 33 | proto_tree *curr_tree, *adv_tree, *supp_tree, *peer_tree; |
2418 | | |
2419 | | /* uint8_t pad[4]; */ |
2420 | 33 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_ethernet_pad, tvb, offset, 2, ENC_NA); |
2421 | 33 | offset+=4; |
2422 | | |
2423 | | /* uint32_t curr; */ |
2424 | 33 | ti = proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_ethernet_current, tvb, offset, 4, ENC_BIG_ENDIAN); |
2425 | 33 | curr_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_desc_prop_ethernet_current); |
2426 | | |
2427 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_10mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2428 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_10mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2429 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_100mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2430 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_100mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2431 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_1gb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2432 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_1gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2433 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_10gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2434 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_40gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2435 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_100gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2436 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_1tb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2437 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_other, tvb, offset, 4, ENC_BIG_ENDIAN); |
2438 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_copper, tvb, offset, 4, ENC_BIG_ENDIAN); |
2439 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_fiber, tvb, offset, 4, ENC_BIG_ENDIAN); |
2440 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_autoneg, tvb, offset, 4, ENC_BIG_ENDIAN); |
2441 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_pause, tvb, offset, 4, ENC_BIG_ENDIAN); |
2442 | 33 | proto_tree_add_item(curr_tree, hf_openflow_v5_port_desc_prop_ethernet_current_pause_asym, tvb, offset, 4, ENC_BIG_ENDIAN); |
2443 | 33 | offset+=4; |
2444 | | |
2445 | | /* uint32_t advertised; */ |
2446 | 33 | ti = proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_ethernet_advertised, tvb, offset, 4, ENC_BIG_ENDIAN); |
2447 | 33 | adv_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_desc_prop_ethernet_advertised); |
2448 | | |
2449 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2450 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2451 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2452 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2453 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2454 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2455 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_10gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2456 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_40gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2457 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_100gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2458 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_1tb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2459 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_other, tvb, offset, 4, ENC_BIG_ENDIAN); |
2460 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_copper, tvb, offset, 4, ENC_BIG_ENDIAN); |
2461 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_fiber, tvb, offset, 4, ENC_BIG_ENDIAN); |
2462 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_autoneg, tvb, offset, 4, ENC_BIG_ENDIAN); |
2463 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_pause, tvb, offset, 4, ENC_BIG_ENDIAN); |
2464 | 33 | proto_tree_add_item(adv_tree, hf_openflow_v5_port_desc_prop_ethernet_advertised_pause_asym, tvb, offset, 4, ENC_BIG_ENDIAN); |
2465 | 33 | offset+=4; |
2466 | | |
2467 | | /* uint32_t supported; */ |
2468 | 33 | ti = proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_ethernet_supported, tvb, offset, 4, ENC_BIG_ENDIAN); |
2469 | 33 | supp_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_desc_prop_ethernet_supported); |
2470 | | |
2471 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2472 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2473 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2474 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2475 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2476 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2477 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_10gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2478 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_40gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2479 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_100gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2480 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_1tb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2481 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_other, tvb, offset, 4, ENC_BIG_ENDIAN); |
2482 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_copper, tvb, offset, 4, ENC_BIG_ENDIAN); |
2483 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_fiber, tvb, offset, 4, ENC_BIG_ENDIAN); |
2484 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_autoneg, tvb, offset, 4, ENC_BIG_ENDIAN); |
2485 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_pause, tvb, offset, 4, ENC_BIG_ENDIAN); |
2486 | 33 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_ethernet_supported_pause_asym, tvb, offset, 4, ENC_BIG_ENDIAN); |
2487 | 33 | offset+=4; |
2488 | | |
2489 | | /* uint32_t peer; */ |
2490 | 33 | ti = proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_ethernet_peer, tvb, offset, 4, ENC_BIG_ENDIAN); |
2491 | 33 | peer_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_desc_prop_ethernet_peer); |
2492 | | |
2493 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2494 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2495 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2496 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2497 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2498 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2499 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_10gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2500 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_40gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2501 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_100gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2502 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_1tb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2503 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_other, tvb, offset, 4, ENC_BIG_ENDIAN); |
2504 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_copper, tvb, offset, 4, ENC_BIG_ENDIAN); |
2505 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_fiber, tvb, offset, 4, ENC_BIG_ENDIAN); |
2506 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_autoneg, tvb, offset, 4, ENC_BIG_ENDIAN); |
2507 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_pause, tvb, offset, 4, ENC_BIG_ENDIAN); |
2508 | 33 | proto_tree_add_item(peer_tree, hf_openflow_v5_port_desc_prop_ethernet_peer_pause_asym, tvb, offset, 4, ENC_BIG_ENDIAN); |
2509 | 33 | offset+=4; |
2510 | | |
2511 | | /* uint32_t curr_speed; */ |
2512 | 33 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_ethernet_curr_speed, tvb, offset, 4, ENC_BIG_ENDIAN); |
2513 | 33 | offset+=4; |
2514 | | |
2515 | | /* uint32_t max_speed; */ |
2516 | 33 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_ethernet_max_speed, tvb, offset, 4, ENC_BIG_ENDIAN); |
2517 | 33 | offset+=4; |
2518 | | |
2519 | 33 | return offset; |
2520 | 33 | } |
2521 | | |
2522 | | |
2523 | 32 | #define OFPOPF_RX_TUNE 1<<0 |
2524 | 32 | #define OFPOPF_TX_TUNE 1<<1 |
2525 | 32 | #define OFPOPF_TX_PWR 1<<2 |
2526 | 32 | #define OFPOPF_USE_FREQ 1<<3 |
2527 | | static int |
2528 | | dissect_openflow_port_desc_prop_optical_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2529 | 1 | { |
2530 | 1 | proto_item *ti; |
2531 | 1 | proto_tree *supp_tree; |
2532 | | |
2533 | | /* uint8_t pad[4]; */ |
2534 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_pad, tvb, offset, 2, ENC_NA); |
2535 | 1 | offset+=4; |
2536 | | |
2537 | | /* uint32_t supported; */ |
2538 | 1 | ti = proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_supported, tvb, offset, 4, ENC_BIG_ENDIAN); |
2539 | 1 | supp_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_desc_prop_optical_supported); |
2540 | | |
2541 | 1 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_optical_supported_rx_tune, tvb, offset, 4, ENC_BIG_ENDIAN); |
2542 | 1 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_optical_supported_tx_tune, tvb, offset, 4, ENC_BIG_ENDIAN); |
2543 | 1 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_optical_supported_tx_pwr, tvb, offset, 4, ENC_BIG_ENDIAN); |
2544 | 1 | proto_tree_add_item(supp_tree, hf_openflow_v5_port_desc_prop_optical_supported_use_freq, tvb, offset, 4, ENC_BIG_ENDIAN); |
2545 | 1 | offset+=4; |
2546 | | |
2547 | | /* uint32_t tx_min_freq_lmda; */ |
2548 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_tx_min_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
2549 | 1 | offset+=4; |
2550 | | |
2551 | | /* uint32_t tx_max_freq_lmda; */ |
2552 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_tx_max_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
2553 | 1 | offset+=4; |
2554 | | |
2555 | | /* uint32_t tx_grid_freq_lmda; */ |
2556 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_tx_grid_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
2557 | 1 | offset+=4; |
2558 | | |
2559 | | /* uint32_t rx_min_freq_lmda; */ |
2560 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_rx_min_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
2561 | 1 | offset+=4; |
2562 | | |
2563 | | /* uint32_t rx_max_freq_lmda; */ |
2564 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_rx_max_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
2565 | 1 | offset+=4; |
2566 | | |
2567 | | /* uint32_t rx_grid_freq_lmda; */ |
2568 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_rx_grid_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
2569 | 1 | offset+=4; |
2570 | | |
2571 | | /* uint16_t tx_pwr_min; */ |
2572 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_tx_pwr_min, tvb, offset, 2, ENC_BIG_ENDIAN); |
2573 | 1 | offset+=2; |
2574 | | |
2575 | | /* uint16_t tx_pwr_max; */ |
2576 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_optical_tx_pwr_max, tvb, offset, 2, ENC_BIG_ENDIAN); |
2577 | 1 | offset+=2; |
2578 | | |
2579 | 1 | return offset; |
2580 | 1 | } |
2581 | | |
2582 | | |
2583 | | |
2584 | 33 | #define OFPPDPT_ETHERNET 0 |
2585 | 1 | #define OFPPDPT_OPTICAL 1 |
2586 | 1 | #define OFPPDPT_EXPERIMENTER 0xFFFF |
2587 | | static const value_string openflow_v5_port_desc_prop_type_values[] = { |
2588 | | { OFPPDPT_ETHERNET, "OFPPDPT_ETHERNET" }, |
2589 | | { OFPPDPT_OPTICAL, "OFPPDPT_OPTICAL" }, |
2590 | | { OFPPDPT_EXPERIMENTER, "OFPPDPT_EXPERIMENTER" }, |
2591 | | { 0, NULL } |
2592 | | }; |
2593 | | |
2594 | | static int |
2595 | | dissect_openflow_port_desc_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2596 | 46 | { |
2597 | 46 | proto_tree *prop_tree; |
2598 | 46 | proto_item *ti; |
2599 | 46 | uint16_t prop_type; |
2600 | 46 | uint16_t prop_length; |
2601 | | |
2602 | 46 | prop_type = tvb_get_ntohs(tvb, offset); |
2603 | 46 | prop_length = tvb_get_ntohs(tvb, offset); |
2604 | | |
2605 | 46 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, prop_length, ett_openflow_v5_port_desc_prop, NULL, "Port desc. property"); |
2606 | | |
2607 | | /* uint16_t type; */ |
2608 | 46 | proto_tree_add_item(prop_tree, hf_openflow_v5_port_desc_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
2609 | 46 | offset+=2; |
2610 | | |
2611 | | /* uint16_t len; */ |
2612 | 46 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_port_desc_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
2613 | 46 | offset+=2; |
2614 | | |
2615 | 46 | switch (prop_type) { |
2616 | 33 | case OFPPDPT_ETHERNET: |
2617 | 33 | offset = dissect_openflow_port_desc_prop_ethernet_v5(tvb, pinfo, prop_tree, offset, length); |
2618 | 33 | break; |
2619 | | |
2620 | 1 | case OFPPDPT_OPTICAL: |
2621 | 1 | offset = dissect_openflow_port_desc_prop_optical_v5(tvb, pinfo, prop_tree, offset, length); |
2622 | 1 | break; |
2623 | | |
2624 | 1 | case OFPPDPT_EXPERIMENTER: |
2625 | 1 | if (prop_length <= 12) { |
2626 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
2627 | 0 | offset = length; |
2628 | 0 | break; |
2629 | 0 | } |
2630 | | /* uint32_t experimenter; */ |
2631 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
2632 | 1 | offset+=4; |
2633 | | |
2634 | | /* uint32_t exp_type; */ |
2635 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_desc_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
2636 | 1 | offset+=4; |
2637 | | |
2638 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_port_desc_prop_undecoded, |
2639 | 1 | tvb, offset, prop_length - 12, "Experimenter port desc. property."); |
2640 | 1 | offset += prop_length - 12; |
2641 | 1 | break; |
2642 | | |
2643 | 11 | default: |
2644 | 11 | if (prop_length <= 4) { |
2645 | 1 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
2646 | 1 | offset = length; |
2647 | 1 | break; |
2648 | 1 | } |
2649 | 10 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_port_desc_prop_undecoded, |
2650 | 10 | tvb, offset, prop_length - 4, "Unknown port desc. property."); |
2651 | 10 | offset += prop_length - 4; |
2652 | 10 | break; |
2653 | 46 | } |
2654 | | |
2655 | 37 | return offset; |
2656 | 46 | } |
2657 | | |
2658 | | |
2659 | | |
2660 | 48 | #define OFPPC_PORT_DOWN 1 << 0 |
2661 | 48 | #define OFPPC_NO_RECV 1 << 2 |
2662 | 48 | #define OFPPC_NO_FWD 1 << 5 |
2663 | 48 | #define OFPPC_NO_PACKET_IN 1 << 6 |
2664 | | |
2665 | 16 | #define OFPPS_LINK_DOWN 1 << 0 |
2666 | 16 | #define OFPPS_BLOCKED 1 << 1 |
2667 | 16 | #define OFPPS_LIVE 1 << 2 |
2668 | | |
2669 | 96 | #define OFP_ETH_ALEN 6 |
2670 | 82 | #define OFP_MAX_PORT_NAME_LEN 16 |
2671 | | static int |
2672 | | dissect_openflow_port_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2673 | 41 | { |
2674 | 41 | proto_item *ti; |
2675 | 41 | proto_tree *port_tree, *conf_tree, *state_tree; |
2676 | 41 | uint16_t port_end; |
2677 | | |
2678 | 41 | port_tree = proto_tree_add_subtree(tree, tvb, offset, 64, ett_openflow_v5_port, NULL, "Port"); |
2679 | | |
2680 | | /* uint32_t port_no; */ |
2681 | 41 | proto_tree_add_item(port_tree, hf_openflow_v5_port_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
2682 | 41 | offset+=4; |
2683 | | |
2684 | | /* uint16_t length; */ |
2685 | 41 | port_end = tvb_get_ntohs(tvb, offset) + offset - 4; |
2686 | 41 | proto_tree_add_item(port_tree, hf_openflow_v5_port_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
2687 | 41 | offset+=2; |
2688 | | |
2689 | | /* uint8_t pad[2]; */ |
2690 | 41 | proto_tree_add_item(port_tree, hf_openflow_v5_port_pad, tvb, offset, 2, ENC_NA); |
2691 | 41 | offset+=2; |
2692 | | |
2693 | | /* uint8_t hw_addr[OFP_ETH_ALEN]; */ |
2694 | 41 | proto_tree_add_item(port_tree, hf_openflow_v5_port_hw_addr, tvb, offset, OFP_ETH_ALEN, ENC_NA); |
2695 | 41 | offset+=OFP_ETH_ALEN; |
2696 | | |
2697 | | /* uint8_t pad2[2]; */ |
2698 | 41 | proto_tree_add_item(port_tree, hf_openflow_v5_port_pad2, tvb, offset, 2, ENC_NA); |
2699 | 41 | offset+=2; |
2700 | | |
2701 | | /* char name[OFP_MAX_PORT_NAME_LEN]; Null-terminated */ |
2702 | 41 | proto_tree_add_item(port_tree, hf_openflow_v5_port_name, tvb, offset, OFP_MAX_PORT_NAME_LEN, ENC_ASCII); |
2703 | 41 | offset+=OFP_MAX_PORT_NAME_LEN; |
2704 | | |
2705 | | /* uint32_t config; */ |
2706 | 41 | ti = proto_tree_add_item(port_tree, hf_openflow_v5_port_config, tvb, offset, 4, ENC_BIG_ENDIAN); |
2707 | 41 | conf_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_config); |
2708 | | |
2709 | 41 | proto_tree_add_item(conf_tree, hf_openflow_v5_port_config_port_down, tvb, offset, 4, ENC_BIG_ENDIAN); |
2710 | 41 | proto_tree_add_item(conf_tree, hf_openflow_v5_port_config_no_recv, tvb, offset, 4, ENC_BIG_ENDIAN); |
2711 | 41 | proto_tree_add_item(conf_tree, hf_openflow_v5_port_config_no_fwd, tvb, offset, 4, ENC_BIG_ENDIAN); |
2712 | 41 | proto_tree_add_item(conf_tree, hf_openflow_v5_port_config_no_packet_in, tvb, offset, 4, ENC_BIG_ENDIAN); |
2713 | 41 | offset+=4; |
2714 | | |
2715 | | /* uint32_t state; */ |
2716 | 41 | ti = proto_tree_add_item(port_tree, hf_openflow_v5_port_state, tvb, offset, 4, ENC_BIG_ENDIAN); |
2717 | 41 | state_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_state); |
2718 | | |
2719 | 41 | proto_tree_add_item(state_tree, hf_openflow_v5_port_state_link_down, tvb, offset, 4, ENC_BIG_ENDIAN); |
2720 | 41 | proto_tree_add_item(state_tree, hf_openflow_v5_port_state_blocked, tvb, offset, 4, ENC_BIG_ENDIAN); |
2721 | 41 | proto_tree_add_item(state_tree, hf_openflow_v5_port_state_live, tvb, offset, 4, ENC_BIG_ENDIAN); |
2722 | 41 | offset+=4; |
2723 | | |
2724 | | /* struct ofp_port_desc_prop_header properties[0]; */ |
2725 | 87 | while (offset < port_end) { |
2726 | 46 | offset = dissect_openflow_port_desc_prop_v5(tvb, pinfo, tree, offset, length); |
2727 | 46 | } |
2728 | | |
2729 | 41 | return offset; |
2730 | 41 | } |
2731 | | |
2732 | | |
2733 | | |
2734 | 16 | #define OFPPR_ADD 0 |
2735 | 16 | #define OFPPR_DELETE 1 |
2736 | 16 | #define OFPPR_MODIFY 2 |
2737 | | static const value_string openflow_v5_port_status_reason_values[] = { |
2738 | | { OFPPR_ADD, "OFPPR_ADD" }, |
2739 | | { OFPPR_DELETE, "OFPPR_DELETE" }, |
2740 | | { OFPPR_MODIFY, "OFPPR_MODIFY" }, |
2741 | | { 0, NULL } |
2742 | | }; |
2743 | | |
2744 | | static void |
2745 | | dissect_openflow_port_status_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2746 | 0 | { |
2747 | | /* uint8_t reason; */ |
2748 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_status_reason, tvb, offset, 1, ENC_BIG_ENDIAN); |
2749 | 0 | offset+=1; |
2750 | | |
2751 | | /* uint8_t pad[7]; */ |
2752 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_status_pad, tvb, offset, 7, ENC_NA); |
2753 | 0 | offset+=7; |
2754 | | |
2755 | | /* struct ofp_port desc; */ |
2756 | 0 | dissect_openflow_port_v5(tvb, pinfo, tree, offset, length); |
2757 | 0 | } |
2758 | | |
2759 | | |
2760 | | static void |
2761 | | dissect_openflow_packet_out_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2762 | 0 | { |
2763 | 0 | proto_tree *data_tree; |
2764 | 0 | uint16_t acts_len; |
2765 | 0 | int acts_offset = 0; |
2766 | 0 | tvbuff_t *acts_tvb; |
2767 | 0 | tvbuff_t *next_tvb; |
2768 | 0 | bool save_writable; |
2769 | 0 | bool save_in_error_pkt; |
2770 | 0 | address save_dl_src, save_dl_dst, save_net_src, save_net_dst, save_src, save_dst; |
2771 | | |
2772 | | /* uint32_t buffer_id; */ |
2773 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_out_buffer_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
2774 | 0 | offset+=4; |
2775 | | |
2776 | | /* uint32_t in_port; */ |
2777 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_out_in_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
2778 | 0 | offset+=4; |
2779 | | |
2780 | | /* uint16_t actions_len; */ |
2781 | 0 | proto_tree_add_item_ret_uint16(tree, hf_openflow_v5_packet_out_acts_len, tvb, offset, 2, ENC_BIG_ENDIAN, &acts_len); |
2782 | 0 | offset+=2; |
2783 | | |
2784 | | /* uint8_t pad[6]; */ |
2785 | 0 | proto_tree_add_item(tree, hf_openflow_v5_packet_out_pad, tvb, offset, 6, ENC_NA); |
2786 | 0 | offset+=6; |
2787 | | |
2788 | | /* struct ofp_action_header actions[0]; */ |
2789 | 0 | acts_tvb = tvb_new_subset_length(tvb, offset, acts_len); |
2790 | |
|
2791 | 0 | while (tvb_reported_length_remaining(acts_tvb, acts_offset)) { |
2792 | 0 | acts_offset = dissect_openflow_action_v5(acts_tvb, pinfo, tree, acts_offset); |
2793 | 0 | } |
2794 | 0 | offset += acts_offset; |
2795 | | |
2796 | | /* uint8_t data[0]; */ |
2797 | 0 | if (offset < length) { |
2798 | 0 | data_tree = proto_tree_add_subtree(tree, tvb, offset, length - offset, ett_openflow_v5_packet_out_data, NULL, "Data"); |
2799 | | |
2800 | | /* save some state */ |
2801 | 0 | save_writable = col_get_writable(pinfo->cinfo, -1); |
2802 | 0 | save_in_error_pkt = pinfo->flags.in_error_pkt; |
2803 | 0 | copy_address_shallow(&save_dl_src, &pinfo->dl_src); |
2804 | 0 | copy_address_shallow(&save_dl_dst, &pinfo->dl_dst); |
2805 | 0 | copy_address_shallow(&save_net_src, &pinfo->net_src); |
2806 | 0 | copy_address_shallow(&save_net_dst, &pinfo->net_dst); |
2807 | 0 | copy_address_shallow(&save_src, &pinfo->src); |
2808 | 0 | copy_address_shallow(&save_dst, &pinfo->dst); |
2809 | | |
2810 | | /* dissect data */ |
2811 | 0 | col_set_writable(pinfo->cinfo, -1, false); |
2812 | 0 | next_tvb = tvb_new_subset_length(tvb, offset, length - offset); |
2813 | 0 | call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, data_tree); |
2814 | | |
2815 | | /* restore saved state */ |
2816 | 0 | col_set_writable(pinfo->cinfo, -1, save_writable); |
2817 | 0 | pinfo->flags.in_error_pkt = save_in_error_pkt; |
2818 | 0 | copy_address_shallow(&pinfo->dl_src, &save_dl_src); |
2819 | 0 | copy_address_shallow(&pinfo->dl_dst, &save_dl_dst); |
2820 | 0 | copy_address_shallow(&pinfo->net_src, &save_net_src); |
2821 | 0 | copy_address_shallow(&pinfo->net_dst, &save_net_dst); |
2822 | 0 | copy_address_shallow(&pinfo->src, &save_src); |
2823 | 0 | copy_address_shallow(&pinfo->dst, &save_dst); |
2824 | 0 | } |
2825 | 0 | } |
2826 | | |
2827 | | |
2828 | 1 | #define OFPIT_GOTO_TABLE 1 /* Setup the next table in the lookup */ |
2829 | 0 | #define OFPIT_WRITE_METADATA 2 /* Setup the metadata field for use later in */ |
2830 | 0 | #define OFPIT_WRITE_ACTIONS 3 /* Write the action(s) onto the datapath action */ |
2831 | 3 | #define OFPIT_APPLY_ACTIONS 4 /* Applies the action(s) immediately */ |
2832 | 3 | #define OFPIT_CLEAR_ACTIONS 5 /* Clears all actions from the datapath */ |
2833 | 0 | #define OFPIT_METER 6 /* Apply meter (rate limiter) */ |
2834 | 1.12k | #define OFPIT_EXPERIMENTER 0xFFFF /* Experimenter instruction */ |
2835 | | static const value_string openflow_v5_instruction_type_values[] = { |
2836 | | { 0x0001, "OFPIT_GOTO_TABLE" }, |
2837 | | { 0x0002, "OFPIT_WRITE_METADATA" }, |
2838 | | { 0x0003, "OFPIT_WRITE_ACTIONS" }, |
2839 | | { 0x0004, "OFPIT_APPLY_ACTIONS" }, |
2840 | | { 0x0005, "OFPIT_CLEAR_ACTIONS" }, |
2841 | | { 0x0006, "OFPIT_METER" }, |
2842 | | { 0xffff, "OFPIT_EXPERIMENTER = 0xFFFF" }, |
2843 | | { 0, NULL } |
2844 | | }; |
2845 | | |
2846 | | |
2847 | | |
2848 | | static int |
2849 | | dissect_openflow_instruction_header_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2850 | 1.12k | { |
2851 | 1.12k | uint16_t inst_type; |
2852 | | |
2853 | | /* uint16_t type; */ |
2854 | 1.12k | inst_type = tvb_get_ntohs(tvb, offset); |
2855 | 1.12k | proto_tree_add_item(tree, hf_openflow_v5_instruction_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
2856 | 1.12k | offset+=2; |
2857 | | |
2858 | | /* uint16_t length; */ |
2859 | 1.12k | proto_tree_add_item(tree, hf_openflow_v5_instruction_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
2860 | 1.12k | offset+=2; |
2861 | | |
2862 | 1.12k | if (inst_type == OFPIT_EXPERIMENTER) { |
2863 | | /* uint32_t experimenter; */ |
2864 | 96 | proto_tree_add_item(tree, hf_openflow_v5_instruction_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
2865 | 96 | offset+=4; |
2866 | 96 | } |
2867 | | |
2868 | 1.12k | return offset; |
2869 | 1.12k | } |
2870 | | |
2871 | | |
2872 | | static int |
2873 | | dissect_openflow_instruction_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
2874 | 162 | { |
2875 | 162 | proto_tree *inst_tree; |
2876 | 162 | uint16_t inst_type; |
2877 | 162 | uint16_t inst_length; |
2878 | 162 | tvbuff_t *acts_tvb; |
2879 | 162 | int acts_offset = 0; |
2880 | | |
2881 | 162 | inst_type = tvb_get_ntohs(tvb, offset); |
2882 | 162 | inst_length = tvb_get_ntohs(tvb, offset + 2); |
2883 | | |
2884 | 162 | inst_tree = proto_tree_add_subtree(tree, tvb, offset, inst_length, ett_openflow_v5_instruction, NULL, "Instruction"); |
2885 | | |
2886 | 162 | offset = dissect_openflow_instruction_header_v5(tvb, pinfo, inst_tree, offset, length); |
2887 | | |
2888 | 162 | if (inst_length < 8) { |
2889 | 141 | inst_length = 8; |
2890 | 141 | } |
2891 | | |
2892 | 162 | switch (inst_type) { |
2893 | 1 | case OFPIT_GOTO_TABLE: |
2894 | | /* uint8_t table_id; */ |
2895 | 1 | proto_tree_add_item(inst_tree, hf_openflow_v5_instruction_goto_table_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
2896 | 1 | offset+=1; |
2897 | | |
2898 | | /* uint8_t pad[3]; */ |
2899 | 1 | proto_tree_add_item(inst_tree, hf_openflow_v5_instruction_goto_table_pad, tvb, offset, 3, ENC_NA); |
2900 | 1 | offset+=3; |
2901 | 1 | break; |
2902 | | |
2903 | 0 | case OFPIT_WRITE_METADATA: |
2904 | | /* uint8_t pad[4]; */ |
2905 | 0 | proto_tree_add_item(inst_tree, hf_openflow_v5_instruction_write_metadata_pad, tvb, offset, 4, ENC_NA); |
2906 | 0 | offset+=4; |
2907 | | |
2908 | | /* uint64_t metadata; */ |
2909 | 0 | proto_tree_add_item(inst_tree, hf_openflow_v5_instruction_write_metadata_value, tvb, offset, 8, ENC_BIG_ENDIAN); |
2910 | 0 | offset+=8; |
2911 | | |
2912 | | /* uint64_t metadata_mask; */ |
2913 | 0 | proto_tree_add_item(inst_tree, hf_openflow_v5_instruction_write_metadata_mask, tvb, offset, 8, ENC_BIG_ENDIAN); |
2914 | 0 | offset+=8; |
2915 | 0 | break; |
2916 | | |
2917 | 0 | case OFPIT_WRITE_ACTIONS: |
2918 | 3 | case OFPIT_APPLY_ACTIONS: |
2919 | 3 | case OFPIT_CLEAR_ACTIONS: |
2920 | 3 | proto_tree_add_item(inst_tree, hf_openflow_v5_instruction_actions_pad, tvb, offset, 4, ENC_NA); |
2921 | 3 | offset+=4; |
2922 | | |
2923 | 3 | acts_tvb = tvb_new_subset_length(tvb, offset, inst_length - 8); |
2924 | 9 | while (tvb_reported_length_remaining(acts_tvb, acts_offset)) { |
2925 | 6 | acts_offset = dissect_openflow_action_v5(acts_tvb, pinfo, inst_tree, acts_offset); |
2926 | 6 | } |
2927 | 3 | offset += acts_offset; |
2928 | 3 | break; |
2929 | | |
2930 | 0 | case OFPIT_METER: |
2931 | | /* uint32_t meter_id; */ |
2932 | 0 | proto_tree_add_item(inst_tree, hf_openflow_v5_instruction_meter_meter_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
2933 | 0 | offset+=4; |
2934 | 0 | break; |
2935 | | |
2936 | 1 | case OFPIT_EXPERIMENTER: |
2937 | 1 | if (inst_length <= 8) { |
2938 | 0 | expert_add_info(pinfo, inst_tree, &ei_openflow_v5_length_too_short); |
2939 | 0 | offset = length; |
2940 | 0 | break; |
2941 | 0 | } |
2942 | 1 | proto_tree_add_expert_format(inst_tree, pinfo, &ei_openflow_v5_instruction_undecoded, |
2943 | 1 | tvb, offset, inst_length - 8, "Experimenter instruction body."); |
2944 | 1 | offset += inst_length - 8; |
2945 | 1 | break; |
2946 | | |
2947 | 157 | default: |
2948 | 157 | if (inst_length <= 4) { |
2949 | 0 | expert_add_info(pinfo, inst_tree, &ei_openflow_v5_length_too_short); |
2950 | 0 | offset = length; |
2951 | 0 | break; |
2952 | 0 | } |
2953 | 157 | proto_tree_add_expert_format(inst_tree, pinfo, &ei_openflow_v5_instruction_undecoded, |
2954 | 157 | tvb, offset, inst_length - 4, "Unknown instruction body."); |
2955 | 157 | offset += inst_length - 4; |
2956 | 157 | break; |
2957 | 162 | } |
2958 | | |
2959 | 147 | return offset; |
2960 | 162 | } |
2961 | | |
2962 | | |
2963 | | static const value_string openflow_v5_flowmod_command_values[] = { |
2964 | | { 0, "OFPFC_ADD" }, |
2965 | | { 1, "OFPFC_MODIFY" }, |
2966 | | { 2, "OFPFC_MODIFY_STRICT" }, |
2967 | | { 3, "OFPFC_DELETE" }, |
2968 | | { 4, "OFPFC_DELETE_STRICT" }, |
2969 | | { 0, NULL } |
2970 | | }; |
2971 | | |
2972 | 32 | #define OFPFF_SEND_FLOW_REM 1 << 0 /* Send flow removed message when flow expires or is deleted. */ |
2973 | 32 | #define OFPFF_CHECK_OVERLAP 1 << 1 /* Check for overlapping entries first. */ |
2974 | 32 | #define OFPFF_RESET_COUNTS 1 << 2 /* Reset flow packet and byte counts. */ |
2975 | 32 | #define OFPFF_NO_PKT_COUNTS 1 << 3 /* Don't keep track of packet count. */ |
2976 | 32 | #define OFPFF_NO_BYT_COUNTS 1 << 4 /* Don't keep track of byte count. */ |
2977 | | |
2978 | | static void |
2979 | | dissect_openflow_flowmod_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
2980 | 2 | { |
2981 | 2 | proto_item *ti; |
2982 | 2 | proto_tree *flags_tree; |
2983 | | |
2984 | | /* uint64_t cookie; */ |
2985 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_cookie, tvb, offset, 8, ENC_BIG_ENDIAN); |
2986 | 2 | offset+=8; |
2987 | | |
2988 | | /* uint64_t cookie_mask; */ |
2989 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_cookie_mask, tvb, offset, 8, ENC_BIG_ENDIAN); |
2990 | 2 | offset+=8; |
2991 | | |
2992 | | /* uint8_t table_id; */ |
2993 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
2994 | 2 | offset+=1; |
2995 | | |
2996 | | /* uint8_t command; */ |
2997 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_command, tvb, offset, 1, ENC_BIG_ENDIAN); |
2998 | 2 | offset+=1; |
2999 | | |
3000 | | /* uint16_t idle_timeout; */ |
3001 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_idle_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
3002 | 2 | offset+=2; |
3003 | | |
3004 | | /* uint16_t hard_timeout; */ |
3005 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_hard_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
3006 | 2 | offset+=2; |
3007 | | |
3008 | | /* uint16_t priority; */ |
3009 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_priority, tvb, offset, 2, ENC_BIG_ENDIAN); |
3010 | 2 | offset+=2; |
3011 | | |
3012 | | /* uint32_t buffer_id; */ |
3013 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_buffer_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3014 | 2 | offset+=4; |
3015 | | |
3016 | | /* uint32_t out_port; */ |
3017 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_out_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
3018 | 2 | offset+=4; |
3019 | | |
3020 | | /* uint32_t out_group; */ |
3021 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_out_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
3022 | 2 | offset+=4; |
3023 | | |
3024 | | /* uint16_t flags; */ |
3025 | 2 | ti = proto_tree_add_item(tree, hf_openflow_v5_flowmod_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
3026 | 2 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_flowmod_flags); |
3027 | | |
3028 | 2 | proto_tree_add_item(flags_tree, hf_openflow_v5_flowmod_flags_send_flow_rem, tvb, offset, 2, ENC_BIG_ENDIAN); |
3029 | 2 | proto_tree_add_item(flags_tree, hf_openflow_v5_flowmod_flags_check_overlap, tvb, offset, 2, ENC_BIG_ENDIAN); |
3030 | 2 | proto_tree_add_item(flags_tree, hf_openflow_v5_flowmod_flags_reset_counts, tvb, offset, 2, ENC_BIG_ENDIAN); |
3031 | 2 | proto_tree_add_item(flags_tree, hf_openflow_v5_flowmod_flags_no_packet_counts, tvb, offset, 2, ENC_BIG_ENDIAN); |
3032 | 2 | proto_tree_add_item(flags_tree, hf_openflow_v5_flowmod_flags_no_byte_counts, tvb, offset, 2, ENC_BIG_ENDIAN); |
3033 | 2 | offset+=2; |
3034 | | |
3035 | | /* uint16_t importance; */ |
3036 | 2 | proto_tree_add_item(tree, hf_openflow_v5_flowmod_importance, tvb, offset, 2, ENC_BIG_ENDIAN); |
3037 | 2 | offset+=2; |
3038 | | |
3039 | | /* struct ofp_match match; */ |
3040 | 2 | offset = dissect_openflow_match_v5(tvb, pinfo, tree, offset, length); |
3041 | | |
3042 | | /* struct ofp_instruction instructions[0]; */ |
3043 | 11 | while (offset < length) { |
3044 | 9 | offset = dissect_openflow_instruction_v5(tvb, pinfo, tree, offset, length); |
3045 | 9 | } |
3046 | 2 | } |
3047 | | |
3048 | | static int |
3049 | | dissect_openflow_bucket_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3050 | 140 | { |
3051 | 140 | proto_item *ti; |
3052 | 140 | proto_tree *bucket_tree; |
3053 | 140 | uint16_t bucket_length; |
3054 | 140 | tvbuff_t *acts_tvb; |
3055 | 140 | int acts_offset = 0; |
3056 | | |
3057 | 140 | bucket_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_bucket, &ti, "Bucket"); |
3058 | | |
3059 | | /* uint16_t len; */ |
3060 | 140 | bucket_length = tvb_get_ntohs(tvb, offset); |
3061 | 140 | proto_item_set_len(ti, bucket_length); |
3062 | 140 | proto_tree_add_item(bucket_tree, hf_openflow_v5_bucket_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
3063 | 140 | offset+=2; |
3064 | | |
3065 | 140 | if (bucket_length < 16) { |
3066 | 114 | bucket_length = 16; |
3067 | 114 | } |
3068 | | |
3069 | | /* uint16_t weight; */ |
3070 | 140 | proto_tree_add_item(bucket_tree, hf_openflow_v5_bucket_weight, tvb, offset, 2, ENC_BIG_ENDIAN); |
3071 | 140 | offset+=2; |
3072 | | |
3073 | | /* uint32_t watch_port; */ |
3074 | 140 | proto_tree_add_item(bucket_tree, hf_openflow_v5_bucket_watch_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
3075 | 140 | offset+=4; |
3076 | | |
3077 | | /* uint32_t watch_group; */ |
3078 | 140 | proto_tree_add_item(bucket_tree, hf_openflow_v5_bucket_watch_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
3079 | 140 | offset+=4; |
3080 | | |
3081 | | /* uint8_t pad[4]; */ |
3082 | 140 | proto_tree_add_item(bucket_tree, hf_openflow_v5_bucket_pad, tvb, offset, 4, ENC_NA); |
3083 | 140 | offset+=4; |
3084 | | |
3085 | | /*struct ofp_action_header actions[0]; */ |
3086 | 140 | acts_tvb = tvb_new_subset_length(tvb, offset, bucket_length - 16); |
3087 | 196 | while (tvb_reported_length_remaining(acts_tvb, acts_offset)) { |
3088 | 56 | acts_offset = dissect_openflow_action_v5(acts_tvb, pinfo, bucket_tree, acts_offset); |
3089 | 56 | } |
3090 | 140 | offset += acts_offset; |
3091 | | |
3092 | 140 | return offset; |
3093 | 140 | } |
3094 | | |
3095 | | |
3096 | | static const value_string openflow_v5_groupmod_command_values[] = { |
3097 | | { 0, "OFPGC_ADD" }, |
3098 | | { 1, "OFPGC_MODIFY" }, |
3099 | | { 2, "OFPGC_DELETE" }, |
3100 | | { 0, NULL } |
3101 | | }; |
3102 | | |
3103 | 16 | #define OFPGT_ALL 0 |
3104 | 16 | #define OFPGT_SELECT 1 |
3105 | 16 | #define OFPGT_INDIRECT 2 |
3106 | 16 | #define OFPGT_FF 3 |
3107 | | static const value_string openflow_v5_group_type_values[] = { |
3108 | | { OFPGT_ALL, "OFPGT_ALL" }, |
3109 | | { OFPGT_SELECT, "OFPGT_SELECT" }, |
3110 | | { OFPGT_INDIRECT, "OFPGT_INDIRECT" }, |
3111 | | { OFPGT_FF, "OFPGT_FF" }, |
3112 | | { 0, NULL } |
3113 | | }; |
3114 | | |
3115 | | static void |
3116 | | dissect_openflow_groupmod_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
3117 | 0 | { |
3118 | | /* uint16_t command; */ |
3119 | 0 | proto_tree_add_item(tree, hf_openflow_v5_groupmod_command, tvb, offset, 2, ENC_BIG_ENDIAN); |
3120 | 0 | offset+=2; |
3121 | | |
3122 | | /* uint8_t type; */ |
3123 | 0 | proto_tree_add_item(tree, hf_openflow_v5_groupmod_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
3124 | 0 | offset+=1; |
3125 | | |
3126 | | /* uint8_t pad; */ |
3127 | 0 | proto_tree_add_item(tree, hf_openflow_v5_groupmod_pad, tvb, offset, 1, ENC_NA); |
3128 | 0 | offset+=1; |
3129 | | |
3130 | | /* uint32_t group_id; */ |
3131 | 0 | proto_tree_add_item(tree, hf_openflow_v5_groupmod_group_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3132 | 0 | offset+=4; |
3133 | | |
3134 | | /* struct ofp_bucket buckets[0]; */ |
3135 | 0 | while (offset < length) { |
3136 | 0 | offset = dissect_openflow_bucket_v5(tvb, pinfo, tree, offset, length); |
3137 | 0 | } |
3138 | 0 | } |
3139 | | |
3140 | | |
3141 | | |
3142 | | static int |
3143 | | dissect_openflow_portmod_prop_ethernet_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3144 | 2 | { |
3145 | 2 | proto_item *ti; |
3146 | 2 | proto_tree *adv_tree; |
3147 | | |
3148 | | /* uint32_t advertise; */ |
3149 | 2 | ti = proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_ethernet_advertise, tvb, offset, 4, ENC_BIG_ENDIAN); |
3150 | 2 | adv_tree = proto_item_add_subtree(ti, ett_openflow_v5_portmod_prop_ethernet_advertise); |
3151 | | |
3152 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3153 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3154 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3155 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3156 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_hd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3157 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3158 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_10gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3159 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_40gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3160 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_100gb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3161 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_1tb_fd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3162 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_other, tvb, offset, 4, ENC_BIG_ENDIAN); |
3163 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_copper, tvb, offset, 4, ENC_BIG_ENDIAN); |
3164 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_fiber, tvb, offset, 4, ENC_BIG_ENDIAN); |
3165 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_autoneg, tvb, offset, 4, ENC_BIG_ENDIAN); |
3166 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_pause, tvb, offset, 4, ENC_BIG_ENDIAN); |
3167 | 2 | proto_tree_add_item(adv_tree, hf_openflow_v5_portmod_prop_ethernet_advertise_pause_asym, tvb, offset, 4, ENC_BIG_ENDIAN); |
3168 | 2 | offset+=4; |
3169 | | |
3170 | 2 | return offset; |
3171 | 2 | } |
3172 | | |
3173 | | static int |
3174 | | dissect_openflow_portmod_prop_optical_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3175 | 1 | { |
3176 | 1 | proto_item *ti; |
3177 | 1 | proto_tree *conf_tree; |
3178 | | |
3179 | | /* uint32_t configure; */ |
3180 | 1 | ti = proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_optical_configure, tvb, offset, 4, ENC_BIG_ENDIAN); |
3181 | 1 | conf_tree = proto_item_add_subtree(ti, ett_openflow_v5_portmod_prop_optical_configure); |
3182 | | |
3183 | 1 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_prop_optical_configure_rx_tune, tvb, offset, 4, ENC_BIG_ENDIAN); |
3184 | 1 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_prop_optical_configure_tx_tune, tvb, offset, 4, ENC_BIG_ENDIAN); |
3185 | 1 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_prop_optical_configure_tx_pwr, tvb, offset, 4, ENC_BIG_ENDIAN); |
3186 | 1 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_prop_optical_configure_use_freq, tvb, offset, 4, ENC_BIG_ENDIAN); |
3187 | 1 | offset+=4; |
3188 | | |
3189 | | /* uint32_t freq_lmda; */ |
3190 | 1 | proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_optical_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
3191 | 1 | offset+=4; |
3192 | | |
3193 | | /* int32_t fl_offset; */ |
3194 | 1 | proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_optical_fl_offset, tvb, offset, 4, ENC_BIG_ENDIAN); |
3195 | 1 | offset+=4; |
3196 | | |
3197 | | /* uint32_t grid_span; */ |
3198 | 1 | proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_optical_grid_span, tvb, offset, 4, ENC_BIG_ENDIAN); |
3199 | 1 | offset+=4; |
3200 | | |
3201 | | /* uint32_t tx_pwr; */ |
3202 | 1 | proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_optical_tx_pwr, tvb, offset, 4, ENC_BIG_ENDIAN); |
3203 | 1 | offset+=4; |
3204 | | |
3205 | 1 | return offset; |
3206 | 1 | } |
3207 | | |
3208 | | |
3209 | | |
3210 | 2 | #define OFPPMPT_ETHERNET 0 |
3211 | 1 | #define OFPPMPT_OPTICAL 1 |
3212 | 1 | #define OFPPMPT_EXPERIMENTER 0xFFFF |
3213 | | static const value_string openflow_v5_portmod_prop_type_values[] = { |
3214 | | { OFPPMPT_ETHERNET, "OFPPMPT_ETHERNET" }, |
3215 | | { OFPPMPT_OPTICAL, "OFPPMPT_OPTICAL" }, |
3216 | | { OFPPMPT_EXPERIMENTER, "OFPPMPT_EXPERIMENTER" }, |
3217 | | { 0, NULL } |
3218 | | }; |
3219 | | |
3220 | | static int |
3221 | | dissect_openflow_portmod_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3222 | 14 | { |
3223 | 14 | proto_tree *prop_tree; |
3224 | 14 | uint16_t prop_type; |
3225 | 14 | uint16_t prop_length; |
3226 | | |
3227 | 14 | prop_type = tvb_get_ntohs(tvb, offset); |
3228 | 14 | prop_length = tvb_get_ntohs(tvb, offset + 2); |
3229 | | |
3230 | 14 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, prop_length, ett_openflow_v5_portmod_prop, NULL, "Portmod property"); |
3231 | | |
3232 | | /* uint16_t type; */ |
3233 | 14 | proto_tree_add_item(prop_tree, hf_openflow_v5_portmod_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
3234 | 14 | offset+=2; |
3235 | | |
3236 | | /* uint16_t len; */ |
3237 | 14 | proto_tree_add_item(prop_tree, hf_openflow_v5_portmod_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
3238 | 14 | offset+=2; |
3239 | | |
3240 | 14 | switch (prop_type) { |
3241 | 2 | case OFPPMPT_ETHERNET: |
3242 | 2 | offset = dissect_openflow_portmod_prop_ethernet_v5(tvb, pinfo, prop_tree, offset, length); |
3243 | 2 | break; |
3244 | | |
3245 | 1 | case OFPPMPT_OPTICAL: |
3246 | 1 | offset = dissect_openflow_portmod_prop_optical_v5(tvb, pinfo, prop_tree, offset, length); |
3247 | 1 | break; |
3248 | | |
3249 | 1 | case OFPPMPT_EXPERIMENTER: |
3250 | 1 | if (prop_length <= 12) { |
3251 | 0 | expert_add_info(pinfo, prop_tree, &ei_openflow_v5_length_too_short); |
3252 | 0 | offset = length; |
3253 | 0 | break; |
3254 | 0 | } |
3255 | | /* uint32_t experimenter; */ |
3256 | 1 | proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
3257 | 1 | offset+=4; |
3258 | | |
3259 | | /* uint32_t exp_type; */ |
3260 | 1 | proto_tree_add_item(tree, hf_openflow_v5_portmod_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
3261 | 1 | offset+=4; |
3262 | | |
3263 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_portmod_prop_undecoded, |
3264 | 1 | tvb, offset, prop_length - 12, "Experimenter port desc. property."); |
3265 | 1 | offset += prop_length - 12; |
3266 | 1 | break; |
3267 | | |
3268 | 10 | default: |
3269 | 10 | if (prop_length <= 4) { |
3270 | 1 | expert_add_info(pinfo, prop_tree, &ei_openflow_v5_length_too_short); |
3271 | 1 | offset = length; |
3272 | 1 | break; |
3273 | 1 | } |
3274 | 9 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_portmod_prop_undecoded, |
3275 | 9 | tvb, offset, prop_length - 4, "Unknown port desc. property."); |
3276 | 9 | offset += prop_length - 4; |
3277 | 9 | break; |
3278 | 14 | } |
3279 | | |
3280 | 8 | return offset; |
3281 | 14 | } |
3282 | | |
3283 | | |
3284 | | |
3285 | | static void |
3286 | | dissect_openflow_portmod_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3287 | 7 | { |
3288 | 7 | proto_item *ti; |
3289 | 7 | proto_tree *conf_tree, *mask_tree; |
3290 | | |
3291 | | /* uint32_t port_no; */ |
3292 | 7 | proto_tree_add_item(tree, hf_openflow_v5_portmod_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
3293 | 7 | offset+=4; |
3294 | | |
3295 | | /* uint8_t pad[4]; */ |
3296 | 7 | proto_tree_add_item(tree, hf_openflow_v5_portmod_pad, tvb, offset, 4, ENC_NA); |
3297 | 7 | offset+=4; |
3298 | | |
3299 | | /* uint8_t hw_addr[OFP_ETH_ALEN]; */ |
3300 | 7 | proto_tree_add_item(tree, hf_openflow_v5_portmod_hw_addr, tvb, offset, OFP_ETH_ALEN, ENC_NA); |
3301 | 7 | offset+=OFP_ETH_ALEN; |
3302 | | |
3303 | | /* uint8_t pad2[2]; */ |
3304 | 7 | proto_tree_add_item(tree, hf_openflow_v5_portmod_pad2, tvb, offset, 2, ENC_NA); |
3305 | 7 | offset+=2; |
3306 | | |
3307 | | /* uint32_t config; */ |
3308 | 7 | ti = proto_tree_add_item(tree, hf_openflow_v5_portmod_config, tvb, offset, 4, ENC_BIG_ENDIAN); |
3309 | 7 | conf_tree = proto_item_add_subtree(ti, ett_openflow_v5_portmod_config); |
3310 | | |
3311 | 7 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_config_port_down, tvb, offset, 4, ENC_BIG_ENDIAN); |
3312 | 7 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_config_no_recv, tvb, offset, 4, ENC_BIG_ENDIAN); |
3313 | 7 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_config_no_fwd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3314 | 7 | proto_tree_add_item(conf_tree, hf_openflow_v5_portmod_config_no_packet_in, tvb, offset, 4, ENC_BIG_ENDIAN); |
3315 | 7 | offset+=4; |
3316 | | |
3317 | | /* uint32_t mask; */ |
3318 | 7 | ti = proto_tree_add_item(tree, hf_openflow_v5_portmod_mask, tvb, offset, 4, ENC_BIG_ENDIAN); |
3319 | 7 | mask_tree = proto_item_add_subtree(ti, ett_openflow_v5_portmod_mask); |
3320 | | |
3321 | 7 | proto_tree_add_item(mask_tree, hf_openflow_v5_portmod_mask_port_down, tvb, offset, 4, ENC_BIG_ENDIAN); |
3322 | 7 | proto_tree_add_item(mask_tree, hf_openflow_v5_portmod_mask_no_recv, tvb, offset, 4, ENC_BIG_ENDIAN); |
3323 | 7 | proto_tree_add_item(mask_tree, hf_openflow_v5_portmod_mask_no_fwd, tvb, offset, 4, ENC_BIG_ENDIAN); |
3324 | 7 | proto_tree_add_item(mask_tree, hf_openflow_v5_portmod_mask_no_packet_in, tvb, offset, 4, ENC_BIG_ENDIAN); |
3325 | 7 | offset+=4; |
3326 | | |
3327 | | /* struct ofp_port_mod_prop_header properties[0]; */ |
3328 | 21 | while (offset < length) { |
3329 | 14 | offset = dissect_openflow_portmod_prop_v5(tvb, pinfo, tree, offset, length); |
3330 | 14 | } |
3331 | 7 | } |
3332 | | |
3333 | | |
3334 | 0 | #define OFPTMPT_EVICTION 0x2 |
3335 | 0 | #define OFPTMPT_VACANCY 0x3 |
3336 | 0 | #define OFPTMPT_EXPERIMENTER 0xFFFF |
3337 | | static const value_string openflow_v5_tablemod_prop_type_values[] = { |
3338 | | { OFPTMPT_EVICTION, "OFPTMPT_EVICTION" }, |
3339 | | { OFPTMPT_VACANCY, "OFPTMPT_VACANCY" }, |
3340 | | { OFPTMPT_EXPERIMENTER, "OFPTMPT_EXPERIMENTER" }, |
3341 | | { 0, NULL } |
3342 | | }; |
3343 | | |
3344 | 16 | #define OFPTMPEF_OTHER 1<<0 |
3345 | 16 | #define OFPTMPEF_IMPORTANCE 1<<1 |
3346 | 16 | #define OFPTMPEF_LIFETIME 1<<2 |
3347 | | static int |
3348 | | dissect_openflow_tablemod_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
3349 | 0 | { |
3350 | 0 | proto_item *ti; |
3351 | 0 | proto_tree *prop_tree, *flags_tree; |
3352 | |
|
3353 | 0 | uint16_t prop_type; |
3354 | 0 | uint16_t prop_length; |
3355 | |
|
3356 | 0 | prop_type = tvb_get_ntohs(tvb, offset); |
3357 | 0 | prop_length = tvb_get_ntohs(tvb, offset + 2); |
3358 | |
|
3359 | 0 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, prop_length, ett_openflow_v5_tablemod_prop, NULL, "Tablemod property"); |
3360 | | |
3361 | | /* uint16_t type; */ |
3362 | 0 | proto_tree_add_item(prop_tree, hf_openflow_v5_tablemod_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
3363 | 0 | offset+=2; |
3364 | | |
3365 | | /* uint16_t len; */ |
3366 | 0 | proto_tree_add_item(prop_tree, hf_openflow_v5_tablemod_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
3367 | 0 | offset+=2; |
3368 | |
|
3369 | 0 | switch (prop_type) { |
3370 | 0 | case OFPTMPT_EVICTION: |
3371 | | /* uint32_t flags; */ |
3372 | 0 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_tablemod_prop_eviction_flags, tvb, offset, 4, ENC_BIG_ENDIAN); |
3373 | 0 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_tablemod_prop_eviction_flags); |
3374 | |
|
3375 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_tablemod_prop_eviction_flags_other, tvb, offset, 4, ENC_BIG_ENDIAN); |
3376 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_tablemod_prop_eviction_flags_importance, tvb, offset, 4, ENC_BIG_ENDIAN); |
3377 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_tablemod_prop_eviction_flags_lifetime, tvb, offset, 4, ENC_BIG_ENDIAN); |
3378 | 0 | offset+=4; |
3379 | 0 | break; |
3380 | | |
3381 | 0 | case OFPTMPT_VACANCY: |
3382 | | /* uint8_t vacancy_down; */ |
3383 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_prop_vacancy_vacancy_down, tvb, offset, 1, ENC_BIG_ENDIAN); |
3384 | 0 | offset+=1; |
3385 | | |
3386 | | /* uint8_t vacancy_up; */ |
3387 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_prop_vacancy_vacancy_up, tvb, offset, 1, ENC_BIG_ENDIAN); |
3388 | 0 | offset+=1; |
3389 | | |
3390 | | /* uint8_t vacancy; */ |
3391 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_prop_vacancy_vacancy, tvb, offset, 1, ENC_BIG_ENDIAN); |
3392 | 0 | offset+=1; |
3393 | | |
3394 | | /* uint8_t pad[1]; */ |
3395 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_prop_vacancy_pad, tvb, offset, 1, ENC_NA); |
3396 | 0 | offset+=1; |
3397 | 0 | break; |
3398 | | |
3399 | 0 | case OFPTMPT_EXPERIMENTER: |
3400 | 0 | if (prop_length <= 12) { |
3401 | 0 | expert_add_info(pinfo, prop_tree, &ei_openflow_v5_length_too_short); |
3402 | 0 | offset = length; |
3403 | 0 | break; |
3404 | 0 | } |
3405 | | /* uint32_t experimenter; */ |
3406 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
3407 | 0 | offset+=4; |
3408 | | |
3409 | | /* uint32_t exp_type; */ |
3410 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
3411 | 0 | offset+=4; |
3412 | |
|
3413 | 0 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_tablemod_prop_undecoded, |
3414 | 0 | tvb, offset, prop_length - 12, "Experimenter table mod. property."); |
3415 | 0 | offset += prop_length - 12; |
3416 | 0 | break; |
3417 | | |
3418 | 0 | default: |
3419 | 0 | if (prop_length <= 4) { |
3420 | 0 | expert_add_info(pinfo, prop_tree, &ei_openflow_v5_length_too_short); |
3421 | 0 | offset = length; |
3422 | 0 | break; |
3423 | 0 | } |
3424 | 0 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_tablemod_prop_undecoded, |
3425 | 0 | tvb, offset, prop_length - 4, "Unknown table mod. property."); |
3426 | 0 | offset += prop_length - 4; |
3427 | 0 | break; |
3428 | 0 | } |
3429 | | |
3430 | 0 | return offset; |
3431 | 0 | } |
3432 | | |
3433 | | |
3434 | 48 | #define OFPTC_EVICTION 1<<2 |
3435 | 48 | #define OFPTC_VACANCY_EVENTS 1<<3 |
3436 | | static void |
3437 | | dissect_openflow_tablemod_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3438 | 0 | { |
3439 | 0 | proto_item *ti; |
3440 | 0 | proto_tree *conf_tree; |
3441 | 0 | int save_offset; |
3442 | | |
3443 | | /* uint8_t table_id; */ |
3444 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
3445 | 0 | offset+=1; |
3446 | | |
3447 | | /* uint8_t pad[3]; */ |
3448 | 0 | proto_tree_add_item(tree, hf_openflow_v5_tablemod_pad, tvb, offset, 3, ENC_NA); |
3449 | 0 | offset+=3; |
3450 | | |
3451 | | /* uint32_t config; */ |
3452 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_tablemod_config, tvb, offset, 4, ENC_NA); |
3453 | 0 | conf_tree = proto_item_add_subtree(ti, ett_openflow_v5_tablemod_config); |
3454 | |
|
3455 | 0 | proto_tree_add_item(conf_tree, hf_openflow_v5_tablemod_config_eviction, tvb, offset, 4, ENC_BIG_ENDIAN); |
3456 | 0 | proto_tree_add_item(conf_tree, hf_openflow_v5_tablemod_config_vacancy_events, tvb, offset, 4, ENC_BIG_ENDIAN); |
3457 | 0 | offset+=4; |
3458 | | |
3459 | | /* struct ofp_table_mod_prop_header properties[0]; */ |
3460 | 0 | while (offset < length) { |
3461 | 0 | save_offset = offset; |
3462 | 0 | offset = dissect_openflow_tablemod_prop_v5(tvb, pinfo, tree, offset, length); |
3463 | 0 | if (offset <= save_offset) { |
3464 | | /* We don't need to go backwards or introduce an infinite loop */ |
3465 | 0 | break; |
3466 | 0 | } |
3467 | 0 | } |
3468 | 0 | } |
3469 | | |
3470 | | |
3471 | | static void |
3472 | | dissect_openflow_flow_stats_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
3473 | 0 | { |
3474 | | /* uint8_t table_id; */ |
3475 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_stats_request_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
3476 | 0 | offset+=1; |
3477 | | |
3478 | | /* uint8_t pad[3]; */ |
3479 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_stats_request_pad, tvb, offset, 3, ENC_NA); |
3480 | 0 | offset+=3; |
3481 | | |
3482 | | /* uint32_t out_port; */ |
3483 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_stats_request_out_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
3484 | 0 | offset+=4; |
3485 | | |
3486 | | /* uint32_t out_group; */ |
3487 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_stats_request_out_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
3488 | 0 | offset+=4; |
3489 | | |
3490 | | /* uint8_t pad2[4]; */ |
3491 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_stats_request_pad2, tvb, offset, 4, ENC_NA); |
3492 | 0 | offset+=4; |
3493 | | |
3494 | | /* uint64_t cookie; */ |
3495 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_stats_request_cookie, tvb, offset, 8, ENC_BIG_ENDIAN); |
3496 | 0 | offset+=8; |
3497 | | |
3498 | | /* uint64_t cookie_mask; */ |
3499 | 0 | proto_tree_add_item(tree, hf_openflow_v5_flow_stats_request_cookie_mask, tvb, offset, 8, ENC_BIG_ENDIAN); |
3500 | 0 | offset+=8; |
3501 | | |
3502 | | /* struct ofp_match match; */ |
3503 | 0 | dissect_openflow_match_v5(tvb, pinfo, tree, offset, length); |
3504 | 0 | } |
3505 | | |
3506 | | static void |
3507 | | dissect_openflow_aggregate_stats_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
3508 | 0 | { |
3509 | | /* uint8_t table_id; */ |
3510 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_request_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
3511 | 0 | offset+=1; |
3512 | | |
3513 | | /* uint8_t pad[3]; */ |
3514 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_request_pad, tvb, offset, 3, ENC_NA); |
3515 | 0 | offset+=3; |
3516 | | |
3517 | | /* uint32_t out_port; */ |
3518 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_request_out_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
3519 | 0 | offset+=4; |
3520 | | |
3521 | | /* uint32_t out_group; */ |
3522 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_request_out_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
3523 | 0 | offset+=4; |
3524 | | |
3525 | | /* uint8_t pad2[4]; */ |
3526 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_request_pad2, tvb, offset, 4, ENC_NA); |
3527 | 0 | offset+=4; |
3528 | | |
3529 | | /* uint64_t cookie; */ |
3530 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_request_cookie, tvb, offset, 8, ENC_BIG_ENDIAN); |
3531 | 0 | offset+=8; |
3532 | | |
3533 | | /* uint64_t cookie_mask; */ |
3534 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_request_cookie_mask, tvb, offset, 8, ENC_BIG_ENDIAN); |
3535 | 0 | offset+=8; |
3536 | | |
3537 | | /* struct ofp_match match; */ |
3538 | 0 | dissect_openflow_match_v5(tvb, pinfo, tree, offset, length); |
3539 | 0 | } |
3540 | | |
3541 | | |
3542 | 170 | #define OFPTFPT_INSTRUCTIONS 0 |
3543 | 172 | #define OFPTFPT_INSTRUCTIONS_MISS 1 |
3544 | 4 | #define OFPTFPT_NEXT_TABLES 2 |
3545 | 16 | #define OFPTFPT_NEXT_TABLES_MISS 3 |
3546 | 2 | #define OFPTFPT_WRITE_ACTIONS 4 |
3547 | 2 | #define OFPTFPT_WRITE_ACTIONS_MISS 5 |
3548 | 2 | #define OFPTFPT_APPLY_ACTIONS 6 |
3549 | 4 | #define OFPTFPT_APPLY_ACTIONS_MISS 7 |
3550 | 1 | #define OFPTFPT_MATCH 8 |
3551 | 2 | #define OFPTFPT_WILDCARDS 10 |
3552 | 4 | #define OFPTFPT_WRITE_SETFIELD 12 |
3553 | 4 | #define OFPTFPT_WRITE_SETFIELD_MISS 13 |
3554 | 5 | #define OFPTFPT_APPLY_SETFIELD 14 |
3555 | 6 | #define OFPTFPT_APPLY_SETFIELD_MISS 15 |
3556 | 17 | #define OFPTFPT_TABLE_SYNC_FROM 16 |
3557 | 0 | #define OFPTFPT_EXPERIMENTER 0xFFFE |
3558 | 2 | #define OFPTFPT_EXPERIMENTER_MISS 0xFFFF |
3559 | | static const value_string openflow_v5_table_feature_prop_type_values[] = { |
3560 | | { OFPTFPT_INSTRUCTIONS, "OFPTFPT_INSTRUCTIONS" }, |
3561 | | { OFPTFPT_INSTRUCTIONS_MISS, "OFPTFPT_INSTRUCTIONS_MISS" }, |
3562 | | { OFPTFPT_NEXT_TABLES, "OFPTFPT_NEXT_TABLES" }, |
3563 | | { OFPTFPT_NEXT_TABLES_MISS, "OFPTFPT_NEXT_TABLES_MISS" }, |
3564 | | { OFPTFPT_WRITE_ACTIONS, "OFPTFPT_WRITE_ACTIONS" }, |
3565 | | { OFPTFPT_WRITE_ACTIONS_MISS, "OFPTFPT_WRITE_ACTIONS_MISS" }, |
3566 | | { OFPTFPT_APPLY_ACTIONS, "OFPTFPT_APPLY_ACTIONS" }, |
3567 | | { OFPTFPT_APPLY_ACTIONS_MISS, "OFPTFPT_APPLY_ACTIONS_MISS" }, |
3568 | | { OFPTFPT_MATCH, "OFPTFPT_MATCH" }, |
3569 | | { OFPTFPT_WILDCARDS, "OFPTFPT_WILDCARDS" }, |
3570 | | { OFPTFPT_WRITE_SETFIELD, "OFPTFPT_WRITE_SETFIELD" }, |
3571 | | { OFPTFPT_WRITE_SETFIELD_MISS, "OFPTFPT_WRITE_SETFIELD_MISS" }, |
3572 | | { OFPTFPT_APPLY_SETFIELD, "OFPTFPT_APPLY_SETFIELD" }, |
3573 | | { OFPTFPT_APPLY_SETFIELD_MISS, "OFPTFPT_APPLY_SETFIELD_MISS" }, |
3574 | | { OFPTFPT_EXPERIMENTER, "OFPTFPT_EXPERIMENTER" }, |
3575 | | { OFPTFPT_EXPERIMENTER_MISS, "OFPTFPT_EXPERIMENTER_MISS" }, |
3576 | | { OFPTFPT_TABLE_SYNC_FROM, "OFPTFPT_TABLE_SYNC_FROM" }, |
3577 | | { 0, NULL } |
3578 | | }; |
3579 | | |
3580 | | |
3581 | | static int |
3582 | | dissect_openflow_table_feature_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
3583 | 269 | { |
3584 | 269 | proto_item *ti; |
3585 | 269 | proto_tree *prop_tree, *elem_tree; |
3586 | 269 | uint16_t prop_type; |
3587 | 269 | uint16_t prop_length; |
3588 | 269 | uint16_t elem_begin; |
3589 | 269 | int32_t body_end; |
3590 | 269 | uint16_t pad_length; |
3591 | | |
3592 | 269 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_table_feature_prop, &ti, "Table feature property"); |
3593 | | |
3594 | | /* uint16_t type; */ |
3595 | 269 | proto_tree_add_item_ret_uint16(prop_tree, hf_openflow_v5_table_feature_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN, &prop_type); |
3596 | 269 | offset+=2; |
3597 | | |
3598 | | /* uint16_t length; */ |
3599 | 269 | prop_length = tvb_get_ntohs(tvb, offset); |
3600 | 269 | proto_item_set_len(ti, prop_length); |
3601 | 269 | proto_tree_add_item(prop_tree, hf_openflow_v5_table_feature_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
3602 | 269 | offset+=2; |
3603 | | |
3604 | 269 | if (prop_length < 4) { |
3605 | 197 | prop_length = 4; |
3606 | 197 | } |
3607 | | |
3608 | 269 | body_end = offset + prop_length - 4; |
3609 | | |
3610 | | /* body */ |
3611 | 269 | switch (prop_type) { |
3612 | 170 | case OFPTFPT_INSTRUCTIONS: |
3613 | 172 | case OFPTFPT_INSTRUCTIONS_MISS: |
3614 | 1.13k | while (offset < body_end) { |
3615 | 959 | elem_begin = offset; |
3616 | 959 | elem_tree = proto_tree_add_subtree(prop_tree, tvb, offset, -1, ett_openflow_v5_table_feature_prop_instruction_id, &ti, "Instruction ID"); |
3617 | | |
3618 | 959 | offset = dissect_openflow_instruction_header_v5(tvb, pinfo, elem_tree, offset, length); |
3619 | 959 | proto_item_set_len(ti, offset - elem_begin); |
3620 | 959 | } |
3621 | 172 | break; |
3622 | | |
3623 | 4 | case OFPTFPT_NEXT_TABLES: |
3624 | 16 | case OFPTFPT_NEXT_TABLES_MISS: |
3625 | 2.13k | while (offset < body_end) { |
3626 | 2.12k | proto_tree_add_item(prop_tree, hf_openflow_v5_table_feature_prop_next_tables_next_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
3627 | 2.12k | offset+=1; |
3628 | 2.12k | } |
3629 | 16 | break; |
3630 | | |
3631 | 2 | case OFPTFPT_WRITE_ACTIONS: |
3632 | 2 | case OFPTFPT_WRITE_ACTIONS_MISS: |
3633 | 2 | case OFPTFPT_APPLY_ACTIONS: |
3634 | 4 | case OFPTFPT_APPLY_ACTIONS_MISS: |
3635 | 58 | while (offset < body_end) { |
3636 | 54 | elem_begin = offset; |
3637 | 54 | elem_tree = proto_tree_add_subtree(prop_tree, tvb, offset, -1, ett_openflow_v5_table_feature_prop_action_id, &ti, "Action ID"); |
3638 | | |
3639 | 54 | offset = dissect_openflow_action_header_v5(tvb, pinfo, elem_tree, offset); |
3640 | 54 | proto_item_set_len(ti, offset - elem_begin); |
3641 | 54 | } |
3642 | 4 | break; |
3643 | | |
3644 | 1 | case OFPTFPT_MATCH: |
3645 | 2 | case OFPTFPT_WILDCARDS: |
3646 | 4 | case OFPTFPT_WRITE_SETFIELD: |
3647 | 4 | case OFPTFPT_WRITE_SETFIELD_MISS: |
3648 | 5 | case OFPTFPT_APPLY_SETFIELD: |
3649 | 6 | case OFPTFPT_APPLY_SETFIELD_MISS: |
3650 | 148 | while (offset < body_end) { |
3651 | 142 | elem_begin = offset; |
3652 | 142 | elem_tree = proto_tree_add_subtree(prop_tree, tvb, offset, -1, ett_openflow_v5_table_feature_prop_oxm_id, &ti, "OXM ID"); |
3653 | | |
3654 | 142 | offset = dissect_openflow_oxm_header_v5(tvb, pinfo, elem_tree, offset); |
3655 | 142 | proto_item_set_len(ti, offset - elem_begin); |
3656 | 142 | } |
3657 | 6 | break; |
3658 | | |
3659 | 17 | case OFPTFPT_TABLE_SYNC_FROM: |
3660 | 809 | while (offset < body_end) { |
3661 | 792 | proto_tree_add_item(prop_tree, hf_openflow_v5_table_feature_prop_table_sync_from_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
3662 | 792 | offset+=1; |
3663 | 792 | } |
3664 | 17 | break; |
3665 | | |
3666 | 0 | case OFPTFPT_EXPERIMENTER: |
3667 | 2 | case OFPTFPT_EXPERIMENTER_MISS: |
3668 | | /* uint32_t experimenter; */ |
3669 | 2 | proto_tree_add_item(prop_tree, hf_openflow_v5_table_feature_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
3670 | 2 | offset+=4; |
3671 | | |
3672 | | /* uint32_t exp_type; */ |
3673 | 2 | proto_tree_add_item(prop_tree, hf_openflow_v5_table_feature_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
3674 | 2 | offset+=4; |
3675 | | |
3676 | | /* uint32_t experimenter_data[0]; */ |
3677 | 2 | proto_tree_add_expert_format(prop_tree, pinfo, &ei_openflow_v5_table_feature_prop_undecoded, |
3678 | 2 | tvb, offset, body_end - offset, "Experimenter table property body."); |
3679 | 2 | offset = body_end; |
3680 | 2 | break; |
3681 | | |
3682 | 52 | default: |
3683 | 52 | proto_tree_add_expert_format(prop_tree, pinfo, &ei_openflow_v5_table_feature_prop_undecoded, |
3684 | 52 | tvb, offset, body_end - offset, "Unknown table property body."); |
3685 | 52 | offset = body_end; |
3686 | 52 | break; |
3687 | 269 | }; |
3688 | | |
3689 | 223 | pad_length = (prop_length + 7)/8*8 - prop_length; |
3690 | 223 | if (pad_length > 0) { |
3691 | 212 | proto_tree_add_item(prop_tree, hf_openflow_v5_table_feature_prop_pad, tvb, offset, pad_length, ENC_NA); |
3692 | 212 | offset+=pad_length; |
3693 | 212 | } |
3694 | | |
3695 | 223 | return offset; |
3696 | 269 | } |
3697 | | |
3698 | | |
3699 | 178 | #define OFP_MAX_TABLE_NAME_LEN 32 |
3700 | | static int |
3701 | | dissect_openflow_table_features_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
3702 | 89 | { |
3703 | 89 | proto_item *ti; |
3704 | 89 | proto_tree *feat_tree, *caps_tree; |
3705 | 89 | uint16_t feat_length; |
3706 | 89 | int32_t feat_end; |
3707 | | |
3708 | 89 | feat_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_table_features, &ti, "Table features"); |
3709 | | |
3710 | | /* uint16_t length; */ |
3711 | 89 | feat_length = tvb_get_ntohs(tvb, offset); |
3712 | 89 | feat_end = offset + feat_length; |
3713 | 89 | proto_item_set_len(ti, feat_length); |
3714 | 89 | proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
3715 | 89 | offset+=2; |
3716 | | |
3717 | | /* uint8_t table_id; */ |
3718 | 89 | proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
3719 | 89 | offset+=1; |
3720 | | |
3721 | | /* uint8_t pad[5]; */ |
3722 | 89 | proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_pad, tvb, offset, 5, ENC_NA); |
3723 | 89 | offset+=5; |
3724 | | |
3725 | | /* char name[OFP_MAX_TABLE_NAME_LEN]; */ |
3726 | 89 | proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_name, tvb, offset, OFP_MAX_TABLE_NAME_LEN, ENC_ASCII); |
3727 | 89 | offset+=OFP_MAX_TABLE_NAME_LEN; |
3728 | | |
3729 | | /* uint64_t metadata_match; */ |
3730 | 89 | proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_metadata_match, tvb, offset, 8, ENC_BIG_ENDIAN); |
3731 | 89 | offset+=8; |
3732 | | |
3733 | | /* uint64_t metadata_write; */ |
3734 | 89 | proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_metadata_write, tvb, offset, 8, ENC_BIG_ENDIAN); |
3735 | 89 | offset+=8; |
3736 | | |
3737 | | /* uint32_t capabilities; */ |
3738 | 89 | ti = proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_capabilities, tvb, offset, 4, ENC_BIG_ENDIAN); |
3739 | 89 | caps_tree = proto_item_add_subtree(ti, ett_openflow_v5_table_features_capabilities); |
3740 | | |
3741 | 89 | proto_tree_add_item(caps_tree, hf_openflow_v5_table_features_capabilities_eviction, tvb, offset, 4, ENC_BIG_ENDIAN); |
3742 | 89 | proto_tree_add_item(caps_tree, hf_openflow_v5_table_features_capabilities_vacancy_events, tvb, offset, 4, ENC_BIG_ENDIAN); |
3743 | 89 | offset+=4; |
3744 | | |
3745 | | /* uint32_t max_entries; */ |
3746 | 89 | proto_tree_add_item(feat_tree, hf_openflow_v5_table_features_max_entries, tvb, offset, 4, ENC_BIG_ENDIAN); |
3747 | 89 | offset+=4; |
3748 | | |
3749 | | /* struct ofp_table_feature_prop_header properties[0]; */ |
3750 | 358 | while (offset < feat_end) { |
3751 | 269 | offset = dissect_openflow_table_feature_prop_v5(tvb, pinfo, feat_tree, offset, length); |
3752 | 269 | } |
3753 | | |
3754 | 89 | return offset; |
3755 | 89 | } |
3756 | | |
3757 | | |
3758 | | static void |
3759 | | dissect_openflow_port_stats_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3760 | 0 | { |
3761 | | /* uint32_t port_no; */ |
3762 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_request_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
3763 | 0 | offset+=4; |
3764 | | |
3765 | | /* uint8_t pad[4]; */ |
3766 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_request_pad, tvb, offset, 4, ENC_NA); |
3767 | | /*offset+=4;*/ |
3768 | 0 | } |
3769 | | |
3770 | | #define OFPQ_ALL 0xffffffff |
3771 | | static const value_string openflow_v5_queue_reserved_values[] = { |
3772 | | { OFPQ_ALL, "OFPQ_ALL" }, |
3773 | | { 0, NULL } |
3774 | | }; |
3775 | | |
3776 | | static void |
3777 | | dissect_openflow_queue_stats_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3778 | 0 | { |
3779 | | /* uint32_t port_no; */ |
3780 | 0 | proto_tree_add_item(tree, hf_openflow_v5_queue_stats_request_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
3781 | 0 | offset+=4; |
3782 | | |
3783 | | /* uint32_t queue_id; */ |
3784 | 0 | proto_tree_add_item(tree, hf_openflow_v5_queue_stats_request_queue_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3785 | | /*offset+=4;*/ |
3786 | 0 | } |
3787 | | |
3788 | | |
3789 | | static void |
3790 | | dissect_openflow_group_stats_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3791 | 0 | { |
3792 | | /* uint32_t group_id; */ |
3793 | 0 | proto_tree_add_item(tree, hf_openflow_v5_group_stats_request_group_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3794 | 0 | offset+=4; |
3795 | | |
3796 | | /* uint8_t pad[4]; */ |
3797 | 0 | proto_tree_add_item(tree, hf_openflow_v5_group_stats_request_pad, tvb, offset, 4, ENC_NA); |
3798 | | /*offset+=4;*/ |
3799 | 0 | } |
3800 | | |
3801 | | |
3802 | | static void |
3803 | | dissect_openflow_meter_stats_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3804 | 0 | { |
3805 | | /* uint32_t meter_id; */ |
3806 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_stats_request_meter_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3807 | 0 | offset+=4; |
3808 | | |
3809 | | /* uint8_t pad[4]; */ |
3810 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_stats_request_pad, tvb, offset, 4, ENC_NA); |
3811 | | /*offset+=4;*/ |
3812 | 0 | } |
3813 | | |
3814 | | |
3815 | | static void |
3816 | | dissect_openflow_meter_config_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3817 | 0 | { |
3818 | | /* uint32_t meter_id; */ |
3819 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_config_request_meter_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3820 | 0 | offset+=4; |
3821 | | |
3822 | | /* uint8_t pad[4]; */ |
3823 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_config_request_pad, tvb, offset, 4, ENC_NA); |
3824 | | /*offset+=4;*/ |
3825 | 0 | } |
3826 | | |
3827 | | |
3828 | | |
3829 | | static void |
3830 | | dissect_openflow_queue_desc_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3831 | 0 | { |
3832 | | /* uint32_t port_no; */ |
3833 | 0 | proto_tree_add_item(tree, hf_openflow_v5_queue_desc_request_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
3834 | 0 | offset+=4; |
3835 | | |
3836 | | /* uint32_t queue_id; */ |
3837 | 0 | proto_tree_add_item(tree, hf_openflow_v5_queue_desc_request_queue_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3838 | | /*offset+=4;*/ |
3839 | 0 | } |
3840 | | |
3841 | | |
3842 | 16 | #define OFPFMF_INITIAL 1<<0 |
3843 | 16 | #define OFPFMF_ADD 1<<1 |
3844 | 16 | #define OFPFMF_REMOVED 1<<2 |
3845 | 16 | #define OFPFMF_MODIFY 1<<3 |
3846 | 16 | #define OFPFMF_INSTRUCTIONS 1<<4 |
3847 | 16 | #define OFPFMF_NO_ABBREV 1<<5 |
3848 | 16 | #define OFPFMF_ONLY_OWN 1<<6 |
3849 | | |
3850 | | #define OFPFMC_ADD 0 |
3851 | | #define OFPFMC_MODIFY 1 |
3852 | | #define OFPFMC_DELETE 2 |
3853 | | static const value_string openflow_v5_flow_monitor_request_command_values[] = { |
3854 | | { OFPFMC_ADD, "OFPFMC_ADD" }, |
3855 | | { OFPFMC_MODIFY, "OFPFMC_MODIFY" }, |
3856 | | { OFPFMC_DELETE, "OFPFMC_DELETE" }, |
3857 | | { 0, NULL } |
3858 | | }; |
3859 | | |
3860 | | static void |
3861 | | dissect_openflow_flow_monitor_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
3862 | 1 | { |
3863 | 1 | proto_item *ti; |
3864 | 1 | proto_tree *flags_tree; |
3865 | | |
3866 | | /* uint32_t monitor_id; */ |
3867 | 1 | proto_tree_add_item(tree, hf_openflow_v5_flow_monitor_request_monitor_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
3868 | 1 | offset+=4; |
3869 | | |
3870 | | /* uint32_t out_port; */ |
3871 | 1 | proto_tree_add_item(tree, hf_openflow_v5_flow_monitor_request_out_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
3872 | | |
3873 | 1 | offset+=4; |
3874 | | |
3875 | | /* uint32_t out_group; */ |
3876 | 1 | proto_tree_add_item(tree, hf_openflow_v5_flow_monitor_request_out_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
3877 | 1 | offset+=4; |
3878 | | |
3879 | | /* uint16_t flags; */ |
3880 | 1 | ti = proto_tree_add_item(tree, hf_openflow_v5_flow_monitor_request_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
3881 | 1 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_flow_monitor_request_flags); |
3882 | | |
3883 | 1 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_monitor_request_flags_initial, tvb, offset, 2, ENC_BIG_ENDIAN); |
3884 | 1 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_monitor_request_flags_add, tvb, offset, 2, ENC_BIG_ENDIAN); |
3885 | 1 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_monitor_request_flags_removed, tvb, offset, 2, ENC_BIG_ENDIAN); |
3886 | 1 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_monitor_request_flags_modify, tvb, offset, 2, ENC_BIG_ENDIAN); |
3887 | 1 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_monitor_request_flags_instructions, tvb, offset, 2, ENC_BIG_ENDIAN); |
3888 | 1 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_monitor_request_flags_no_abbrev, tvb, offset, 2, ENC_BIG_ENDIAN); |
3889 | 1 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_monitor_request_flags_only_own, tvb, offset, 2, ENC_BIG_ENDIAN); |
3890 | 1 | offset+=2; |
3891 | | |
3892 | | /* uint8_t table_id; */ |
3893 | 1 | proto_tree_add_item(tree, hf_openflow_v5_flow_monitor_request_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
3894 | 1 | offset+=1; |
3895 | | |
3896 | | /* uint8_t command; */ |
3897 | 1 | proto_tree_add_item(tree, hf_openflow_v5_flow_monitor_request_command, tvb, offset, 1, ENC_BIG_ENDIAN); |
3898 | 1 | offset+=1; |
3899 | | |
3900 | | /* struct ofp_match match; */ |
3901 | 1 | dissect_openflow_match_v5(tvb, pinfo, tree, offset, length); |
3902 | 1 | } |
3903 | | |
3904 | 2 | #define OFPMP_DESC 0 |
3905 | 24 | #define OFPMP_FLOW 1 |
3906 | 0 | #define OFPMP_AGGREGATE 2 |
3907 | 0 | #define OFPMP_TABLE 3 |
3908 | 9 | #define OFPMP_PORT_STATS 4 |
3909 | 4 | #define OFPMP_QUEUE_STATS 5 |
3910 | 7 | #define OFPMP_GROUP 6 |
3911 | 19 | #define OFPMP_GROUP_DESC 7 |
3912 | 0 | #define OFPMP_GROUP_FEATURES 8 |
3913 | 10 | #define OFPMP_METER 9 |
3914 | 13 | #define OFPMP_METER_CONFIG 10 |
3915 | 0 | #define OFPMP_METER_FEATURES 11 |
3916 | 49 | #define OFPMP_TABLE_FEATURES 12 |
3917 | 11 | #define OFPMP_PORT_DESC 13 |
3918 | 0 | #define OFPMP_TABLE_DESC 14 |
3919 | 15 | #define OFPMP_QUEUE_DESC 15 |
3920 | 5 | #define OFPMP_FLOW_MONITOR 16 |
3921 | 2 | #define OFPMP_EXPERIMENTER 0xffff |
3922 | | static const value_string openflow_v5_multipart_type_values[] = { |
3923 | | { OFPMP_DESC, "OFPMP_DESC" }, |
3924 | | { OFPMP_FLOW, "OFPMP_FLOW" }, |
3925 | | { OFPMP_AGGREGATE, "OFPMP_AGGREGATE" }, |
3926 | | { OFPMP_TABLE, "OFPMP_TABLE" }, |
3927 | | { OFPMP_PORT_STATS, "OFPMP_PORT_STATS" }, |
3928 | | { OFPMP_QUEUE_STATS, "OFPMP_QUEUE_STATS" }, |
3929 | | { OFPMP_GROUP, "OFPMP_GROUP" }, |
3930 | | { OFPMP_GROUP_DESC, "OFPMP_GROUP_DESC" }, |
3931 | | { OFPMP_GROUP_FEATURES, "OFPMP_GROUP_FEATURES" }, |
3932 | | { OFPMP_METER, "OFPMP_METER" }, |
3933 | | { OFPMP_METER_CONFIG, "OFPMP_METER_CONFIG" }, |
3934 | | { OFPMP_METER_FEATURES, "OFPMP_METER_FEATURES" }, |
3935 | | { OFPMP_TABLE_FEATURES, "OFPMP_TABLE_FEATURES" }, |
3936 | | { OFPMP_PORT_DESC, "OFPMP_PORT_DESC" }, |
3937 | | { OFPMP_TABLE_DESC, "OFPMP_TABLE_DESC" }, |
3938 | | { OFPMP_QUEUE_DESC, "OFPMP_QUEUE_DESC" }, |
3939 | | { OFPMP_FLOW_MONITOR, "OFPMP_FLOW_MONITOR" }, |
3940 | | { OFPMP_EXPERIMENTER, "OFPMP_EXPERIMENTER" }, |
3941 | | { 0, NULL } |
3942 | | }; |
3943 | | |
3944 | 16 | #define OFPMPF_REQ_MORE 1 << 0 |
3945 | | static void |
3946 | | dissect_openflow_multipart_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
3947 | 9 | { |
3948 | 9 | proto_item *ti; |
3949 | 9 | proto_tree *flags_tree; |
3950 | 9 | uint16_t type; |
3951 | | |
3952 | | /* uint16_t type; */ |
3953 | 9 | proto_tree_add_item_ret_uint16(tree, hf_openflow_v5_multipart_request_type , tvb, offset, 2, ENC_BIG_ENDIAN, &type); |
3954 | 9 | offset+=2; |
3955 | | |
3956 | | /* uint16_t flags; */ |
3957 | 9 | ti = proto_tree_add_item(tree, hf_openflow_v5_multipart_request_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
3958 | 9 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_multipart_request_flags); |
3959 | | |
3960 | 9 | proto_tree_add_item(flags_tree, hf_openflow_v5_multipart_request_flags_more, tvb, offset, 2, ENC_BIG_ENDIAN); |
3961 | 9 | offset+=2; |
3962 | | |
3963 | | /* uint8_t pad[4]; */ |
3964 | 9 | proto_tree_add_item(tree, hf_openflow_v5_multipart_request_pad, tvb, offset, 4, ENC_NA); |
3965 | 9 | offset+=4; |
3966 | | |
3967 | | /* uint8_t body[0]; */ |
3968 | 9 | switch(type){ |
3969 | 1 | case OFPMP_DESC: |
3970 | | /* The request body is empty. */ |
3971 | 1 | break; |
3972 | 0 | case OFPMP_FLOW: |
3973 | 0 | dissect_openflow_flow_stats_request_v5(tvb, pinfo, tree, offset, length); |
3974 | 0 | break; |
3975 | 0 | case OFPMP_AGGREGATE: |
3976 | 0 | dissect_openflow_aggregate_stats_request_v5(tvb, pinfo, tree, offset, length); |
3977 | 0 | break; |
3978 | 0 | case OFPMP_TABLE: |
3979 | | /* The request body is empty. */ |
3980 | 0 | break; |
3981 | 0 | case OFPMP_PORT_STATS: |
3982 | 0 | dissect_openflow_port_stats_request_v5(tvb, pinfo, tree, offset, length); |
3983 | 0 | break; |
3984 | 0 | case OFPMP_QUEUE_STATS: |
3985 | 0 | dissect_openflow_queue_stats_request_v5(tvb, pinfo, tree, offset, length); |
3986 | 0 | break; |
3987 | 0 | case OFPMP_GROUP: |
3988 | 0 | dissect_openflow_group_stats_request_v5(tvb, pinfo, tree, offset, length); |
3989 | 0 | break; |
3990 | 0 | case OFPMP_GROUP_DESC: |
3991 | | /* The request body is empty. */ |
3992 | 0 | break; |
3993 | 0 | case OFPMP_GROUP_FEATURES: |
3994 | | /* The request body is empty. */ |
3995 | 0 | break; |
3996 | 0 | case OFPMP_METER: |
3997 | 0 | dissect_openflow_meter_stats_request_v5(tvb, pinfo, tree, offset, length); |
3998 | 0 | break; |
3999 | 0 | case OFPMP_METER_CONFIG: |
4000 | 0 | dissect_openflow_meter_config_request_v5(tvb, pinfo, tree, offset, length); |
4001 | 0 | break; |
4002 | 0 | case OFPMP_METER_FEATURES: |
4003 | | /* The request body is empty. */ |
4004 | 0 | break; |
4005 | 6 | case OFPMP_TABLE_FEATURES: |
4006 | 26 | while (offset < length) { |
4007 | 20 | offset = dissect_openflow_table_features_v5(tvb, pinfo, tree, offset, length); |
4008 | 20 | } |
4009 | 6 | break; |
4010 | 0 | case OFPMP_PORT_DESC: |
4011 | | /* The request body is empty. */ |
4012 | 0 | break; |
4013 | 0 | case OFPMP_TABLE_DESC: |
4014 | | /* The request body is empty. */ |
4015 | 0 | break; |
4016 | 0 | case OFPMP_QUEUE_DESC: |
4017 | 0 | dissect_openflow_queue_desc_request_v5(tvb, pinfo, tree, offset, length); |
4018 | 0 | break; |
4019 | 1 | case OFPMP_FLOW_MONITOR: |
4020 | 1 | dissect_openflow_flow_monitor_request_v5(tvb, pinfo, tree, offset, length); |
4021 | 1 | break; |
4022 | 0 | case OFPMP_EXPERIMENTER: |
4023 | | /* uint32_t experimenter; */ |
4024 | 0 | proto_tree_add_item(tree, hf_openflow_v5_multipart_request_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
4025 | 0 | offset+=4; |
4026 | | |
4027 | | /* uint32_t exp_type; */ |
4028 | 0 | proto_tree_add_item(tree, hf_openflow_v5_multipart_request_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
4029 | 0 | offset+=4; |
4030 | | |
4031 | | /* uint32_t experimenter_data[0]; */ |
4032 | 0 | if (offset < length) { |
4033 | 0 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_multipart_request_undecoded, |
4034 | 0 | tvb, offset, length - offset, "Experimenter multipart request body."); |
4035 | 0 | } |
4036 | 0 | break; |
4037 | 1 | default: |
4038 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_multipart_request_undecoded, |
4039 | 1 | tvb, offset, length - offset, "Unknown multipart request body."); |
4040 | 1 | break; |
4041 | 9 | } |
4042 | 9 | } |
4043 | | |
4044 | | |
4045 | 7 | #define DESC_STR_LEN 256 |
4046 | 2 | #define SERIAL_NUM_LEN 32 |
4047 | | static void |
4048 | | dissect_openflow_switch_description_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4049 | 1 | { |
4050 | | /* char mfr_desc[DESC_STR_LEN]; */ |
4051 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_description_mfr_desc, tvb, offset, DESC_STR_LEN, ENC_ASCII); |
4052 | 1 | offset+=DESC_STR_LEN; |
4053 | | |
4054 | | /* char hw_desc[DESC_STR_LEN]; */ |
4055 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_description_hw_desc, tvb, offset, DESC_STR_LEN, ENC_ASCII); |
4056 | 1 | offset+=DESC_STR_LEN; |
4057 | | |
4058 | | /* char sw_desc[DESC_STR_LEN]; */ |
4059 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_description_sw_desc, tvb, offset, DESC_STR_LEN, ENC_ASCII); |
4060 | 1 | offset+=DESC_STR_LEN; |
4061 | | |
4062 | | /* char serial_num[SERIAL_NUM_LEN]; */ |
4063 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_description_serial_num, tvb, offset, SERIAL_NUM_LEN, ENC_ASCII); |
4064 | 1 | offset+=SERIAL_NUM_LEN; |
4065 | | |
4066 | | /* char dp_desc[DESC_STR_LEN]; */ |
4067 | 1 | proto_tree_add_item(tree, hf_openflow_v5_switch_description_dp_desc, tvb, offset, DESC_STR_LEN, ENC_ASCII); |
4068 | | /*offset+=DESC_STR_LEN;*/ |
4069 | 1 | } |
4070 | | |
4071 | | |
4072 | | static int |
4073 | | dissect_openflow_flow_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4074 | 73 | { |
4075 | 73 | proto_item *ti; |
4076 | 73 | proto_tree *stats_tree, *flags_tree; |
4077 | 73 | uint16_t stats_len; |
4078 | 73 | int32_t stats_end; |
4079 | | |
4080 | 73 | stats_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_flow_stats, &ti, "Flow stats"); |
4081 | | |
4082 | | /* uint16_t length; */ |
4083 | 73 | stats_len = tvb_get_ntohs(tvb, offset); |
4084 | 73 | stats_end = offset + stats_len; |
4085 | 73 | proto_item_set_len(ti, stats_len); |
4086 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4087 | 73 | offset+=2; |
4088 | | |
4089 | | /* uint8_t table_id; */ |
4090 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
4091 | 73 | offset+=1; |
4092 | | |
4093 | | /* uint8_t pad; */ |
4094 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_pad, tvb, offset, 1, ENC_NA); |
4095 | 73 | offset+=1; |
4096 | | |
4097 | | /* uint32_t duration_sec; */ |
4098 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_duration_sec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4099 | 73 | offset+=4; |
4100 | | |
4101 | | /* uint32_t duration_nsec; */ |
4102 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_duration_nsec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4103 | 73 | offset+=4; |
4104 | | |
4105 | | /* uint16_t priority; */ |
4106 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_priority, tvb, offset, 2, ENC_BIG_ENDIAN); |
4107 | 73 | offset+=2; |
4108 | | |
4109 | | /* uint16_t idle_timeout; */ |
4110 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_idle_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
4111 | 73 | offset+=2; |
4112 | | |
4113 | | /* uint16_t hard_timeout; */ |
4114 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_hard_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
4115 | 73 | offset+=2; |
4116 | | |
4117 | | /* uint16_t flags; */ |
4118 | 73 | ti = proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
4119 | 73 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_flow_stats_flags); |
4120 | | |
4121 | 73 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_stats_flags_send_flow_rem, tvb, offset, 2, ENC_BIG_ENDIAN); |
4122 | 73 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_stats_flags_check_overlap, tvb, offset, 2, ENC_BIG_ENDIAN); |
4123 | 73 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_stats_flags_reset_counts, tvb, offset, 2, ENC_BIG_ENDIAN); |
4124 | 73 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_stats_flags_no_packet_counts, tvb, offset, 2, ENC_BIG_ENDIAN); |
4125 | 73 | proto_tree_add_item(flags_tree, hf_openflow_v5_flow_stats_flags_no_byte_counts, tvb, offset, 2, ENC_BIG_ENDIAN); |
4126 | 73 | offset+=2; |
4127 | | |
4128 | | /* uint16_t importance; */ |
4129 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_importance, tvb, offset, 2, ENC_BIG_ENDIAN); |
4130 | 73 | offset+=2; |
4131 | | |
4132 | | /* uint8_t pad2[2]; */ |
4133 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_pad2, tvb, offset, 4, ENC_NA); |
4134 | 73 | offset+=2; |
4135 | | |
4136 | | /* uint64_t cookie; */ |
4137 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_cookie, tvb, offset, 8, ENC_BIG_ENDIAN); |
4138 | 73 | offset+=8; |
4139 | | |
4140 | | /* uint64_t packet_count; */ |
4141 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_packet_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4142 | 73 | offset+=8; |
4143 | | |
4144 | | /* uint64_t byte_count; */ |
4145 | 73 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_byte_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4146 | 73 | offset+=8; |
4147 | | |
4148 | | /* struct ofp_match match; */ |
4149 | 73 | offset = dissect_openflow_match_v5(tvb, pinfo, stats_tree, offset, length); |
4150 | | |
4151 | | /* struct ofp_instruction instructions[0]; */ |
4152 | 220 | while (offset < stats_end) { |
4153 | 147 | offset = dissect_openflow_instruction_v5(tvb, pinfo, stats_tree, offset, length); |
4154 | 147 | } |
4155 | | |
4156 | 73 | return offset; |
4157 | 73 | } |
4158 | | |
4159 | | |
4160 | | static void |
4161 | | dissect_openflow_aggregate_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4162 | 0 | { |
4163 | | /* uint64_t packet_count; */ |
4164 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_packet_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4165 | 0 | offset+=8; |
4166 | | |
4167 | | /* uint64_t byte_count; */ |
4168 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_byte_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4169 | 0 | offset+=8; |
4170 | | |
4171 | | /* uint32_t flow_count; */ |
4172 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_flow_count, tvb, offset, 4, ENC_BIG_ENDIAN); |
4173 | 0 | offset+=4; |
4174 | | |
4175 | | /* uint8_t pad[4]; */ |
4176 | 0 | proto_tree_add_item(tree, hf_openflow_v5_aggregate_stats_pad, tvb, offset, 4, ENC_NA); |
4177 | | /*offset+=4;*/ |
4178 | 0 | } |
4179 | | |
4180 | | |
4181 | | static int |
4182 | | dissect_openflow_table_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4183 | 0 | { |
4184 | 0 | proto_tree *stats_tree; |
4185 | |
|
4186 | 0 | stats_tree = proto_tree_add_subtree(tree, tvb, offset, 24, ett_openflow_v5_table_stats, NULL, "Table stats"); |
4187 | | |
4188 | | /* uint8_t table_id; */ |
4189 | 0 | proto_tree_add_item(stats_tree, hf_openflow_v5_table_stats_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
4190 | 0 | offset+=1; |
4191 | | |
4192 | | /* uint8_t pad[3]; */ |
4193 | 0 | proto_tree_add_item(stats_tree, hf_openflow_v5_table_stats_pad, tvb, offset, 3, ENC_NA); |
4194 | 0 | offset+=3; |
4195 | | |
4196 | | /* uint32_t active_count; */ |
4197 | 0 | proto_tree_add_item(stats_tree, hf_openflow_v5_table_stats_active_count, tvb, offset, 4, ENC_BIG_ENDIAN); |
4198 | 0 | offset+=4; |
4199 | | |
4200 | | /* uint64_t lookup_count; */ |
4201 | 0 | proto_tree_add_item(stats_tree, hf_openflow_v5_table_stats_lookup_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4202 | 0 | offset+=8; |
4203 | | |
4204 | | /* uint64_t matched_count; */ |
4205 | 0 | proto_tree_add_item(stats_tree, hf_openflow_v5_table_stats_match_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4206 | 0 | offset+=8; |
4207 | |
|
4208 | 0 | return offset; |
4209 | 0 | } |
4210 | | |
4211 | | static int |
4212 | | dissect_openflow_port_stats_prop_ethernet_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4213 | 15 | { |
4214 | | /* uint8_t pad[4]; */ |
4215 | 15 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_ethernet_pad, tvb, offset, 4, ENC_NA); |
4216 | 15 | offset+=4; |
4217 | | |
4218 | | /* uint64_t rx_frame_error; */ |
4219 | 15 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_ethernet_rx_frame_err, tvb, offset, 8, ENC_BIG_ENDIAN); |
4220 | 15 | offset+=8; |
4221 | | |
4222 | | /* uint64_t rx_over_error; */ |
4223 | 15 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_ethernet_rx_over_err, tvb, offset, 8, ENC_BIG_ENDIAN); |
4224 | 15 | offset+=8; |
4225 | | |
4226 | | /* uint64_t rx_crc_error; */ |
4227 | 15 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_ethernet_rx_crc_err, tvb, offset, 8, ENC_BIG_ENDIAN); |
4228 | 15 | offset+=8; |
4229 | | |
4230 | | /* uint64_t collisions; */ |
4231 | 15 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_ethernet_collisions, tvb, offset, 8, ENC_BIG_ENDIAN); |
4232 | 15 | offset+=8; |
4233 | | |
4234 | 15 | return offset; |
4235 | 15 | } |
4236 | | |
4237 | | |
4238 | 16 | #define OFPOSF_RX_TUNE 1<<0 |
4239 | 16 | #define OFPOSF_TX_TUNE 1<<1 |
4240 | 16 | #define OFPOSF_TX_PWR 1<<2 |
4241 | 16 | #define OFPOSF_RX_PWR 1<<4 |
4242 | 16 | #define OFPOSF_TX_BIAS 1<<5 |
4243 | 16 | #define OFPOSF_TX_TEMP 1<<6 |
4244 | | static int |
4245 | | dissect_openflow_port_stats_prop_optical_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4246 | 0 | { |
4247 | 0 | proto_item *ti; |
4248 | 0 | proto_tree *flags_tree; |
4249 | | |
4250 | | /* uint8_t pad[4]; */ |
4251 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_pad, tvb, offset, 4, ENC_NA); |
4252 | 0 | offset+=4; |
4253 | | |
4254 | | /* uint32_t flags; */ |
4255 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_flags, tvb, offset, 4, ENC_BIG_ENDIAN); |
4256 | 0 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_port_stats_prop_optical_flags); |
4257 | |
|
4258 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_port_stats_prop_optical_flags_rx_tune, tvb, offset, 4, ENC_BIG_ENDIAN); |
4259 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_port_stats_prop_optical_flags_tx_tune, tvb, offset, 4, ENC_BIG_ENDIAN); |
4260 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_port_stats_prop_optical_flags_tx_pwr, tvb, offset, 4, ENC_BIG_ENDIAN); |
4261 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_port_stats_prop_optical_flags_rx_pwr, tvb, offset, 4, ENC_BIG_ENDIAN); |
4262 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_port_stats_prop_optical_flags_tx_bias, tvb, offset, 4, ENC_BIG_ENDIAN); |
4263 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_port_stats_prop_optical_flags_tx_temp, tvb, offset, 4, ENC_BIG_ENDIAN); |
4264 | 0 | offset+=4; |
4265 | | |
4266 | | /* uint32_t tx_freq_lmda; */ |
4267 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_tx_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
4268 | 0 | offset+=4; |
4269 | | |
4270 | | /* uint32_t tx_offset; */ |
4271 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_tx_offset, tvb, offset, 4, ENC_BIG_ENDIAN); |
4272 | 0 | offset+=4; |
4273 | | |
4274 | | /* uint32_t tx_grid_span; */ |
4275 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_tx_grid_span, tvb, offset, 4, ENC_BIG_ENDIAN); |
4276 | 0 | offset+=4; |
4277 | | |
4278 | | /* uint32_t rx_freq_lmda; */ |
4279 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_rx_freq_lmda, tvb, offset, 4, ENC_BIG_ENDIAN); |
4280 | 0 | offset+=4; |
4281 | | |
4282 | | /* uint32_t rx_offset; */ |
4283 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_rx_offset, tvb, offset, 4, ENC_BIG_ENDIAN); |
4284 | 0 | offset+=4; |
4285 | | |
4286 | | /* uint32_t rx_grid_span; */ |
4287 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_rx_grid_span, tvb, offset, 4, ENC_BIG_ENDIAN); |
4288 | 0 | offset+=4; |
4289 | | |
4290 | | /* uint16_t tx_pwr; */ |
4291 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_tx_pwr, tvb, offset, 2, ENC_BIG_ENDIAN); |
4292 | 0 | offset+=2; |
4293 | | |
4294 | | /* uint16_t rx_pwr; */ |
4295 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_rx_pwr, tvb, offset, 2, ENC_BIG_ENDIAN); |
4296 | 0 | offset+=2; |
4297 | | |
4298 | | /* uint16_t bias_current; */ |
4299 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_bias_current, tvb, offset, 2, ENC_BIG_ENDIAN); |
4300 | 0 | offset+=2; |
4301 | | |
4302 | | /* uint16_t temperature; */ |
4303 | 0 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_optical_temperature, tvb, offset, 2, ENC_BIG_ENDIAN); |
4304 | 0 | offset+=2; |
4305 | |
|
4306 | 0 | return offset; |
4307 | 0 | } |
4308 | | |
4309 | | |
4310 | | |
4311 | 15 | #define OFPPSPT_ETHERNET 0 |
4312 | 0 | #define OFPPSPT_OPTICAL 1 |
4313 | 1 | #define OFPPSPT_EXPERIMENTER 0xFFFF |
4314 | | static const value_string openflow_v5_port_stats_prop_type_values[] = { |
4315 | | { OFPPSPT_ETHERNET, "OFPPSPT_ETHERNET" }, |
4316 | | { OFPPSPT_OPTICAL, "OFPPSPT_OPTICAL" }, |
4317 | | { OFPPSPT_EXPERIMENTER, "OFPPSPT_EXPERIMENTER" }, |
4318 | | { 0, NULL } |
4319 | | }; |
4320 | | |
4321 | | static int |
4322 | | dissect_openflow_port_stats_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4323 | 24 | { |
4324 | 24 | proto_tree *prop_tree; |
4325 | 24 | proto_tree *ti; |
4326 | 24 | uint16_t prop_type; |
4327 | 24 | uint16_t prop_length; |
4328 | | |
4329 | 24 | prop_type = tvb_get_ntohs(tvb, offset); |
4330 | 24 | prop_length = tvb_get_ntohs(tvb, offset); |
4331 | | |
4332 | 24 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, prop_length, ett_openflow_v5_port_stats_prop, NULL, "Port stats. property"); |
4333 | | |
4334 | | /* uint16_t type; */ |
4335 | 24 | proto_tree_add_item(prop_tree, hf_openflow_v5_port_stats_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
4336 | 24 | offset+=2; |
4337 | | |
4338 | | /* uint16_t len; */ |
4339 | 24 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_port_stats_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4340 | 24 | offset+=2; |
4341 | | |
4342 | 24 | switch (prop_type) { |
4343 | 15 | case OFPPSPT_ETHERNET: |
4344 | 15 | offset = dissect_openflow_port_stats_prop_ethernet_v5(tvb, pinfo, prop_tree, offset, length); |
4345 | 15 | break; |
4346 | | |
4347 | 0 | case OFPPSPT_OPTICAL: |
4348 | 0 | offset = dissect_openflow_port_stats_prop_optical_v5(tvb, pinfo, prop_tree, offset, length); |
4349 | 0 | break; |
4350 | | |
4351 | 1 | case OFPPSPT_EXPERIMENTER: |
4352 | 1 | if (prop_length <= 12) { |
4353 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
4354 | 0 | offset = length; |
4355 | 0 | break; |
4356 | 0 | } |
4357 | | /* uint32_t experimenter; */ |
4358 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
4359 | 1 | offset+=4; |
4360 | | |
4361 | | /* uint32_t exp_type; */ |
4362 | 1 | proto_tree_add_item(tree, hf_openflow_v5_port_stats_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
4363 | 1 | offset+=4; |
4364 | | |
4365 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_port_stats_prop_undecoded, |
4366 | 1 | tvb, offset, prop_length - 12, "Experimenter port stats. property."); |
4367 | 1 | offset += prop_length - 12; |
4368 | 1 | break; |
4369 | | |
4370 | 7 | default: |
4371 | 7 | if (prop_length <= 4) { |
4372 | 1 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
4373 | 1 | offset = length; |
4374 | 1 | break; |
4375 | 1 | } |
4376 | 6 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_port_stats_prop_undecoded, |
4377 | 6 | tvb, offset, prop_length - 4, "Unknown port stats. property."); |
4378 | 6 | offset += prop_length - 4; |
4379 | 6 | break; |
4380 | 24 | } |
4381 | | |
4382 | 18 | return offset; |
4383 | 24 | } |
4384 | | |
4385 | | static int |
4386 | | dissect_openflow_port_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4387 | 22 | { |
4388 | 22 | proto_tree *stats_tree; |
4389 | 22 | uint16_t stats_end; |
4390 | | |
4391 | 22 | stats_tree = proto_tree_add_subtree(tree, tvb, offset, 112, ett_openflow_v5_port_stats, NULL, "Port stats"); |
4392 | | |
4393 | | /* uint16_t length; */ |
4394 | 22 | stats_end = tvb_get_ntohs(tvb, offset) + offset - 4; |
4395 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4396 | 22 | offset+=2; |
4397 | | |
4398 | | /* uint8_t pad[2]; */ |
4399 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_pad, tvb, offset, 2, ENC_NA); |
4400 | 22 | offset+=2; |
4401 | | |
4402 | | /* uint32_t port_no; */ |
4403 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
4404 | 22 | offset+=4; |
4405 | | |
4406 | | /* uint32_t duration_sec; */ |
4407 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_duration_sec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4408 | 22 | offset+=4; |
4409 | | |
4410 | | /* uint32_t duration_nsec; */ |
4411 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_duration_nsec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4412 | 22 | offset+=4; |
4413 | | |
4414 | | /* uint64_t rx_packets; */ |
4415 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_rx_packets, tvb, offset, 8, ENC_BIG_ENDIAN); |
4416 | 22 | offset+=8; |
4417 | | |
4418 | | /* uint64_t tx_packets; */ |
4419 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_tx_packets, tvb, offset, 8, ENC_BIG_ENDIAN); |
4420 | 22 | offset+=8; |
4421 | | |
4422 | | /* uint64_t rx_bytes; */ |
4423 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_rx_bytes, tvb, offset, 8, ENC_BIG_ENDIAN); |
4424 | 22 | offset+=8; |
4425 | | |
4426 | | /* uint64_t tx_bytes; */ |
4427 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_tx_bytes, tvb, offset, 8, ENC_BIG_ENDIAN); |
4428 | 22 | offset+=8; |
4429 | | |
4430 | | /* uint64_t rx_dropped; */ |
4431 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_rx_dropped, tvb, offset, 8, ENC_BIG_ENDIAN); |
4432 | 22 | offset+=8; |
4433 | | |
4434 | | /* uint64_t tx_dropped; */ |
4435 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_tx_dropped, tvb, offset, 8, ENC_BIG_ENDIAN); |
4436 | 22 | offset+=8; |
4437 | | |
4438 | | /* uint64_t rx_errors; */ |
4439 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_rx_errors, tvb, offset, 8, ENC_BIG_ENDIAN); |
4440 | 22 | offset+=8; |
4441 | | |
4442 | | /* uint64_t tx_errors; */ |
4443 | 22 | proto_tree_add_item(stats_tree, hf_openflow_v5_port_stats_tx_errors, tvb, offset, 8, ENC_BIG_ENDIAN); |
4444 | 22 | offset+=8; |
4445 | | |
4446 | | /* struct ofp_port_stats_prop_header properties[0]; */ |
4447 | 46 | while (offset < stats_end) { |
4448 | 24 | offset = dissect_openflow_port_stats_prop_v5(tvb, pinfo, tree, offset, length); |
4449 | 24 | } |
4450 | | |
4451 | 22 | return offset; |
4452 | 22 | } |
4453 | | |
4454 | | |
4455 | | |
4456 | | static int |
4457 | | dissect_openflow_table_desc_v5(tvbuff_t *parent_tvb, packet_info *pinfo _U_, proto_tree *tree, int parent_offset) |
4458 | 0 | { |
4459 | 0 | proto_item *ti; |
4460 | 0 | proto_tree *desc_tree, *conf_tree; |
4461 | 0 | uint16_t desc_length; |
4462 | 0 | tvbuff_t *tvb; |
4463 | 0 | unsigned offset = 0; |
4464 | |
|
4465 | 0 | desc_length = tvb_get_ntohs(parent_tvb, parent_offset); |
4466 | 0 | tvb = tvb_new_subset_length(parent_tvb, parent_offset, desc_length); |
4467 | |
|
4468 | 0 | desc_tree = proto_tree_add_subtree(tree, tvb, offset, desc_length, ett_openflow_v5_table_desc, NULL, "Table desc"); |
4469 | | |
4470 | | /* uint16_t length; */ |
4471 | 0 | proto_tree_add_item(desc_tree, hf_openflow_v5_table_desc_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4472 | 0 | offset+=2; |
4473 | | |
4474 | | /* uint8_t table_id; */ |
4475 | 0 | proto_tree_add_item(desc_tree, hf_openflow_v5_table_desc_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
4476 | 0 | offset+=1; |
4477 | | |
4478 | | /* uint8_t pad[1]; */ |
4479 | 0 | proto_tree_add_item(desc_tree, hf_openflow_v5_table_desc_pad, tvb, offset, 1, ENC_NA); |
4480 | 0 | offset+=1; |
4481 | | |
4482 | | /* uint32_t config; */ |
4483 | 0 | ti = proto_tree_add_item(desc_tree, hf_openflow_v5_table_desc_config, tvb, offset, 4, ENC_NA); |
4484 | 0 | conf_tree = proto_item_add_subtree(ti, ett_openflow_v5_table_desc_config); |
4485 | |
|
4486 | 0 | proto_tree_add_item(conf_tree, hf_openflow_v5_table_desc_config_eviction, tvb, offset, 4, ENC_BIG_ENDIAN); |
4487 | 0 | proto_tree_add_item(conf_tree, hf_openflow_v5_table_desc_config_vacancy_events, tvb, offset, 4, ENC_BIG_ENDIAN); |
4488 | 0 | offset+=4; |
4489 | | |
4490 | | /* struct ofp_table_mod_prop_header properties[0]; */ |
4491 | 0 | while (tvb_reported_length_remaining(tvb, offset)) { |
4492 | 0 | offset = dissect_openflow_tablemod_prop_v5(tvb, pinfo, desc_tree, offset, tvb_reported_length(tvb)); |
4493 | 0 | } |
4494 | |
|
4495 | 0 | return parent_offset + offset; |
4496 | 0 | } |
4497 | | |
4498 | | |
4499 | | |
4500 | | #define OFPQSPT_EXPERIMENTER 0xffff |
4501 | | static const value_string openflow_v5_queue_stats_prop_type_values[] = { |
4502 | | { OFPQSPT_EXPERIMENTER, "OFPQSPT_EXPERIMENTER" }, |
4503 | | { 0, NULL } |
4504 | | }; |
4505 | | |
4506 | | static int |
4507 | | dissect_openflow_queue_stats_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4508 | 2 | { |
4509 | 2 | proto_tree *prop_tree; |
4510 | 2 | proto_tree *ti; |
4511 | 2 | uint16_t prop_type; |
4512 | 2 | uint16_t prop_length; |
4513 | | |
4514 | 2 | prop_type = tvb_get_ntohs(tvb, offset); |
4515 | 2 | prop_length = tvb_get_ntohs(tvb, offset + 2); |
4516 | | |
4517 | 2 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, prop_length, ett_openflow_v5_queue_stats_prop, NULL, "Queue stats property"); |
4518 | | |
4519 | | /* uint16_t type; */ |
4520 | 2 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_stats_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
4521 | 2 | offset+=2; |
4522 | | |
4523 | | /* uint16_t len; */ |
4524 | 2 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_queue_stats_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4525 | 2 | offset+=2; |
4526 | | |
4527 | 2 | switch (prop_type) { |
4528 | 1 | case OFPMP_EXPERIMENTER: |
4529 | 1 | if (prop_length <= 12) { |
4530 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
4531 | 0 | offset = length; |
4532 | 0 | break; |
4533 | 0 | } |
4534 | | /* uint32_t experimenter; */ |
4535 | 1 | proto_tree_add_item(tree, hf_openflow_v5_queue_stats_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
4536 | 1 | offset+=4; |
4537 | | |
4538 | | /* uint32_t exp_type; */ |
4539 | 1 | proto_tree_add_item(tree, hf_openflow_v5_queue_stats_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
4540 | 1 | offset+=4; |
4541 | | |
4542 | | /* uint32_t experimenter_data[0]; */ |
4543 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_queue_stats_prop_undecoded, |
4544 | 1 | tvb, offset, length - 12, "Experimenter queue stats prop body."); |
4545 | 1 | offset += prop_length - 12; |
4546 | 1 | break; |
4547 | | |
4548 | 1 | default: |
4549 | 1 | if (prop_length <= 4) { |
4550 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
4551 | 0 | offset = length; |
4552 | 0 | break; |
4553 | 0 | } |
4554 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_queue_stats_prop_undecoded, |
4555 | 1 | tvb, offset, length - 4, "Unknown queue stats prop body."); |
4556 | 1 | offset += prop_length - 4; |
4557 | 1 | break; |
4558 | 2 | } |
4559 | | |
4560 | 0 | return offset; |
4561 | 2 | } |
4562 | | |
4563 | | |
4564 | | |
4565 | | static int |
4566 | | dissect_openflow_queue_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4567 | 11 | { |
4568 | 11 | proto_tree *stats_tree; |
4569 | 11 | uint16_t stats_len; |
4570 | 11 | int32_t stats_end; |
4571 | | |
4572 | 11 | stats_len = tvb_get_ntohs(tvb, offset); |
4573 | 11 | stats_end = offset + stats_len; |
4574 | | |
4575 | 11 | stats_tree = proto_tree_add_subtree(tree, tvb, offset, stats_len, ett_openflow_v5_queue_stats, NULL, "Queue stats"); |
4576 | | |
4577 | | /* uint16_t length; */ |
4578 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4579 | 11 | offset+=2; |
4580 | | |
4581 | | /* uint8_t pad[6]; */ |
4582 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_pad, tvb, offset, 2, ENC_NA); |
4583 | 11 | offset+=2; |
4584 | | |
4585 | | /* uint32_t port_no; */ |
4586 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
4587 | 11 | offset+=4; |
4588 | | |
4589 | | /* uint32_t queue_id; */ |
4590 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_queue_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
4591 | 11 | offset+=4; |
4592 | | |
4593 | | /* uint64_t tx_bytes; */ |
4594 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_tx_bytes, tvb, offset, 8, ENC_BIG_ENDIAN); |
4595 | 11 | offset+=8; |
4596 | | |
4597 | | /* uint64_t tx_packets; */ |
4598 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_tx_packets, tvb, offset, 8, ENC_BIG_ENDIAN); |
4599 | 11 | offset+=8; |
4600 | | |
4601 | | /* uint64_t tx_errors; */ |
4602 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_tx_errors, tvb, offset, 8, ENC_BIG_ENDIAN); |
4603 | 11 | offset+=8; |
4604 | | |
4605 | | /* uint32_t duration_sec; */ |
4606 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_duration_sec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4607 | 11 | offset+=4; |
4608 | | |
4609 | | /* uint32_t duration_nsec; */ |
4610 | 11 | proto_tree_add_item(stats_tree, hf_openflow_v5_queue_stats_duration_nsec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4611 | 11 | offset+=4; |
4612 | | |
4613 | | /* struct ofp_queue_stats_prop_header properties[0]; */ |
4614 | 13 | while (offset < stats_end) { |
4615 | 2 | offset = dissect_openflow_queue_stats_prop_v5(tvb, pinfo, stats_tree, offset, length); |
4616 | 2 | } |
4617 | | |
4618 | 11 | return offset; |
4619 | 11 | } |
4620 | | |
4621 | | |
4622 | | |
4623 | | static int |
4624 | | dissect_openflow_bucket_counter_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4625 | 62 | { |
4626 | 62 | proto_tree *counter_tree; |
4627 | | |
4628 | 62 | counter_tree = proto_tree_add_subtree(tree, tvb, offset, 16, ett_openflow_v5_bucket_counter, NULL, "Bucket counter"); |
4629 | | |
4630 | | /* uint64_t packet_count; */ |
4631 | 62 | proto_tree_add_item(counter_tree, hf_openflow_v5_bucket_counter_packet_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4632 | 62 | offset+=8; |
4633 | | |
4634 | | /* uint64_t byte_count; */ |
4635 | 62 | proto_tree_add_item(counter_tree, hf_openflow_v5_bucket_counter_byte_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4636 | 62 | offset+=8; |
4637 | | |
4638 | 62 | return offset; |
4639 | 62 | } |
4640 | | |
4641 | | |
4642 | | static int |
4643 | | dissect_openflow_group_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4644 | 21 | { |
4645 | 21 | proto_item *ti; |
4646 | 21 | proto_tree *stats_tree; |
4647 | 21 | uint16_t stats_len; |
4648 | 21 | int32_t stats_end; |
4649 | | |
4650 | 21 | stats_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_group_stats, &ti, "Group stats"); |
4651 | | |
4652 | | /* uint16_t length; */ |
4653 | 21 | stats_len = tvb_get_ntohs(tvb, offset); |
4654 | 21 | stats_end = offset + stats_len; |
4655 | 21 | proto_item_set_len(ti, stats_len); |
4656 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_group_stats_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4657 | 21 | offset+=2; |
4658 | | |
4659 | | /* uint8_t pad[2]; */ |
4660 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_group_stats_pad, tvb, offset, 2, ENC_NA); |
4661 | 21 | offset+=2; |
4662 | | |
4663 | | /* uint32_t group_id; */ |
4664 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_group_stats_group_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
4665 | 21 | offset+=4; |
4666 | | |
4667 | | /* uint32_t ref_count; */ |
4668 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_group_stats_ref_count, tvb, offset, 4, ENC_BIG_ENDIAN); |
4669 | 21 | offset+=4; |
4670 | | |
4671 | | /* uint8_t pad2[4]; */ |
4672 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_group_stats_pad2, tvb, offset, 4, ENC_NA); |
4673 | 21 | offset+=4; |
4674 | | |
4675 | | /* uint64_t packet_count; */ |
4676 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_group_stats_packet_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4677 | 21 | offset+=8; |
4678 | | |
4679 | | /* uint64_t byte_count; */ |
4680 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_group_stats_byte_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4681 | 21 | offset+=8; |
4682 | | |
4683 | | /* uint32_t duration_sec; */ |
4684 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_duration_sec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4685 | 21 | offset+=4; |
4686 | | |
4687 | | /* uint32_t duration_nsec; */ |
4688 | 21 | proto_tree_add_item(stats_tree, hf_openflow_v5_flow_stats_duration_nsec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4689 | 21 | offset+=4; |
4690 | | |
4691 | | /* struct ofp_bucket_counter bucket_stats[0]; */ |
4692 | 83 | while (offset < stats_end) { |
4693 | 62 | offset = dissect_openflow_bucket_counter_v5(tvb, pinfo, stats_tree, offset, length); |
4694 | 62 | } |
4695 | | |
4696 | 21 | return offset; |
4697 | 21 | } |
4698 | | |
4699 | | static int |
4700 | | dissect_openflow_group_desc_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
4701 | 60 | { |
4702 | 60 | proto_item *ti; |
4703 | 60 | proto_tree *desc_tree; |
4704 | | |
4705 | 60 | uint16_t desc_len; |
4706 | 60 | int32_t desc_end; |
4707 | | |
4708 | 60 | desc_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_group_desc, &ti, "Group description"); |
4709 | | |
4710 | | /* uint16_t length; */ |
4711 | 60 | desc_len = tvb_get_ntohs(tvb, offset); |
4712 | 60 | desc_end = offset + desc_len; |
4713 | 60 | proto_item_set_len(ti, desc_len); |
4714 | 60 | proto_tree_add_item(desc_tree, hf_openflow_v5_group_desc_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
4715 | 60 | offset+=2; |
4716 | | |
4717 | | /* uint8_t type; */ |
4718 | 60 | proto_tree_add_item(desc_tree, hf_openflow_v5_group_desc_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
4719 | 60 | offset+=1; |
4720 | | |
4721 | | /* uint8_t pad; */ |
4722 | 60 | proto_tree_add_item(desc_tree, hf_openflow_v5_group_desc_pad, tvb, offset, 1, ENC_NA); |
4723 | 60 | offset+=1; |
4724 | | |
4725 | | /* uint32_t group_id; */ |
4726 | 60 | proto_tree_add_item(desc_tree, hf_openflow_v5_group_desc_group_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
4727 | 60 | offset+=4; |
4728 | | |
4729 | | /* struct ofp_bucket buckets[0]; */ |
4730 | 200 | while (offset < desc_end) { |
4731 | 140 | offset = dissect_openflow_bucket_v5(tvb, pinfo, desc_tree, offset, length); |
4732 | 140 | } |
4733 | | |
4734 | 60 | return offset; |
4735 | 60 | } |
4736 | | |
4737 | | |
4738 | 16 | #define OFPGFC_SELECT_WEIGHT 1 << 0 |
4739 | 16 | #define OFPGFC_SELECT_LIVENESS 1 << 1 |
4740 | 16 | #define OFPGFC_CHAINING 1 << 2 |
4741 | 16 | #define OFPGFC_CHAINING_CHECKS 1 << 3 |
4742 | | static void |
4743 | | dissect_openflow_group_features_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4744 | 0 | { |
4745 | 0 | proto_item *ti; |
4746 | 0 | proto_tree *types_tree, *caps_tree, *acts_tree; |
4747 | | |
4748 | | /* uint32_t types; */ |
4749 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_group_features_types, tvb, offset, 4, ENC_BIG_ENDIAN); |
4750 | 0 | types_tree = proto_item_add_subtree(ti, ett_openflow_v5_group_features_types); |
4751 | |
|
4752 | 0 | proto_tree_add_item(types_tree, hf_openflow_v5_group_features_types_all, tvb, offset, 4, ENC_BIG_ENDIAN); |
4753 | 0 | proto_tree_add_item(types_tree, hf_openflow_v5_group_features_types_select, tvb, offset, 4, ENC_BIG_ENDIAN); |
4754 | 0 | proto_tree_add_item(types_tree, hf_openflow_v5_group_features_types_indirect, tvb, offset, 4, ENC_BIG_ENDIAN); |
4755 | 0 | proto_tree_add_item(types_tree, hf_openflow_v5_group_features_types_ff, tvb, offset, 4, ENC_BIG_ENDIAN); |
4756 | 0 | offset+=4; |
4757 | | |
4758 | | /* uint32_t capabilities; */ |
4759 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_group_features_capabilities, tvb, offset, 4, ENC_BIG_ENDIAN); |
4760 | 0 | caps_tree = proto_item_add_subtree(ti, ett_openflow_v5_group_features_capabilities); |
4761 | |
|
4762 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_group_features_capabilities_select_weight, tvb, offset, 4, ENC_BIG_ENDIAN); |
4763 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_group_features_capabilities_select_liveness, tvb, offset, 4, ENC_BIG_ENDIAN); |
4764 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_group_features_capabilities_chaining, tvb, offset, 4, ENC_BIG_ENDIAN); |
4765 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_group_features_capabilities_chaining_checks, tvb, offset, 4, ENC_BIG_ENDIAN); |
4766 | 0 | offset+=4; |
4767 | | |
4768 | | /* max_groups[4]; */ |
4769 | 0 | proto_tree_add_item(tree, hf_openflow_v5_group_features_max_groups_all, tvb, offset, 4, ENC_BIG_ENDIAN); |
4770 | 0 | offset+=4; |
4771 | 0 | proto_tree_add_item(tree, hf_openflow_v5_group_features_max_groups_select, tvb, offset, 4, ENC_BIG_ENDIAN); |
4772 | 0 | offset+=4; |
4773 | 0 | proto_tree_add_item(tree, hf_openflow_v5_group_features_max_groups_indirect, tvb, offset, 4, ENC_BIG_ENDIAN); |
4774 | 0 | offset+=4; |
4775 | 0 | proto_tree_add_item(tree, hf_openflow_v5_group_features_max_groups_ff, tvb, offset, 4, ENC_BIG_ENDIAN); |
4776 | 0 | offset+=4; |
4777 | | |
4778 | | /* uint32_t actions[4]; */ |
4779 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_group_features_actions_all, tvb, offset, 4, ENC_BIG_ENDIAN); |
4780 | 0 | acts_tree = proto_item_add_subtree(ti, ett_openflow_v5_group_features_actions_all); |
4781 | |
|
4782 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_output, tvb, offset, 4, ENC_BIG_ENDIAN); |
4783 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_copy_ttl_out, tvb, offset, 4, ENC_BIG_ENDIAN); |
4784 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_copy_ttl_in, tvb, offset, 4, ENC_BIG_ENDIAN); |
4785 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_set_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4786 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_dec_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4787 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_push_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4788 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_pop_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4789 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_push_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4790 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_pop_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4791 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_set_queue, tvb, offset, 4, ENC_BIG_ENDIAN); |
4792 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
4793 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_set_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4794 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_dec_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4795 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_set_field, tvb, offset, 4, ENC_BIG_ENDIAN); |
4796 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_push_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4797 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_all_pop_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4798 | 0 | offset+=4; |
4799 | |
|
4800 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_group_features_actions_select, tvb, offset, 4, ENC_BIG_ENDIAN); |
4801 | 0 | acts_tree = proto_item_add_subtree(ti, ett_openflow_v5_group_features_actions_select); |
4802 | |
|
4803 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_output, tvb, offset, 4, ENC_BIG_ENDIAN); |
4804 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_copy_ttl_out, tvb, offset, 4, ENC_BIG_ENDIAN); |
4805 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_copy_ttl_in, tvb, offset, 4, ENC_BIG_ENDIAN); |
4806 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_set_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4807 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_dec_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4808 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_push_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4809 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_pop_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4810 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_push_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4811 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_pop_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4812 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_set_queue, tvb, offset, 4, ENC_BIG_ENDIAN); |
4813 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
4814 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_set_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4815 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_dec_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4816 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_set_field, tvb, offset, 4, ENC_BIG_ENDIAN); |
4817 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_push_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4818 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_select_pop_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4819 | 0 | offset+=4; |
4820 | |
|
4821 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_group_features_actions_indirect, tvb, offset, 4, ENC_BIG_ENDIAN); |
4822 | 0 | acts_tree = proto_item_add_subtree(ti, ett_openflow_v5_group_features_actions_indirect); |
4823 | |
|
4824 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_output, tvb, offset, 4, ENC_BIG_ENDIAN); |
4825 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_copy_ttl_out, tvb, offset, 4, ENC_BIG_ENDIAN); |
4826 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_copy_ttl_in, tvb, offset, 4, ENC_BIG_ENDIAN); |
4827 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_set_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4828 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_dec_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4829 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_push_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4830 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_pop_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4831 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_push_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4832 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_pop_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4833 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_set_queue, tvb, offset, 4, ENC_BIG_ENDIAN); |
4834 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
4835 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_set_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4836 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_dec_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4837 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_set_field, tvb, offset, 4, ENC_BIG_ENDIAN); |
4838 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_push_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4839 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_indirect_pop_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4840 | 0 | offset+=4; |
4841 | |
|
4842 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_group_features_actions_ff, tvb, offset, 4, ENC_BIG_ENDIAN); |
4843 | 0 | acts_tree = proto_item_add_subtree(ti, ett_openflow_v5_group_features_actions_ff); |
4844 | |
|
4845 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_output, tvb, offset, 4, ENC_BIG_ENDIAN); |
4846 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_copy_ttl_out, tvb, offset, 4, ENC_BIG_ENDIAN); |
4847 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_copy_ttl_in, tvb, offset, 4, ENC_BIG_ENDIAN); |
4848 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_set_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4849 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_dec_mpls_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4850 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_push_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4851 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_pop_vlan, tvb, offset, 4, ENC_BIG_ENDIAN); |
4852 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_push_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4853 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_pop_mpls, tvb, offset, 4, ENC_BIG_ENDIAN); |
4854 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_set_queue, tvb, offset, 4, ENC_BIG_ENDIAN); |
4855 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
4856 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_set_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4857 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_dec_nw_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
4858 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_set_field, tvb, offset, 4, ENC_BIG_ENDIAN); |
4859 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_push_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4860 | 0 | proto_tree_add_item(acts_tree, hf_openflow_v5_group_features_actions_ff_pop_pbb, tvb, offset, 4, ENC_BIG_ENDIAN); |
4861 | | /*offset+=4;*/ |
4862 | 0 | } |
4863 | | |
4864 | | |
4865 | | static int |
4866 | | dissect_openflow_meter_band_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4867 | 52 | { |
4868 | 52 | proto_tree *stats_tree; |
4869 | | |
4870 | 52 | stats_tree = proto_tree_add_subtree(tree, tvb, offset, 16, ett_openflow_v5_meter_band_stats, NULL, "Meter band stats"); |
4871 | | |
4872 | | /* uint64_t packet_band_count; */ |
4873 | 52 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_band_stats_packet_band_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4874 | 52 | offset+=8; |
4875 | | |
4876 | | /* uint64_t byte_band_count; */ |
4877 | 52 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_band_stats_byte_band_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4878 | 52 | offset+=8; |
4879 | | |
4880 | 52 | return offset; |
4881 | 52 | } |
4882 | | |
4883 | | |
4884 | | static int |
4885 | | dissect_openflow_meter_stats_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4886 | 43 | { |
4887 | 43 | proto_item *ti; |
4888 | 43 | proto_tree *stats_tree; |
4889 | 43 | uint16_t stats_len; |
4890 | 43 | uint16_t stats_end; |
4891 | | |
4892 | 43 | stats_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_meter_stats, &ti, "Meter stats"); |
4893 | | |
4894 | | /* uint32_t meter_id; */ |
4895 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_meter_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
4896 | 43 | offset+=4; |
4897 | | |
4898 | | /* uint16_t len; */ |
4899 | 43 | stats_len = tvb_get_ntohs(tvb, offset); |
4900 | 43 | stats_end = offset - 4 + stats_len; |
4901 | 43 | proto_item_set_len(ti, stats_len); |
4902 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
4903 | 43 | offset+=2; |
4904 | | |
4905 | | /* uint8_t pad[6]; */ |
4906 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_pad, tvb, offset, 6, ENC_NA); |
4907 | 43 | offset+=6; |
4908 | | |
4909 | | /* uint32_t flow_count; */ |
4910 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_flow_count, tvb, offset, 4, ENC_BIG_ENDIAN); |
4911 | 43 | offset+=4; |
4912 | | |
4913 | | /* uint64_t packet_in_count; */ |
4914 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_packet_in_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4915 | 43 | offset+=8; |
4916 | | |
4917 | | /* uint64_t byte_in_count; */ |
4918 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_byte_in_count, tvb, offset, 8, ENC_BIG_ENDIAN); |
4919 | 43 | offset+=8; |
4920 | | |
4921 | | /* uint32_t duration_sec; */ |
4922 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_duration_sec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4923 | 43 | offset+=4; |
4924 | | |
4925 | | /* uint32_t duration_nsec; */ |
4926 | 43 | proto_tree_add_item(stats_tree, hf_openflow_v5_meter_stats_duration_nsec, tvb, offset, 4, ENC_BIG_ENDIAN); |
4927 | 43 | offset+=4; |
4928 | | |
4929 | | /* struct ofp_meter_band_stats band_stats[0]; */ |
4930 | 95 | while (offset < stats_end) { |
4931 | 52 | offset = dissect_openflow_meter_band_stats_v5(tvb, pinfo, stats_tree, offset, length); |
4932 | 52 | } |
4933 | | |
4934 | 43 | return offset; |
4935 | 43 | } |
4936 | | |
4937 | | |
4938 | | static int |
4939 | | dissect_openflow_meter_config_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4940 | 111 | { |
4941 | 111 | proto_item *ti; |
4942 | 111 | proto_tree *conf_tree, *flags_tree; |
4943 | 111 | uint16_t config_len; |
4944 | 111 | int32_t config_end; |
4945 | | |
4946 | 111 | conf_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_meter_config, &ti, "Meter config"); |
4947 | | |
4948 | | /* uint16_t len; */ |
4949 | 111 | config_len = tvb_get_ntohs(tvb, offset); |
4950 | 111 | config_end = offset + config_len; |
4951 | 111 | proto_item_set_len(ti, config_len); |
4952 | 111 | proto_tree_add_item(conf_tree, hf_openflow_v5_meter_config_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
4953 | 111 | offset+=2; |
4954 | | |
4955 | | /* uint16_t flags; */ |
4956 | 111 | ti = proto_tree_add_item(conf_tree, hf_openflow_v5_meter_config_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
4957 | 111 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_meter_config_flags); |
4958 | | |
4959 | 111 | proto_tree_add_item(flags_tree, hf_openflow_v5_meter_config_flags_kbps, tvb, offset, 2, ENC_BIG_ENDIAN); |
4960 | 111 | proto_tree_add_item(flags_tree, hf_openflow_v5_meter_config_flags_pktps, tvb, offset, 2, ENC_BIG_ENDIAN); |
4961 | 111 | proto_tree_add_item(flags_tree, hf_openflow_v5_meter_config_flags_burst, tvb, offset, 2, ENC_BIG_ENDIAN); |
4962 | 111 | proto_tree_add_item(flags_tree, hf_openflow_v5_meter_config_flags_stats, tvb, offset, 2, ENC_BIG_ENDIAN); |
4963 | 111 | offset+=2; |
4964 | | |
4965 | | /* uint32_t meter_id; */ |
4966 | 111 | proto_tree_add_item(conf_tree, hf_openflow_v5_meter_config_meter_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
4967 | 111 | offset+=4; |
4968 | | |
4969 | | /* struct ofp_meter_band_header bands[0]; */ |
4970 | 191 | while (offset < config_end) { |
4971 | 80 | offset = dissect_openflow_meter_band_v5(tvb, pinfo, conf_tree, offset, length); |
4972 | 80 | } |
4973 | | |
4974 | 111 | return offset; |
4975 | 111 | } |
4976 | | |
4977 | | |
4978 | 48 | #define OFPMF_KBPS 1 << 0 |
4979 | 48 | #define OFPMF_PKTPS 1 << 1 |
4980 | 48 | #define OFPMF_BURST 1 << 2 |
4981 | 48 | #define OFPMF_STATS 1 << 3 |
4982 | | static void |
4983 | | dissect_openflow_meter_features_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
4984 | 0 | { |
4985 | 0 | proto_item *ti; |
4986 | 0 | proto_tree *bands_tree, *caps_tree; |
4987 | | |
4988 | | /* uint32_t max_meter; */ |
4989 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_features_max_meter, tvb, offset, 4, ENC_BIG_ENDIAN); |
4990 | 0 | offset+=4; |
4991 | | |
4992 | | /* uint32_t band_types; */ |
4993 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_meter_features_band_types, tvb, offset, 4, ENC_BIG_ENDIAN); |
4994 | 0 | bands_tree = proto_item_add_subtree(ti, ett_openflow_v5_meter_features_band_types); |
4995 | |
|
4996 | 0 | proto_tree_add_item(bands_tree, hf_openflow_v5_meter_features_band_types_drop, tvb, offset, 4, ENC_BIG_ENDIAN); |
4997 | 0 | proto_tree_add_item(bands_tree, hf_openflow_v5_meter_features_band_types_dscp_remark, tvb, offset, 4, ENC_BIG_ENDIAN); |
4998 | 0 | offset+=4; |
4999 | | |
5000 | | /* uint32_t capabilities; */ |
5001 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_meter_features_capabilities, tvb, offset, 4, ENC_BIG_ENDIAN); |
5002 | 0 | caps_tree = proto_item_add_subtree(ti, ett_openflow_v5_meter_features_capabilities); |
5003 | |
|
5004 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_meter_features_capabilities_kbps, tvb, offset, 4, ENC_BIG_ENDIAN); |
5005 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_meter_features_capabilities_pktps, tvb, offset, 4, ENC_BIG_ENDIAN); |
5006 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_meter_features_capabilities_burst, tvb, offset, 4, ENC_BIG_ENDIAN); |
5007 | 0 | proto_tree_add_item(caps_tree, hf_openflow_v5_meter_features_capabilities_stats, tvb, offset, 4, ENC_BIG_ENDIAN); |
5008 | 0 | offset+=4; |
5009 | | |
5010 | | /* uint8_t max_bands; */ |
5011 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_features_max_bands, tvb, offset, 1, ENC_BIG_ENDIAN); |
5012 | 0 | offset+=1; |
5013 | | |
5014 | | /* uint8_t max_color; */ |
5015 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_features_max_color, tvb, offset, 1, ENC_BIG_ENDIAN); |
5016 | 0 | offset+=1; |
5017 | | |
5018 | | /* uint8_t pad[2]; */ |
5019 | 0 | proto_tree_add_item(tree, hf_openflow_v5_meter_features_pad, tvb, offset, 2, ENC_NA); |
5020 | | /*offset+=2;*/ |
5021 | 0 | } |
5022 | | |
5023 | | |
5024 | | |
5025 | | #define OFPQDP_MIN_RATE_MAX 1000 |
5026 | | static const value_string openflow_v5_queue_desc_prop_min_rate_reserved_values[] = { |
5027 | | { 0xffff, "OFPQDP_MIN_RATE_UNCFG" }, |
5028 | | { 0, NULL } |
5029 | | }; |
5030 | | |
5031 | | #define OFPQDP_MAX_RATE_MAX 1000 |
5032 | | static const value_string openflow_v5_queue_desc_prop_max_rate_reserved_values[] = { |
5033 | | { 0xffff, "OFPQDP_MAX_RATE_UNCFG" }, |
5034 | | { 0, NULL } |
5035 | | }; |
5036 | | |
5037 | 1 | #define OFPQDPT_MIN_RATE 1 |
5038 | 5 | #define OFPQDPT_MAX_RATE 2 |
5039 | 1 | #define OFPQDPT_EXPERIMENTER 0xffff |
5040 | | static const value_string openflow_v5_queue_desc_prop_property_values[] = { |
5041 | | { OFPQDPT_MIN_RATE, "OFPQDPT_MIN_RATE" }, |
5042 | | { OFPQDPT_MAX_RATE, "OFPQDPT_MAX_RATE" }, |
5043 | | { OFPQDPT_EXPERIMENTER, "OFPQDPT_EXPERIMENTER" }, |
5044 | | { 0, NULL }, |
5045 | | }; |
5046 | | |
5047 | | static int |
5048 | | dissect_openflow_queue_desc_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5049 | 89 | { |
5050 | 89 | proto_item *ti; |
5051 | 89 | proto_tree *prop_tree; |
5052 | 89 | uint16_t prop_type; |
5053 | 89 | uint16_t prop_len; |
5054 | | |
5055 | 89 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_queue_desc_prop, &ti, "Queue property"); |
5056 | | |
5057 | | /* uint16_t property; */ |
5058 | 89 | prop_type = tvb_get_ntohs(tvb, offset); |
5059 | 89 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_property, tvb, offset, 2, ENC_BIG_ENDIAN); |
5060 | 89 | offset+=2; |
5061 | | |
5062 | | /* uint16_t len; */ |
5063 | 89 | prop_len = tvb_get_ntohs(tvb, offset); |
5064 | 89 | proto_item_set_len(ti, prop_len); |
5065 | 89 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
5066 | 89 | offset+=2; |
5067 | | |
5068 | | /* uint8_t pad[4]; */ |
5069 | 89 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_pad, tvb, offset, 4, ENC_NA); |
5070 | 89 | offset+=4; |
5071 | | |
5072 | 89 | if (prop_len < 8) { |
5073 | 68 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
5074 | 68 | return offset; |
5075 | 68 | } |
5076 | | |
5077 | 21 | switch (prop_type) { |
5078 | 1 | case OFPQDPT_MIN_RATE: |
5079 | | /* uint16_t rate; */ |
5080 | 1 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_min_rate_rate, tvb, offset, 2, ENC_BIG_ENDIAN); |
5081 | 1 | offset+=2; |
5082 | | |
5083 | | /* uint8_t pad[6]; */ |
5084 | 1 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_min_rate_pad, tvb, offset, 6, ENC_NA); |
5085 | 1 | offset+=6; |
5086 | 1 | break; |
5087 | | |
5088 | 5 | case OFPQDPT_MAX_RATE: |
5089 | | /* uint16_t rate; */ |
5090 | 5 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_max_rate_rate, tvb, offset, 2, ENC_BIG_ENDIAN); |
5091 | 5 | offset+=2; |
5092 | | |
5093 | | /* uint8_t pad[6]; */ |
5094 | 5 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_max_rate_pad, tvb, offset, 6, ENC_NA); |
5095 | 5 | offset+=6; |
5096 | 5 | break; |
5097 | | |
5098 | 1 | case OFPQDPT_EXPERIMENTER: |
5099 | 1 | if (prop_len <= 16) { |
5100 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
5101 | 0 | offset = length; |
5102 | 0 | break; |
5103 | 0 | } |
5104 | | /* uint32_t experimenter; */ |
5105 | 1 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
5106 | 1 | offset+=4; |
5107 | | |
5108 | | /* uint32_t exp_type; */ |
5109 | 1 | proto_tree_add_item(prop_tree, hf_openflow_v5_queue_desc_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
5110 | 1 | offset+=4; |
5111 | | |
5112 | | /* uint8_t experimenter_data[0]; */ |
5113 | 1 | proto_tree_add_expert_format(prop_tree, pinfo, &ei_openflow_v5_queue_desc_prop_undecoded, |
5114 | 1 | tvb, offset, prop_len - 16, "Experimenter queue property body."); |
5115 | 1 | offset+=prop_len-16; |
5116 | 1 | break; |
5117 | | |
5118 | 14 | default: |
5119 | 14 | if (prop_len <= 8) { |
5120 | 0 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
5121 | 0 | offset = length; |
5122 | 0 | break; |
5123 | 0 | } |
5124 | 14 | proto_tree_add_expert_format(prop_tree, pinfo, &ei_openflow_v5_queue_desc_prop_undecoded, |
5125 | 14 | tvb, offset, prop_len - 8, "Unknown queue property body."); |
5126 | 14 | offset+=prop_len-8; |
5127 | 14 | break; |
5128 | 21 | } |
5129 | | |
5130 | 10 | return offset; |
5131 | 21 | } |
5132 | | |
5133 | | |
5134 | | |
5135 | | #define OFPQ_ALL 0xffffffff |
5136 | | #if 0 |
5137 | | static const value_string openflow_v5_queue_id_reserved_values[] = { |
5138 | | { OFPQ_ALL, "OFPQ_ALL" }, |
5139 | | { 0, NULL } |
5140 | | }; |
5141 | | #endif |
5142 | | |
5143 | | static int |
5144 | | dissect_openflow_queue_desc_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5145 | 81 | { |
5146 | 81 | proto_tree *desc_tree; |
5147 | 81 | uint16_t desc_len; |
5148 | 81 | int32_t desc_end; |
5149 | | |
5150 | 81 | desc_len = tvb_get_ntohs(tvb, offset + 8); |
5151 | 81 | desc_end = offset + desc_len; |
5152 | | |
5153 | 81 | desc_tree = proto_tree_add_subtree(tree, tvb, offset, desc_len, ett_openflow_v5_queue_desc, NULL, "Queue desc"); |
5154 | | |
5155 | | /* uint32_t port_no; */ |
5156 | 81 | proto_tree_add_item(tree, hf_openflow_v5_queue_desc_port_no, tvb, offset, 4, ENC_BIG_ENDIAN); |
5157 | 81 | offset+=4; |
5158 | | |
5159 | | /* uint32_t queue_id; */ |
5160 | 81 | proto_tree_add_item(desc_tree, hf_openflow_v5_queue_desc_queue_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
5161 | 81 | offset+=4; |
5162 | | |
5163 | | /* uint16_t len; */ |
5164 | 81 | proto_tree_add_item(desc_tree, hf_openflow_v5_queue_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN); |
5165 | | |
5166 | | /* uint8_t pad[6]; */ |
5167 | 81 | proto_tree_add_item(desc_tree, hf_openflow_v5_queue_desc_pad, tvb, offset, 6, ENC_NA); |
5168 | 81 | offset+=6; |
5169 | | |
5170 | | /* struct ofp_queue_desc_prop_header properties[0]; */ |
5171 | 170 | while (offset < desc_end) { |
5172 | 89 | offset = dissect_openflow_queue_desc_prop_v5(tvb, pinfo, desc_tree, offset, length); |
5173 | 89 | } |
5174 | | |
5175 | 81 | return offset; |
5176 | 81 | } |
5177 | | |
5178 | | |
5179 | 3 | #define OFPFME_INITIAL 0 |
5180 | 3 | #define OFPFME_ADDED 1 |
5181 | 6 | #define OFPFME_REMOVED 2 |
5182 | 3 | #define OFPFME_MODIFIED 3 |
5183 | 0 | #define OFPFME_ABBREV 4 |
5184 | 0 | #define OFPFME_PAUSED 5 |
5185 | 0 | #define OFPFME_RESUMED 6 |
5186 | | static const value_string openflow_v5_flow_monitor_events[] = { |
5187 | | { OFPFME_INITIAL, "OFPFME_INITIAL" }, |
5188 | | { OFPFME_ADDED, "OFPFME_ADDED" }, |
5189 | | { OFPFME_REMOVED, "OFPFME_REMOVED" }, |
5190 | | { OFPFME_MODIFIED, "OFPFME_MODIFIED" }, |
5191 | | { OFPFME_ABBREV, "OFPFME_ABBREV" }, |
5192 | | { OFPFME_PAUSED, "OFPFME_PAUSED" }, |
5193 | | { OFPFME_RESUMED, "OFPFME_RESUMED" }, |
5194 | | { 0, NULL } |
5195 | | }; |
5196 | | |
5197 | | static int |
5198 | | dissect_openflow_flow_update_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5199 | 20 | { |
5200 | 20 | proto_tree *update_tree; |
5201 | 20 | uint16_t update_len; |
5202 | 20 | uint16_t update_event; |
5203 | 20 | int32_t update_end; |
5204 | 20 | proto_item *ti; |
5205 | | |
5206 | 20 | update_len = tvb_get_ntohs(tvb, offset); |
5207 | 20 | update_end = offset + update_len; |
5208 | 20 | update_event = tvb_get_ntohs(tvb, offset + 2); |
5209 | | |
5210 | 20 | update_tree = proto_tree_add_subtree(tree, tvb, offset, update_len, ett_openflow_v5_flow_update, NULL, "Flow update"); |
5211 | | |
5212 | | /* uint16_t length; */ |
5213 | 20 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
5214 | 20 | offset+=2; |
5215 | | |
5216 | | /* uint16_t event; */ |
5217 | 20 | ti = proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_event, tvb, offset, 2, ENC_BIG_ENDIAN); |
5218 | 20 | offset+=2; |
5219 | | |
5220 | 20 | if (update_len < 4) { |
5221 | 12 | expert_add_info(pinfo, ti, &ei_openflow_v5_length_too_short); |
5222 | 12 | return offset; |
5223 | 12 | } |
5224 | | |
5225 | 8 | switch (update_event) { |
5226 | 3 | case OFPFME_INITIAL: |
5227 | 3 | case OFPFME_ADDED: |
5228 | 3 | case OFPFME_REMOVED: |
5229 | 3 | case OFPFME_MODIFIED: |
5230 | | /* uint8_t table_id; */ |
5231 | 3 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
5232 | 3 | offset+=1; |
5233 | | |
5234 | 3 | if (update_event == OFPFME_REMOVED) { |
5235 | | /* uint8_t reason; */ |
5236 | 0 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_reason, tvb, offset, 1, ENC_BIG_ENDIAN); |
5237 | 3 | } else { |
5238 | | /* uint8_t zero; */ |
5239 | 3 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_zero, tvb, offset, 1, ENC_NA); |
5240 | 3 | } |
5241 | 3 | offset+=1; |
5242 | | |
5243 | | /* uint16_t idle_timeout; */ |
5244 | 3 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_idle_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
5245 | 3 | offset+=2; |
5246 | | |
5247 | | /* uint16_t hard_timeout; */ |
5248 | 3 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_hard_timeout, tvb, offset, 2, ENC_BIG_ENDIAN); |
5249 | 3 | offset+=2; |
5250 | | |
5251 | | /* uint16_t priority; */ |
5252 | 3 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_priority, tvb, offset, 2, ENC_BIG_ENDIAN); |
5253 | 3 | offset+=2; |
5254 | | |
5255 | | /* uint8_t zeros[4]; */ |
5256 | 3 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_zeros, tvb, offset, 4, ENC_NA); |
5257 | 3 | offset+=4; |
5258 | | |
5259 | | /* uint64_t cookie; */ |
5260 | 3 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_full_cookie, tvb, offset, 8, ENC_BIG_ENDIAN); |
5261 | 3 | offset+=8; |
5262 | | |
5263 | | /* struct ofp_match match; */ |
5264 | 3 | offset = dissect_openflow_match_v5(tvb, pinfo, update_tree, offset, length); |
5265 | | |
5266 | | /* struct ofp_instruction instructions[0]; */ |
5267 | 9 | while (offset < update_end) { |
5268 | 6 | offset = dissect_openflow_instruction_v5(tvb, pinfo, update_tree, offset, length); |
5269 | 6 | } |
5270 | 3 | break; |
5271 | | |
5272 | 0 | case OFPFME_ABBREV: |
5273 | | /* uint32_t xid; */ |
5274 | 0 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_abbrev_xid, tvb, offset, 4, ENC_BIG_ENDIAN); |
5275 | 0 | offset+=4; |
5276 | 0 | break; |
5277 | | |
5278 | 0 | case OFPFME_PAUSED: |
5279 | 0 | case OFPFME_RESUMED: |
5280 | | /* uint8_t zeros[4]; */ |
5281 | 0 | proto_tree_add_item(update_tree, hf_openflow_v5_flow_update_paused_zeros, tvb, offset, 4, ENC_NA); |
5282 | 0 | offset+=4; |
5283 | 0 | break; |
5284 | | |
5285 | 5 | default: |
5286 | 5 | proto_tree_add_expert_format(update_tree, pinfo, &ei_openflow_v5_flow_update_undecoded, |
5287 | 5 | tvb, offset, update_len - 4, "Unknown flow update body."); |
5288 | 5 | offset+=update_len-4; |
5289 | 5 | break; |
5290 | 8 | } |
5291 | | |
5292 | 4 | return offset; |
5293 | 8 | } |
5294 | | |
5295 | | |
5296 | | |
5297 | 16 | #define OFPMPF_REPLY_MORE 1 << 0 |
5298 | | static void |
5299 | | dissect_openflow_multipart_reply_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length) |
5300 | 162 | { |
5301 | 162 | proto_item *ti; |
5302 | 162 | proto_tree *flags_tree; |
5303 | 162 | uint16_t type; |
5304 | | |
5305 | | /* uint16_t type; */ |
5306 | 162 | proto_tree_add_item_ret_uint16(tree, hf_openflow_v5_multipart_reply_type, tvb, offset, 2, ENC_BIG_ENDIAN, &type); |
5307 | 162 | offset+=2; |
5308 | | |
5309 | | /* uint16_t flags; */ |
5310 | 162 | ti = proto_tree_add_item(tree, hf_openflow_v5_multipart_reply_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
5311 | 162 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_multipart_reply_flags); |
5312 | | |
5313 | 162 | proto_tree_add_item(flags_tree, hf_openflow_v5_multipart_reply_flags_more, tvb, offset, 2, ENC_BIG_ENDIAN); |
5314 | 162 | offset+=2; |
5315 | | |
5316 | | /* uint8_t pad[4]; */ |
5317 | 162 | proto_tree_add_item(tree, hf_openflow_v5_multipart_reply_pad, tvb, offset, 4, ENC_NA); |
5318 | 162 | offset+=4; |
5319 | | |
5320 | 162 | switch(type){ |
5321 | 1 | case OFPMP_DESC: |
5322 | 1 | dissect_openflow_switch_description_v5(tvb, pinfo, tree, offset, length); |
5323 | 1 | break; |
5324 | 24 | case OFPMP_FLOW: |
5325 | 97 | while (offset < length) { |
5326 | 73 | offset = dissect_openflow_flow_stats_v5(tvb, pinfo, tree, offset, length); |
5327 | 73 | } |
5328 | 24 | break; |
5329 | 0 | case OFPMP_AGGREGATE: |
5330 | 0 | dissect_openflow_aggregate_stats_v5(tvb, pinfo, tree, offset, length); |
5331 | 0 | break; |
5332 | 0 | case OFPMP_TABLE: |
5333 | 0 | while (offset < length) { |
5334 | 0 | offset = dissect_openflow_table_stats_v5(tvb, pinfo, tree, offset, length); |
5335 | 0 | } |
5336 | 0 | break; |
5337 | 9 | case OFPMP_PORT_STATS: |
5338 | 31 | while (offset < length) { |
5339 | 22 | offset = dissect_openflow_port_stats_v5(tvb, pinfo, tree, offset, length); |
5340 | 22 | } |
5341 | 9 | break; |
5342 | 4 | case OFPMP_QUEUE_STATS: |
5343 | 15 | while (offset < length) { |
5344 | 11 | offset = dissect_openflow_queue_stats_v5(tvb, pinfo, tree, offset, length); |
5345 | 11 | } |
5346 | 4 | break; |
5347 | 7 | case OFPMP_GROUP: |
5348 | 28 | while (offset < length) { |
5349 | 21 | offset = dissect_openflow_group_stats_v5(tvb, pinfo, tree, offset, length); |
5350 | 21 | } |
5351 | 7 | break; |
5352 | 19 | case OFPMP_GROUP_DESC: |
5353 | 79 | while (offset < length) { |
5354 | 60 | offset = dissect_openflow_group_desc_v5(tvb, pinfo, tree, offset, length); |
5355 | 60 | } |
5356 | 19 | break; |
5357 | 0 | case OFPMP_GROUP_FEATURES: |
5358 | 0 | dissect_openflow_group_features_v5(tvb, pinfo, tree, offset, length); |
5359 | 0 | break; |
5360 | 10 | case OFPMP_METER: |
5361 | 53 | while (offset < length) { |
5362 | 43 | offset = dissect_openflow_meter_stats_v5(tvb, pinfo, tree, offset, length); |
5363 | 43 | } |
5364 | 10 | break; |
5365 | 13 | case OFPMP_METER_CONFIG: |
5366 | 124 | while (offset < length) { |
5367 | 111 | offset = dissect_openflow_meter_config_v5(tvb, pinfo, tree, offset, length); |
5368 | 111 | } |
5369 | 13 | break; |
5370 | 0 | case OFPMP_METER_FEATURES: |
5371 | 0 | dissect_openflow_meter_features_v5(tvb, pinfo, tree, offset, length); |
5372 | 0 | break; |
5373 | 43 | case OFPMP_TABLE_FEATURES: |
5374 | 112 | while (offset < length) { |
5375 | 69 | offset = dissect_openflow_table_features_v5(tvb, pinfo, tree, offset, length); |
5376 | 69 | } |
5377 | 43 | break; |
5378 | 11 | case OFPMP_PORT_DESC: |
5379 | 52 | while (offset < length) { |
5380 | 41 | offset = dissect_openflow_port_v5(tvb, pinfo, tree, offset, length); |
5381 | 41 | } |
5382 | 11 | break; |
5383 | 0 | case OFPMP_TABLE_DESC: |
5384 | 0 | while (offset < length) { |
5385 | 0 | offset = dissect_openflow_table_desc_v5(tvb, pinfo, tree, offset); |
5386 | 0 | } |
5387 | 0 | break; |
5388 | 15 | case OFPMP_QUEUE_DESC: |
5389 | 96 | while (offset < length) { |
5390 | 81 | offset = dissect_openflow_queue_desc_v5(tvb, pinfo, tree, offset, length); |
5391 | 81 | } |
5392 | 15 | break; |
5393 | 4 | case OFPMP_FLOW_MONITOR: |
5394 | 24 | while (offset < length) { |
5395 | 20 | offset = dissect_openflow_flow_update_v5(tvb, pinfo, tree, offset, length); |
5396 | 20 | } |
5397 | 4 | break; |
5398 | | |
5399 | 1 | case OFPMP_EXPERIMENTER: |
5400 | | /* uint32_t experimenter; */ |
5401 | 1 | proto_tree_add_item(tree, hf_openflow_v5_multipart_reply_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
5402 | 1 | offset+=4; |
5403 | | |
5404 | | /* uint32_t exp_type; */ |
5405 | 1 | proto_tree_add_item(tree, hf_openflow_v5_multipart_reply_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
5406 | 1 | offset+=4; |
5407 | | |
5408 | | /* uint32_t experimenter_data[0]; */ |
5409 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_multipart_reply_undecoded, |
5410 | 1 | tvb, offset, length - 16, "Experimenter multipart reply body."); |
5411 | | |
5412 | 1 | break; |
5413 | 1 | default: |
5414 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_multipart_reply_undecoded, |
5415 | 1 | tvb, offset, length - 8, "Unknown multipart reply body."); |
5416 | 1 | break; |
5417 | 162 | } |
5418 | 162 | } |
5419 | | |
5420 | | |
5421 | | #if 0 |
5422 | | static void |
5423 | | dissect_openflow_queue_get_config_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5424 | | { |
5425 | | /* uint32_t port; */ |
5426 | | proto_tree_add_item(tree, hf_openflow_v5_queue_get_config_request_port, tvb, offset, 4, ENC_BIG_ENDIAN); |
5427 | | offset+=4; |
5428 | | |
5429 | | /* uint8_t pad[4]; */ |
5430 | | proto_tree_add_item(tree, hf_openflow_v5_queue_get_config_request_pad, tvb, offset, 4, ENC_NA); |
5431 | | /*offset+=4;*/ |
5432 | | } |
5433 | | #endif |
5434 | | |
5435 | | |
5436 | | |
5437 | | static const value_string openflow_v5_controller_role_values[] = { |
5438 | | { 0, "OFPCR_ROLE_NOCHANGE" }, |
5439 | | { 1, "OFPCR_ROLE_EQUAL" }, |
5440 | | { 2, "OFPCR_ROLE_MASTER" }, |
5441 | | { 3, "OFPCR_ROLE_SLAVE" }, |
5442 | | { 0, NULL } |
5443 | | }; |
5444 | | |
5445 | | static void |
5446 | | dissect_openflow_role_request_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5447 | 0 | { |
5448 | | /* uint32_t role; */ |
5449 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_request_role, tvb, offset, 4, ENC_BIG_ENDIAN); |
5450 | 0 | offset+=4; |
5451 | | |
5452 | | /* uint8_t pad[4]; */ |
5453 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_request_pad, tvb, offset, 4, ENC_NA); |
5454 | 0 | offset+=4; |
5455 | | |
5456 | | /* uint64_t generation_id; */ |
5457 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_request_generation_id, tvb, offset, 8, ENC_BIG_ENDIAN); |
5458 | | /*offset+=8;*/ |
5459 | 0 | } |
5460 | | |
5461 | | |
5462 | | static void |
5463 | | dissect_openflow_role_reply_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5464 | 0 | { |
5465 | | /* uint32_t role; */ |
5466 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_reply_role, tvb, offset, 4, ENC_BIG_ENDIAN); |
5467 | 0 | offset+=4; |
5468 | | |
5469 | | /* uint8_t pad[4]; */ |
5470 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_reply_pad, tvb, offset, 4, ENC_NA); |
5471 | 0 | offset+=4; |
5472 | | |
5473 | | /* uint64_t generation_id; */ |
5474 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_reply_generation_id, tvb, offset, 8, ENC_BIG_ENDIAN); |
5475 | | /*offset+=8;*/ |
5476 | 0 | } |
5477 | | |
5478 | | |
5479 | | |
5480 | 52 | #define OFPACPT_PACKET_IN_SLAVE 0 |
5481 | 55 | #define OFPACPT_PACKET_IN_MASTER 1 |
5482 | 0 | #define OFPACPT_PORT_STATUS_SLAVE 2 |
5483 | 0 | #define OFPACPT_PORT_STATUS_MASTER 3 |
5484 | 0 | #define OFPACPT_FLOW_REMOVED_SLAVE 4 |
5485 | 1 | #define OFPACPT_FLOW_REMOVED_MASTER 5 |
5486 | 0 | #define OFPACPT_ROLE_STATUS_SLAVE 6 |
5487 | 0 | #define OFPACPT_ROLE_STATUS_MASTER 7 |
5488 | 0 | #define OFPACPT_TABLE_STATUS_SLAVE 8 |
5489 | 0 | #define OFPACPT_TABLE_STATUS_MASTER 9 |
5490 | 0 | #define OFPACPT_REQUESTFORWARD_SLAVE 10 |
5491 | 0 | #define OFPACPT_REQUESTFORWARD_MASTER 11 |
5492 | 0 | #define OFPACPT_EXPERIMENTER_SLAVE 0xFFFE |
5493 | 1 | #define OFPACPT_EXPERIMENTER_MASTER 0xFFFF |
5494 | | static const value_string openflow_v5_async_config_prop_type_values[] = { |
5495 | | { OFPACPT_PACKET_IN_SLAVE, "OFPACPT_PACKET_IN_SLAVE" }, |
5496 | | { OFPACPT_PACKET_IN_MASTER, "OFPACPT_PACKET_IN_MASTER" }, |
5497 | | { OFPACPT_PORT_STATUS_SLAVE, "OFPACPT_PORT_STATUS_SLAVE" }, |
5498 | | { OFPACPT_PORT_STATUS_MASTER, "OFPACPT_PORT_STATUS_MASTER" }, |
5499 | | { OFPACPT_FLOW_REMOVED_SLAVE, "OFPACPT_FLOW_REMOVED_SLAVE" }, |
5500 | | { OFPACPT_FLOW_REMOVED_MASTER, "OFPACPT_FLOW_REMOVED_MASTER" }, |
5501 | | { OFPACPT_ROLE_STATUS_SLAVE, "OFPACPT_ROLE_STATUS_SLAVE" }, |
5502 | | { OFPACPT_ROLE_STATUS_MASTER, "OFPACPT_ROLE_STATUS_MASTER" }, |
5503 | | { OFPACPT_TABLE_STATUS_SLAVE, "OFPACPT_TABLE_STATUS_SLAVE" }, |
5504 | | { OFPACPT_TABLE_STATUS_MASTER, "OFPACPT_TABLE_STATUS_MASTER" }, |
5505 | | { OFPACPT_REQUESTFORWARD_SLAVE, "OFPACPT_REQUESTFORWARD_SLAVE" }, |
5506 | | { OFPACPT_REQUESTFORWARD_MASTER, "OFPACPT_REQUESTFORWARD_MASTER" }, |
5507 | | { OFPACPT_EXPERIMENTER_SLAVE, "OFPACPT_EXPERIMENTER_SLAVE" }, |
5508 | | { OFPACPT_EXPERIMENTER_MASTER, "OFPACPT_EXPERIMENTER_MASTER" }, |
5509 | | { 0, NULL } |
5510 | | }; |
5511 | | |
5512 | 16 | #define OFPRFR_GROUP_MOD 0 |
5513 | 16 | #define OFPRFR_METER_MOD 1 |
5514 | | static int |
5515 | | dissect_openflow_async_config_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5516 | 84 | { |
5517 | 84 | proto_item *ti; |
5518 | 84 | proto_item *prop_item; |
5519 | 84 | proto_tree *prop_tree, *pi_tree, *ps_tree, *fr_tree, *rs_tree, *ts_tree, *rf_tree; |
5520 | 84 | uint16_t prop_type; |
5521 | 84 | uint16_t prop_len; |
5522 | | |
5523 | 84 | prop_type = tvb_get_ntohs(tvb, offset); |
5524 | 84 | prop_len = tvb_get_ntohs(tvb, offset + 2); |
5525 | | |
5526 | 84 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, prop_len, ett_openflow_v5_async_config_prop, NULL, "Async config prop"); |
5527 | | |
5528 | | /* uint16_t type; */ |
5529 | 84 | proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
5530 | 84 | offset += 2; |
5531 | | |
5532 | | /* uint16_t length; */ |
5533 | 84 | prop_item = proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
5534 | 84 | offset += 2; |
5535 | | |
5536 | 84 | switch (prop_type) { |
5537 | 52 | case OFPACPT_PACKET_IN_SLAVE: |
5538 | 55 | case OFPACPT_PACKET_IN_MASTER: |
5539 | | /* uint32_t mask; */ |
5540 | 55 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_reason_packet_in_mask, tvb, offset, 4, ENC_BIG_ENDIAN); |
5541 | 55 | pi_tree = proto_item_add_subtree(ti, ett_openflow_v5_async_config_prop_reason_packet_in_mask); |
5542 | | |
5543 | 55 | proto_tree_add_item(pi_tree, hf_openflow_v5_async_config_prop_reason_packet_in_mask_table_miss, tvb, offset, 4, ENC_BIG_ENDIAN); |
5544 | 55 | proto_tree_add_item(pi_tree, hf_openflow_v5_async_config_prop_reason_packet_in_mask_apply_action, tvb, offset, 4, ENC_BIG_ENDIAN); |
5545 | 55 | proto_tree_add_item(pi_tree, hf_openflow_v5_async_config_prop_reason_packet_in_mask_invalid_ttl, tvb, offset, 4, ENC_BIG_ENDIAN); |
5546 | 55 | proto_tree_add_item(pi_tree, hf_openflow_v5_async_config_prop_reason_packet_in_mask_action_set, tvb, offset, 4, ENC_BIG_ENDIAN); |
5547 | 55 | proto_tree_add_item(pi_tree, hf_openflow_v5_async_config_prop_reason_packet_in_mask_group, tvb, offset, 4, ENC_BIG_ENDIAN); |
5548 | 55 | proto_tree_add_item(pi_tree, hf_openflow_v5_async_config_prop_reason_packet_in_mask_packet_out, tvb, offset, 4, ENC_BIG_ENDIAN); |
5549 | 55 | offset+=4; |
5550 | 55 | break; |
5551 | | |
5552 | 0 | case OFPACPT_PORT_STATUS_SLAVE: |
5553 | 0 | case OFPACPT_PORT_STATUS_MASTER: |
5554 | | /* uint32_t mask; */ |
5555 | 0 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_reason_port_status_mask, tvb, offset, 4, ENC_BIG_ENDIAN); |
5556 | 0 | ps_tree = proto_item_add_subtree(ti, ett_openflow_v5_async_config_prop_reason_port_status_mask); |
5557 | |
|
5558 | 0 | proto_tree_add_item(ps_tree, hf_openflow_v5_async_config_prop_reason_port_status_mask_add, tvb, offset, 4, ENC_BIG_ENDIAN); |
5559 | 0 | proto_tree_add_item(ps_tree, hf_openflow_v5_async_config_prop_reason_port_status_mask_delete, tvb, offset, 4, ENC_BIG_ENDIAN); |
5560 | 0 | proto_tree_add_item(ps_tree, hf_openflow_v5_async_config_prop_reason_port_status_mask_modify, tvb, offset, 4, ENC_BIG_ENDIAN); |
5561 | 0 | offset+=4; |
5562 | 0 | break; |
5563 | | |
5564 | 0 | case OFPACPT_FLOW_REMOVED_SLAVE: |
5565 | 1 | case OFPACPT_FLOW_REMOVED_MASTER: |
5566 | | /* uint32_t mask; */ |
5567 | 1 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_reason_flow_removed_mask, tvb, offset, 4, ENC_BIG_ENDIAN); |
5568 | 1 | fr_tree = proto_item_add_subtree(ti, ett_openflow_v5_async_config_prop_reason_flow_removed_mask); |
5569 | | |
5570 | 1 | proto_tree_add_item(fr_tree, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_idle_timeout, tvb, offset, 4, ENC_BIG_ENDIAN); |
5571 | 1 | proto_tree_add_item(fr_tree, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_hard_timeout, tvb, offset, 4, ENC_BIG_ENDIAN); |
5572 | 1 | proto_tree_add_item(fr_tree, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_delete, tvb, offset, 4, ENC_BIG_ENDIAN); |
5573 | 1 | proto_tree_add_item(fr_tree, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_group_delete, tvb, offset, 4, ENC_BIG_ENDIAN); |
5574 | 1 | proto_tree_add_item(fr_tree, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_meter_delete, tvb, offset, 4, ENC_BIG_ENDIAN); |
5575 | 1 | proto_tree_add_item(fr_tree, hf_openflow_v5_async_config_prop_reason_flow_removed_mask_eviction, tvb, offset, 4, ENC_BIG_ENDIAN); |
5576 | 1 | offset+=4; |
5577 | 1 | break; |
5578 | | |
5579 | 0 | case OFPACPT_ROLE_STATUS_SLAVE: |
5580 | 0 | case OFPACPT_ROLE_STATUS_MASTER: |
5581 | | /* uint32_t mask; */ |
5582 | 0 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_reason_role_status_mask, tvb, offset, 4, ENC_BIG_ENDIAN); |
5583 | 0 | rs_tree = proto_item_add_subtree(ti, ett_openflow_v5_async_config_prop_reason_role_status_mask); |
5584 | |
|
5585 | 0 | proto_tree_add_item(rs_tree, hf_openflow_v5_async_config_prop_reason_role_status_mask_master_request, tvb, offset, 4, ENC_BIG_ENDIAN); |
5586 | 0 | proto_tree_add_item(rs_tree, hf_openflow_v5_async_config_prop_reason_role_status_mask_config, tvb, offset, 4, ENC_BIG_ENDIAN); |
5587 | 0 | proto_tree_add_item(rs_tree, hf_openflow_v5_async_config_prop_reason_role_status_mask_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
5588 | 0 | offset+=4; |
5589 | 0 | break; |
5590 | | |
5591 | 0 | case OFPACPT_TABLE_STATUS_SLAVE: |
5592 | 0 | case OFPACPT_TABLE_STATUS_MASTER: |
5593 | | /* uint32_t mask; */ |
5594 | 0 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_reason_table_status_mask, tvb, offset, 4, ENC_BIG_ENDIAN); |
5595 | 0 | ts_tree = proto_item_add_subtree(ti, ett_openflow_v5_async_config_prop_reason_table_status_mask); |
5596 | |
|
5597 | 0 | proto_tree_add_item(ts_tree, hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_down, tvb, offset, 4, ENC_BIG_ENDIAN); |
5598 | 0 | proto_tree_add_item(ts_tree, hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_up, tvb, offset, 4, ENC_BIG_ENDIAN); |
5599 | 0 | offset+=4; |
5600 | 0 | break; |
5601 | | |
5602 | 0 | case OFPACPT_REQUESTFORWARD_SLAVE: |
5603 | 0 | case OFPACPT_REQUESTFORWARD_MASTER: |
5604 | | /* uint32_t mask; */ |
5605 | 0 | ti = proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_reason_requestforward_mask, tvb, offset, 4, ENC_BIG_ENDIAN); |
5606 | 0 | rf_tree = proto_item_add_subtree(ti, ett_openflow_v5_async_config_prop_reason_requestforward_mask); |
5607 | |
|
5608 | 0 | proto_tree_add_item(rf_tree, hf_openflow_v5_async_config_prop_reason_requestforward_mask_group_mod, tvb, offset, 4, ENC_BIG_ENDIAN); |
5609 | 0 | proto_tree_add_item(rf_tree, hf_openflow_v5_async_config_prop_reason_requestforward_mask_meter_mod, tvb, offset, 4, ENC_BIG_ENDIAN); |
5610 | 0 | offset+=4; |
5611 | 0 | break; |
5612 | | |
5613 | 0 | case OFPACPT_EXPERIMENTER_SLAVE: |
5614 | 1 | case OFPACPT_EXPERIMENTER_MASTER: |
5615 | 1 | if (prop_len <= 12) { |
5616 | 0 | expert_add_info(pinfo, prop_item, &ei_openflow_v5_length_too_short); |
5617 | 0 | offset = length; |
5618 | 0 | break; |
5619 | 0 | } |
5620 | | /* uint32_t experimenter; */ |
5621 | 1 | proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
5622 | 1 | offset+=4; |
5623 | | |
5624 | | /* uint32_t exp_type; */ |
5625 | 1 | proto_tree_add_item(prop_tree, hf_openflow_v5_async_config_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
5626 | 1 | offset+=4; |
5627 | | |
5628 | | /* uint32_t experimenter_data[0]; */ |
5629 | 1 | proto_tree_add_expert_format(prop_tree, pinfo, &ei_openflow_v5_async_config_prop_undecoded, |
5630 | 1 | tvb, offset, prop_len - 12, "Experimenter async config prop body."); |
5631 | 1 | offset += prop_len - 12; |
5632 | 1 | break; |
5633 | | |
5634 | 27 | default: |
5635 | 27 | if (prop_len <= 4) { |
5636 | 1 | expert_add_info(pinfo, prop_item, &ei_openflow_v5_length_too_short); |
5637 | 1 | offset = length; |
5638 | 1 | break; |
5639 | 1 | } |
5640 | 26 | proto_tree_add_expert_format(prop_tree, pinfo, &ei_openflow_v5_async_config_prop_undecoded, |
5641 | 26 | tvb, offset, prop_len - 4, "Unknown async config prop body."); |
5642 | 26 | offset += prop_len - 4; |
5643 | 26 | break; |
5644 | 84 | } |
5645 | | |
5646 | 74 | return offset; |
5647 | 84 | } |
5648 | | |
5649 | | |
5650 | | static void |
5651 | | dissect_openflow_async_config_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5652 | 11 | { |
5653 | | /* struct ofp_async_config_prop_header properties[0]; */ |
5654 | 95 | while (offset < length) { |
5655 | 84 | offset = dissect_openflow_async_config_prop_v5(tvb, pinfo, tree, offset, length); |
5656 | 84 | } |
5657 | 11 | } |
5658 | | |
5659 | | |
5660 | | |
5661 | | static const value_string openflow_v5_metermod_command_values[] = { |
5662 | | { 0, "OFPMC_ADD" }, |
5663 | | { 1, "OFPMC_MODIFY" }, |
5664 | | { 2, "OFPMC_DELETE" }, |
5665 | | { 0, NULL } |
5666 | | }; |
5667 | | |
5668 | | static void |
5669 | | dissect_openflow_metermod_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5670 | 0 | { |
5671 | 0 | proto_item *ti; |
5672 | 0 | proto_tree *flags_tree; |
5673 | | |
5674 | | /* uint16_t command; */ |
5675 | 0 | proto_tree_add_item(tree, hf_openflow_v5_metermod_command, tvb, offset, 2, ENC_BIG_ENDIAN); |
5676 | 0 | offset+=2; |
5677 | | |
5678 | | /* uint16_t flags; */ |
5679 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_metermod_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
5680 | 0 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_metermod_flags); |
5681 | |
|
5682 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_metermod_flags_kbps, tvb, offset, 2, ENC_BIG_ENDIAN); |
5683 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_metermod_flags_pktps, tvb, offset, 2, ENC_BIG_ENDIAN); |
5684 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_metermod_flags_burst, tvb, offset, 2, ENC_BIG_ENDIAN); |
5685 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_metermod_flags_stats, tvb, offset, 2, ENC_BIG_ENDIAN); |
5686 | 0 | offset+=2; |
5687 | | |
5688 | | /* uint32_t meter_id; */ |
5689 | 0 | proto_tree_add_item(tree, hf_openflow_v5_metermod_meter_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
5690 | 0 | offset+=4; |
5691 | | |
5692 | | /* struct ofp_meter_band_header bands[0]; */ |
5693 | 0 | while (offset < length) { |
5694 | 0 | offset = dissect_openflow_meter_band_v5(tvb, pinfo, tree, offset, length); |
5695 | 0 | } |
5696 | 0 | } |
5697 | | |
5698 | 16 | #define OFPCRR_MASTER_REQUEST 0 |
5699 | 16 | #define OFPCRR_CONFIG 1 |
5700 | 16 | #define OFPCRR_EXPERIMENTER 2 |
5701 | | static const value_string openflow_v5_role_status_reason_values[] = { |
5702 | | { OFPCRR_MASTER_REQUEST, "OFPCRR_MASTER_REQUEST" }, |
5703 | | { OFPCRR_CONFIG, "OFPCRR_CONFIG" }, |
5704 | | { OFPCRR_EXPERIMENTER, "OFPCRR_EXPERIMENTER" }, |
5705 | | { 0, NULL } |
5706 | | }; |
5707 | | |
5708 | | static void |
5709 | | dissect_openflow_role_status_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5710 | 0 | { |
5711 | | /* uint32_t role; */ |
5712 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_status_role, tvb, offset, 4, ENC_BIG_ENDIAN); |
5713 | 0 | offset+=4; |
5714 | | |
5715 | | /* uint8_t reason; */ |
5716 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_status_reason, tvb, offset, 1, ENC_BIG_ENDIAN); |
5717 | 0 | offset+=1; |
5718 | | |
5719 | | /* uint8_t pad[3]; */ |
5720 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_status_pad, tvb, offset, 3, ENC_NA); |
5721 | 0 | offset+=3; |
5722 | | |
5723 | | /* uint64_t generation_id; */ |
5724 | 0 | proto_tree_add_item(tree, hf_openflow_v5_role_status_generation_id, tvb, offset, 8, ENC_BIG_ENDIAN); |
5725 | | /*offset+=8;*/ |
5726 | 0 | } |
5727 | | |
5728 | | |
5729 | | |
5730 | 16 | #define OFPTR_VACANCY_DOWN 3 |
5731 | 16 | #define OFPTR_VACANCY_UP 4 |
5732 | | static const value_string openflow_v5_table_status_reason_values[] = { |
5733 | | { OFPTR_VACANCY_DOWN, "OFPTR_VACANCY_DOWN" }, |
5734 | | { OFPTR_VACANCY_UP, "OFPTR_VACANCY_UP" }, |
5735 | | { 0, NULL } |
5736 | | }; |
5737 | | |
5738 | | static void |
5739 | | dissect_openflow_table_status_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5740 | 0 | { |
5741 | | /* uint8_t reason; */ |
5742 | 0 | proto_tree_add_item(tree, hf_openflow_v5_table_status_reason, tvb, offset, 1, ENC_BIG_ENDIAN); |
5743 | 0 | offset+=1; |
5744 | | |
5745 | | /* uint8_t pad[7]; */ |
5746 | 0 | proto_tree_add_item(tree, hf_openflow_v5_table_status_pad, tvb, offset, 7, ENC_NA); |
5747 | 0 | offset+=1; |
5748 | | |
5749 | | /* struct ofp_table_desc table; */ |
5750 | 0 | dissect_openflow_table_desc_v5(tvb, pinfo, tree, offset); |
5751 | 0 | } |
5752 | | |
5753 | | static void |
5754 | | // NOLINTNEXTLINE(misc-no-recursion) |
5755 | | dissect_openflow_requestforward_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5756 | 0 | { |
5757 | 0 | proto_item *ti; |
5758 | 0 | proto_tree *req_tree; |
5759 | 0 | uint16_t req_begin; |
5760 | | |
5761 | | /* struct ofp_header request; */ |
5762 | 0 | req_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_requestforward_request, &ti, "Request"); |
5763 | |
|
5764 | 0 | req_begin = offset; |
5765 | 0 | offset = dissect_openflow_message_v5(tvb, pinfo, req_tree, offset); |
5766 | |
|
5767 | 0 | proto_item_set_len(ti, offset - req_begin); |
5768 | 0 | } |
5769 | | |
5770 | | |
5771 | 0 | #define OFPBPT_EXPERIMENTER 0xFFFF |
5772 | | static const value_string openflow_v5_bundle_prop_type_values[] = { |
5773 | | { OFPBPT_EXPERIMENTER, "OFPBPT_EXPERIMENTER" }, |
5774 | | { 0, NULL } |
5775 | | }; |
5776 | | |
5777 | | static int |
5778 | | dissect_openflow_bundle_prop_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5779 | 0 | { |
5780 | 0 | proto_tree *prop_tree; |
5781 | 0 | proto_item *prop_item; |
5782 | 0 | uint16_t prop_type; |
5783 | 0 | uint16_t prop_len; |
5784 | |
|
5785 | 0 | prop_type = tvb_get_ntohs(tvb, offset); |
5786 | 0 | prop_len = tvb_get_ntohs(tvb, offset + 2); |
5787 | |
|
5788 | 0 | prop_tree = proto_tree_add_subtree(tree, tvb, offset, prop_len, ett_openflow_v5_bundle_prop, NULL, "Bundle prop"); |
5789 | | |
5790 | | /* uint16_t type; */ |
5791 | 0 | proto_tree_add_item(prop_tree, hf_openflow_v5_bundle_prop_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
5792 | | |
5793 | | /* uint16_t length; */ |
5794 | 0 | prop_item = proto_tree_add_item(prop_tree, hf_openflow_v5_bundle_prop_length, tvb, offset, 2, ENC_BIG_ENDIAN); |
5795 | |
|
5796 | 0 | switch (prop_type) { |
5797 | 0 | case OFPBPT_EXPERIMENTER: |
5798 | 0 | if (prop_len <= 12) { |
5799 | 0 | expert_add_info(pinfo, prop_item, &ei_openflow_v5_length_too_short); |
5800 | 0 | offset = length; |
5801 | 0 | break; |
5802 | 0 | } |
5803 | | /* uint32_t experimenter; */ |
5804 | 0 | proto_tree_add_item(tree, hf_openflow_v5_bundle_prop_experimenter_experimenter, tvb, offset, 4, ENC_BIG_ENDIAN); |
5805 | 0 | offset+=4; |
5806 | | |
5807 | | /* uint32_t exp_type; */ |
5808 | 0 | proto_tree_add_item(tree, hf_openflow_v5_bundle_prop_experimenter_exp_type, tvb, offset, 4, ENC_BIG_ENDIAN); |
5809 | 0 | offset+=4; |
5810 | | |
5811 | | /* uint32_t experimenter_data[0]; */ |
5812 | 0 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_bundle_prop_undecoded, |
5813 | 0 | tvb, offset, prop_len - 12, "Experimenter bundle prop body."); |
5814 | 0 | offset += prop_len - 12; |
5815 | 0 | break; |
5816 | | |
5817 | 0 | default: |
5818 | 0 | if (prop_len <= 4) { |
5819 | 0 | expert_add_info(pinfo, prop_item, &ei_openflow_v5_length_too_short); |
5820 | 0 | offset = length; |
5821 | 0 | break; |
5822 | 0 | } |
5823 | 0 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_bundle_prop_undecoded, |
5824 | 0 | tvb, offset, prop_len - 4, "Unknown bundle prop body."); |
5825 | 0 | offset += prop_len - 4; |
5826 | 0 | break; |
5827 | 0 | } |
5828 | | |
5829 | 0 | return offset; |
5830 | 0 | } |
5831 | | |
5832 | | |
5833 | | |
5834 | | static const value_string openflow_v5_bundle_control_type_values[] = { |
5835 | | { 0, "OFPBCT_OPEN_REQUEST" }, |
5836 | | { 1, "OFPBCT_OPEN_REPLY" }, |
5837 | | { 2, "OFPBCT_CLOSE_REQUEST" }, |
5838 | | { 3, "OFPBCT_CLOSE_REPLY" }, |
5839 | | { 4, "OFPBCT_COMMIT_REQUEST" }, |
5840 | | { 5, "OFPBCT_COMMIT_REPLY" }, |
5841 | | { 6, "OFPBCT_DISCARD_REQUEST" }, |
5842 | | { 7, "OFPBCT_DISCARD_REPLY" }, |
5843 | | { 0, NULL } |
5844 | | }; |
5845 | | |
5846 | | |
5847 | 32 | #define OFPBF_ATOMIC 1<<0 |
5848 | 32 | #define OFPBF_ORDERED 1<<1 |
5849 | | #if 0 |
5850 | | static const value_string openflow_v5_bundle_control_flags[] = { |
5851 | | { OFPBF_ATOMIC, "OFPBF_ATOMIC" }, |
5852 | | { OFPBF_ORDERED, "OFPBF_ORDERED" }, |
5853 | | { 0, NULL } |
5854 | | }; |
5855 | | #endif |
5856 | | |
5857 | | static void |
5858 | | dissect_openflow_bundle_control_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5859 | 0 | { |
5860 | 0 | proto_item *ti; |
5861 | 0 | proto_tree *flags_tree; |
5862 | | |
5863 | | /* uint32_t bundle_id; */ |
5864 | 0 | proto_tree_add_item(tree, hf_openflow_v5_bundle_control_bundle_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
5865 | 0 | offset+=4; |
5866 | | |
5867 | | /* uint16_t type; */ |
5868 | 0 | proto_tree_add_item(tree, hf_openflow_v5_bundle_control_type, tvb, offset, 2, ENC_BIG_ENDIAN); |
5869 | 0 | offset+=2; |
5870 | | |
5871 | | /* uint16_t flags; */ |
5872 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_bundle_control_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
5873 | 0 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_bundle_control_flags); |
5874 | |
|
5875 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_bundle_control_flags_atomic, tvb, offset, 2, ENC_BIG_ENDIAN); |
5876 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_bundle_control_flags_ordered, tvb, offset, 2, ENC_BIG_ENDIAN); |
5877 | 0 | offset+=2; |
5878 | | |
5879 | | /* struct ofp_bundle_prop_header properties[0]; */ |
5880 | 0 | while (offset < length) { |
5881 | 0 | offset = dissect_openflow_bundle_prop_v5(tvb, pinfo, tree, offset, length); |
5882 | 0 | } |
5883 | 0 | } |
5884 | | |
5885 | | |
5886 | | |
5887 | | static void |
5888 | | // NOLINTNEXTLINE(misc-no-recursion) |
5889 | | dissect_openflow_bundle_add_v5(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, uint16_t length _U_) |
5890 | 0 | { |
5891 | 0 | proto_item *ti; |
5892 | 0 | proto_tree *flags_tree, *msg_tree; |
5893 | 0 | uint16_t msg_begin; |
5894 | | |
5895 | | /* uint32_t bundle_id; */ |
5896 | 0 | proto_tree_add_item(tree, hf_openflow_v5_bundle_add_bundle_id, tvb, offset, 4, ENC_BIG_ENDIAN); |
5897 | 0 | offset+=4; |
5898 | | |
5899 | | /* uint16_t pad; */ |
5900 | 0 | proto_tree_add_item(tree, hf_openflow_v5_bundle_add_pad, tvb, offset, 2, ENC_NA); |
5901 | 0 | offset+=2; |
5902 | | |
5903 | | /* uint16_t flags; */ |
5904 | 0 | ti = proto_tree_add_item(tree, hf_openflow_v5_bundle_add_flags, tvb, offset, 2, ENC_BIG_ENDIAN); |
5905 | 0 | flags_tree = proto_item_add_subtree(ti, ett_openflow_v5_bundle_add_flags); |
5906 | |
|
5907 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_bundle_add_flags_atomic, tvb, offset, 2, ENC_BIG_ENDIAN); |
5908 | 0 | proto_tree_add_item(flags_tree, hf_openflow_v5_bundle_add_flags_ordered, tvb, offset, 2, ENC_BIG_ENDIAN); |
5909 | 0 | offset+=2; |
5910 | | |
5911 | | /* struct ofp_header message; */ |
5912 | 0 | msg_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_openflow_v5_bundle_add_message, &ti, "Message"); |
5913 | |
|
5914 | 0 | msg_begin = offset; |
5915 | 0 | offset = dissect_openflow_message_v5(tvb, pinfo, msg_tree, offset); |
5916 | 0 | proto_item_set_len(ti, offset - msg_begin); |
5917 | | |
5918 | | /* struct ofp_bundle_prop_header properties[0]; */ |
5919 | 0 | while (offset < length) { |
5920 | 0 | offset = dissect_openflow_bundle_prop_v5(tvb, pinfo, tree, offset, length); |
5921 | 0 | } |
5922 | 0 | } |
5923 | | |
5924 | | |
5925 | | |
5926 | | static int |
5927 | | // NOLINTNEXTLINE(misc-no-recursion) |
5928 | | dissect_openflow_message_v5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset) |
5929 | 204 | { |
5930 | 204 | uint8_t type; |
5931 | 204 | uint16_t length; |
5932 | 204 | int32_t msg_end; |
5933 | | |
5934 | 204 | type = tvb_get_uint8(tvb, offset + 1); |
5935 | 204 | length = tvb_get_ntohs(tvb, offset + 2); |
5936 | 204 | msg_end = offset + length; |
5937 | | |
5938 | 204 | offset = dissect_openflow_header_v5(tvb, pinfo, tree, offset, length); |
5939 | | |
5940 | 204 | switch(type) { |
5941 | 6 | case OFPT_HELLO: |
5942 | 6 | dissect_openflow_hello_v5(tvb, pinfo, tree, offset, length); |
5943 | 6 | break; |
5944 | 1 | case OFPT_ERROR: |
5945 | 1 | dissect_openflow_error_v5(tvb, pinfo, tree, offset, length); |
5946 | 1 | break; |
5947 | 0 | case OFPT_ECHO_REQUEST: |
5948 | 0 | case OFPT_ECHO_REPLY: |
5949 | 0 | dissect_openflow_echo_v5(tvb, pinfo, tree, offset, length); |
5950 | 0 | break; |
5951 | 1 | case OFPT_EXPERIMENTER: |
5952 | 1 | dissect_openflow_experimenter_v5(tvb, pinfo, tree, offset, length); |
5953 | 1 | break; |
5954 | 1 | case OFPT_FEATURES_REQUEST: |
5955 | | /* message has no body */ |
5956 | 1 | break; |
5957 | 1 | case OFPT_FEATURES_REPLY: |
5958 | 1 | dissect_openflow_switch_features_v5(tvb, pinfo, tree, offset, length); |
5959 | 1 | break; |
5960 | 1 | case OFPT_GET_CONFIG_REQUEST: |
5961 | | /* message has no body */ |
5962 | 1 | break; |
5963 | 1 | case OFPT_GET_CONFIG_REPLY: |
5964 | 1 | case OFPT_SET_CONFIG: |
5965 | 1 | dissect_openflow_switch_config_v5(tvb, pinfo, tree, offset, length); |
5966 | 1 | break; |
5967 | 0 | case OFPT_PACKET_IN: |
5968 | 0 | dissect_openflow_packet_in_v5(tvb, pinfo, tree, offset, length); |
5969 | 0 | break; |
5970 | 0 | case OFPT_FLOW_REMOVED: |
5971 | 0 | dissect_openflow_flow_removed_v5(tvb, pinfo, tree, offset, length); |
5972 | 0 | break; |
5973 | 0 | case OFPT_PORT_STATUS: |
5974 | 0 | dissect_openflow_port_status_v5(tvb, pinfo, tree, offset, length); |
5975 | 0 | break; |
5976 | 0 | case OFPT_PACKET_OUT: |
5977 | 0 | dissect_openflow_packet_out_v5(tvb, pinfo, tree, offset, length); |
5978 | 0 | break; |
5979 | 2 | case OFPT_FLOW_MOD: |
5980 | 2 | dissect_openflow_flowmod_v5(tvb, pinfo, tree, offset, length); |
5981 | 2 | break; |
5982 | 0 | case OFPT_GROUP_MOD: |
5983 | 0 | dissect_openflow_groupmod_v5(tvb, pinfo, tree, offset, length); |
5984 | 0 | break; |
5985 | 7 | case OFPT_PORT_MOD: |
5986 | 7 | dissect_openflow_portmod_v5(tvb, pinfo, tree, offset, length); |
5987 | 7 | break; |
5988 | 0 | case OFPT_TABLE_MOD: |
5989 | 0 | dissect_openflow_tablemod_v5(tvb, pinfo, tree, offset, length); |
5990 | 0 | break; |
5991 | 9 | case OFPT_MULTIPART_REQUEST: |
5992 | 9 | dissect_openflow_multipart_request_v5(tvb, pinfo, tree, offset, length); |
5993 | 9 | break; |
5994 | 162 | case OFPT_MULTIPART_REPLY: |
5995 | 162 | dissect_openflow_multipart_reply_v5(tvb, pinfo, tree, offset, length); |
5996 | 162 | break; |
5997 | 0 | case OFPT_BARRIER_REQUEST: |
5998 | 0 | case OFPT_BARRIER_REPLY: |
5999 | | /* message has no body */ |
6000 | 0 | break; |
6001 | 0 | case OFPT_ROLE_REQUEST: |
6002 | 0 | dissect_openflow_role_request_v5(tvb, pinfo, tree, offset, length); |
6003 | 0 | break; |
6004 | 0 | case OFPT_ROLE_REPLY: |
6005 | 0 | dissect_openflow_role_reply_v5(tvb, pinfo, tree, offset, length); |
6006 | 0 | break; |
6007 | 0 | case OFPT_GET_ASYNC_REQUEST: |
6008 | | /* message has no body */ |
6009 | 0 | break; |
6010 | 11 | case OFPT_GET_ASYNC_REPLY: |
6011 | 11 | case OFPT_SET_ASYNC: |
6012 | 11 | dissect_openflow_async_config_v5(tvb, pinfo, tree, offset, length); |
6013 | 11 | break; |
6014 | 0 | case OFPT_METER_MOD: |
6015 | 0 | dissect_openflow_metermod_v5(tvb, pinfo, tree, offset, length); |
6016 | 0 | break; |
6017 | 0 | case OFPT_ROLE_STATUS: |
6018 | 0 | dissect_openflow_role_status_v5(tvb, pinfo, tree, offset, length); |
6019 | 0 | break; |
6020 | 0 | case OFPT_TABLE_STATUS: |
6021 | 0 | dissect_openflow_table_status_v5(tvb, pinfo, tree, offset, length); |
6022 | 0 | break; |
6023 | 0 | case OFPT_REQUESTFORWARD: |
6024 | 0 | dissect_openflow_requestforward_v5(tvb, pinfo, tree, offset, length); |
6025 | 0 | break; |
6026 | 0 | case OFPT_BUNDLE_CONTROL: |
6027 | 0 | dissect_openflow_bundle_control_v5(tvb, pinfo, tree, offset, length); |
6028 | 0 | break; |
6029 | 0 | case OFPT_BUNDLE_ADD_MESSAGE: |
6030 | 0 | dissect_openflow_bundle_add_v5(tvb, pinfo, tree, offset, length); |
6031 | 0 | break; |
6032 | | |
6033 | 1 | default: |
6034 | 1 | if (length > 8) { |
6035 | 1 | proto_tree_add_expert_format(tree, pinfo, &ei_openflow_v5_message_undecoded, |
6036 | 1 | tvb, offset, length - 8, "Unknown message body."); |
6037 | 1 | } |
6038 | 1 | break; |
6039 | 204 | } |
6040 | | |
6041 | 14 | return msg_end; |
6042 | 204 | } |
6043 | | |
6044 | | |
6045 | | |
6046 | | static int |
6047 | | dissect_openflow_v5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) |
6048 | 204 | { |
6049 | 204 | proto_item *ti; |
6050 | 204 | proto_tree *openflow_tree; |
6051 | 204 | uint8_t type; |
6052 | | |
6053 | 204 | type = tvb_get_uint8(tvb, 1); |
6054 | | |
6055 | 204 | col_append_fstr(pinfo->cinfo, COL_INFO, "Type: %s", |
6056 | 204 | val_to_str_ext_const(type, &openflow_v5_type_values_ext, "Unknown message type")); |
6057 | | |
6058 | 204 | ti = proto_tree_add_item(tree, proto_openflow_v5, tvb, 0, -1, ENC_NA); |
6059 | 204 | openflow_tree = proto_item_add_subtree(ti, ett_openflow_v5); |
6060 | | |
6061 | 204 | dissect_openflow_message_v5(tvb, pinfo, openflow_tree, 0); |
6062 | | |
6063 | 204 | return tvb_reported_length(tvb); |
6064 | 204 | } |
6065 | | |
6066 | | |
6067 | | |
6068 | | /* |
6069 | | * Register the protocol with Wireshark. |
6070 | | */ |
6071 | | void |
6072 | | proto_register_openflow_v5(void) |
6073 | 16 | { |
6074 | 16 | static hf_register_info hf[] = { |
6075 | 16 | { &hf_openflow_v5_version, |
6076 | 16 | { "Version", "openflow_v5.version", |
6077 | 16 | FT_UINT8, BASE_HEX, VALS(openflow_v5_version_values), 0x0, |
6078 | 16 | NULL, HFILL } |
6079 | 16 | }, |
6080 | 16 | { &hf_openflow_v5_type, |
6081 | 16 | { "Type", "openflow_v5.type", |
6082 | 16 | FT_UINT8, BASE_DEC | BASE_EXT_STRING, &openflow_v5_type_values_ext, 0x0, |
6083 | 16 | NULL, HFILL } |
6084 | 16 | }, |
6085 | 16 | { &hf_openflow_v5_xid, |
6086 | 16 | { "Transaction ID", "openflow_v5.xid", |
6087 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6088 | 16 | NULL, HFILL } |
6089 | 16 | }, |
6090 | 16 | { &hf_openflow_v5_length, |
6091 | 16 | { "Length", "openflow_v5.length", |
6092 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6093 | 16 | NULL, HFILL } |
6094 | 16 | }, |
6095 | 16 | { &hf_openflow_v5_oxm_class, |
6096 | 16 | { "Class", "openflow_v5.oxm.class", |
6097 | 16 | FT_UINT16, BASE_HEX, VALS(openflow_v5_oxm_class_values), 0x0, |
6098 | 16 | NULL, HFILL } |
6099 | 16 | }, |
6100 | 16 | { &hf_openflow_v5_oxm_field, |
6101 | 16 | { "Field", "openflow_v5.oxm.field", |
6102 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
6103 | 16 | NULL, HFILL } |
6104 | 16 | }, |
6105 | 16 | { &hf_openflow_v5_oxm_field_basic, |
6106 | 16 | { "Field", "openflow_v5.oxm.field", |
6107 | 16 | FT_UINT8, BASE_DEC | BASE_EXT_STRING, &openflow_v5_oxm_basic_field_values_ext, 0x0, |
6108 | 16 | NULL, HFILL } |
6109 | 16 | }, |
6110 | 16 | { &hf_openflow_v5_oxm_hm, |
6111 | 16 | { "Has mask", "openflow_v5.oxm.hm", |
6112 | 16 | FT_BOOLEAN, BASE_NONE, NULL, 0x0, |
6113 | 16 | NULL, HFILL } |
6114 | 16 | }, |
6115 | 16 | { &hf_openflow_v5_oxm_length, |
6116 | 16 | { "Length", "openflow_v5.oxm.length", |
6117 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
6118 | 16 | NULL, HFILL } |
6119 | 16 | }, |
6120 | 16 | { &hf_openflow_v5_oxm_experimenter_experimenter, |
6121 | 16 | { "Experimenter", "openflow_v5.oxm_experimenter.experimenter", |
6122 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6123 | 16 | NULL, HFILL } |
6124 | 16 | }, |
6125 | 16 | { &hf_openflow_v5_oxm_experimenter_value, |
6126 | 16 | { "Experimenter Value", "openflow_v5.oxm_experimenter.value", |
6127 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6128 | 16 | NULL, HFILL } |
6129 | 16 | }, |
6130 | 16 | { &hf_openflow_v5_oxm_value, |
6131 | 16 | { "Value", "openflow_v5.oxm.value", |
6132 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6133 | 16 | NULL, HFILL } |
6134 | 16 | }, |
6135 | 16 | { &hf_openflow_v5_oxm_value_etheraddr, |
6136 | 16 | { "Value", "openflow_v5.oxm.value_etheraddr", |
6137 | 16 | FT_ETHER, BASE_NONE, NULL, 0x0, |
6138 | 16 | NULL, HFILL } |
6139 | 16 | }, |
6140 | 16 | { &hf_openflow_v5_oxm_value_ethertype, |
6141 | 16 | { "Value", "openflow_v5.oxm.value_ethertype", |
6142 | 16 | FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0, |
6143 | 16 | NULL, HFILL } |
6144 | 16 | }, |
6145 | 16 | { &hf_openflow_v5_oxm_value_vlan_present, |
6146 | 16 | { "OFPVID_PRESENT", "openflow_v5.oxm.value_vlan_present", |
6147 | 16 | FT_BOOLEAN, 16, NULL, OFPVID_PRESENT, |
6148 | 16 | NULL, HFILL } |
6149 | 16 | }, |
6150 | 16 | { &hf_openflow_v5_oxm_value_vlan_vid, |
6151 | 16 | { "Value", "openflow_v5.oxm.value_vlan_vid", |
6152 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0fff, |
6153 | 16 | NULL, HFILL } |
6154 | 16 | }, |
6155 | 16 | { &hf_openflow_v5_oxm_value_ipv4addr, |
6156 | 16 | { "Value", "openflow_v5.oxm.value_ipv4addr", |
6157 | 16 | FT_IPv4, BASE_NONE, NULL, 0x0, |
6158 | 16 | NULL, HFILL } |
6159 | 16 | }, |
6160 | 16 | { &hf_openflow_v5_oxm_value_ipv6addr, |
6161 | 16 | { "Value", "openflow_v5.oxm.value_ipv6addr", |
6162 | 16 | FT_IPv6, BASE_NONE, NULL, 0x0, |
6163 | 16 | NULL, HFILL } |
6164 | 16 | }, |
6165 | 16 | { &hf_openflow_v5_oxm_value_ipproto, |
6166 | 16 | { "Value", "openflow_v5.oxm.value_ipproto", |
6167 | 16 | FT_UINT8, BASE_DEC|BASE_EXT_STRING, &ipproto_val_ext, 0x0, |
6168 | 16 | NULL, HFILL } |
6169 | 16 | }, |
6170 | 16 | { &hf_openflow_v5_oxm_value_uint16, |
6171 | 16 | { "Value", "openflow_v5.oxm.value_uint16", |
6172 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6173 | 16 | NULL, HFILL } |
6174 | 16 | }, |
6175 | 16 | { &hf_openflow_v5_oxm_value_uint24, |
6176 | 16 | { "Value", "openflow_v5.oxm.value_uint24", |
6177 | 16 | FT_UINT24, BASE_DEC, NULL, 0x0, |
6178 | 16 | NULL, HFILL } |
6179 | 16 | }, |
6180 | 16 | { &hf_openflow_v5_oxm_value_uint32, |
6181 | 16 | { "Value", "openflow_v5.oxm.value_uint32", |
6182 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6183 | 16 | NULL, HFILL } |
6184 | 16 | }, |
6185 | 16 | { &hf_openflow_v5_oxm_mask, |
6186 | 16 | { "Mask", "openflow_v5.oxm.mask", |
6187 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6188 | 16 | NULL, HFILL } |
6189 | 16 | }, |
6190 | 16 | { &hf_openflow_v5_oxm_mask_etheraddr, |
6191 | 16 | { "Mask", "openflow_v5.oxm.ether_mask", |
6192 | 16 | FT_ETHER, BASE_NONE, NULL, 0x0, |
6193 | 16 | NULL, HFILL } |
6194 | 16 | }, |
6195 | 16 | { &hf_openflow_v5_oxm_mask_ipv4addr, |
6196 | 16 | { "Mask", "openflow_v5.oxm.ipv4_mask", |
6197 | 16 | FT_IPv4, BASE_NONE, NULL, 0x0, |
6198 | 16 | NULL, HFILL } |
6199 | 16 | }, |
6200 | 16 | { &hf_openflow_v5_oxm_mask_ipv6addr, |
6201 | 16 | { "Mask", "openflow_v5.oxm.ipv6_mask", |
6202 | 16 | FT_IPv6, BASE_NONE, NULL, 0x0, |
6203 | 16 | NULL, HFILL } |
6204 | 16 | }, |
6205 | 16 | { &hf_openflow_v5_oxm_mask_vlan, |
6206 | 16 | { "Mask", "openflow_v5.oxm.vlan_mask", |
6207 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
6208 | 16 | NULL, HFILL } |
6209 | 16 | }, |
6210 | 16 | { &hf_openflow_v5_match_type, |
6211 | 16 | { "Type", "openflow_v5.match.type", |
6212 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_match_type_values), 0x0, |
6213 | 16 | NULL, HFILL } |
6214 | 16 | }, |
6215 | 16 | { &hf_openflow_v5_match_length, |
6216 | 16 | { "Length", "openflow_v5.match.length", |
6217 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6218 | 16 | NULL, HFILL } |
6219 | 16 | }, |
6220 | 16 | { &hf_openflow_v5_match_pad, |
6221 | 16 | { "Pad", "openflow_v5.match.pad", |
6222 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6223 | 16 | NULL, HFILL } |
6224 | 16 | }, |
6225 | 16 | { &hf_openflow_v5_action_type, |
6226 | 16 | { "Type", "openflow_v5.action.type", |
6227 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_action_type_values), 0x0, |
6228 | 16 | NULL, HFILL } |
6229 | 16 | }, |
6230 | 16 | { &hf_openflow_v5_action_length, |
6231 | 16 | { "Length", "openflow_v5.action.length", |
6232 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6233 | 16 | NULL, HFILL } |
6234 | 16 | }, |
6235 | 16 | { &hf_openflow_v5_action_experimenter_experimenter, |
6236 | 16 | { "Experimenter", "openflow_v5.action_experimenter.experimenter", |
6237 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6238 | 16 | NULL, HFILL } |
6239 | 16 | }, |
6240 | 16 | { &hf_openflow_v5_action_output_port, |
6241 | 16 | { "Port", "openflow_v5.action.output.port", |
6242 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
6243 | 16 | NULL, HFILL } |
6244 | 16 | }, |
6245 | 16 | { &hf_openflow_v5_action_output_max_len, |
6246 | 16 | { "Max length", "openflow_v5.action.output.max_len", |
6247 | 16 | FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_controller_max_len_reserved_values), 0x0, |
6248 | 16 | NULL, HFILL } |
6249 | 16 | }, |
6250 | 16 | { &hf_openflow_v5_action_output_pad, |
6251 | 16 | { "Pad", "openflow_v5.action.output.pad", |
6252 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6253 | 16 | NULL, HFILL } |
6254 | 16 | }, |
6255 | 16 | { &hf_openflow_v5_action_copy_ttl_out_pad, |
6256 | 16 | { "Pad", "openflow_v5.action.copy_ttl_out.pad", |
6257 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6258 | 16 | NULL, HFILL } |
6259 | 16 | }, |
6260 | 16 | { &hf_openflow_v5_action_copy_ttl_in_pad, |
6261 | 16 | { "Pad", "openflow_v5.action.copy_ttl_in.pad", |
6262 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6263 | 16 | NULL, HFILL } |
6264 | 16 | }, |
6265 | 16 | { &hf_openflow_v5_action_set_mpls_ttl_ttl, |
6266 | 16 | { "TTL", "openflow_v5.action.set_mpls_ttl.ttl", |
6267 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
6268 | 16 | NULL, HFILL } |
6269 | 16 | }, |
6270 | 16 | { &hf_openflow_v5_action_set_mpls_ttl_pad, |
6271 | 16 | { "Pad", "openflow_v5.action.set_mpls_ttl.pad", |
6272 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6273 | 16 | NULL, HFILL } |
6274 | 16 | }, |
6275 | 16 | { &hf_openflow_v5_action_dec_mpls_ttl_pad, |
6276 | 16 | { "Pad", "openflow_v5.action.dec_mpls_ttl.pad", |
6277 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6278 | 16 | NULL, HFILL } |
6279 | 16 | }, |
6280 | 16 | { &hf_openflow_v5_action_push_vlan_ethertype, |
6281 | 16 | { "Ethertype", "openflow_v5.action.push_vlan.ethertype", |
6282 | 16 | FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0, |
6283 | 16 | NULL, HFILL } |
6284 | 16 | }, |
6285 | 16 | { &hf_openflow_v5_action_push_vlan_pad, |
6286 | 16 | { "Pad", "openflow_v5.action.push_vlan.pad", |
6287 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6288 | 16 | NULL, HFILL } |
6289 | 16 | }, |
6290 | 16 | { &hf_openflow_v5_action_pop_vlan_pad, |
6291 | 16 | { "Pad", "openflow_v5.action.pop_vlan.pad", |
6292 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6293 | 16 | NULL, HFILL } |
6294 | 16 | }, |
6295 | 16 | { &hf_openflow_v5_action_push_mpls_ethertype, |
6296 | 16 | { "Ethertype", "openflow_v5.action.push_mpls.ethertype", |
6297 | 16 | FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0, |
6298 | 16 | NULL, HFILL } |
6299 | 16 | }, |
6300 | 16 | { &hf_openflow_v5_action_push_mpls_pad, |
6301 | 16 | { "Pad", "openflow_v5.action.push_mpls.pad", |
6302 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6303 | 16 | NULL, HFILL } |
6304 | 16 | }, |
6305 | 16 | { &hf_openflow_v5_action_pop_mpls_ethertype, |
6306 | 16 | { "Ethertype", "openflow_v5.action.pop_mpls.ethertype", |
6307 | 16 | FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0, |
6308 | 16 | NULL, HFILL } |
6309 | 16 | }, |
6310 | 16 | { &hf_openflow_v5_action_pop_mpls_pad, |
6311 | 16 | { "Pad", "openflow_v5.action.pop_mpls.pad", |
6312 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6313 | 16 | NULL, HFILL } |
6314 | 16 | }, |
6315 | 16 | { &hf_openflow_v5_action_set_queue_queue_id, |
6316 | 16 | { "Queue ID", "openflow_v5.action.set_queue.queue_id", |
6317 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6318 | 16 | NULL, HFILL } |
6319 | 16 | }, |
6320 | 16 | { &hf_openflow_v5_action_group_group_id, |
6321 | 16 | { "Group ID", "openflow_v5.action.group.group_id", |
6322 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
6323 | 16 | NULL, HFILL } |
6324 | 16 | }, |
6325 | 16 | { &hf_openflow_v5_action_set_nw_ttl_ttl, |
6326 | 16 | { "TTL", "openflow_v5.action.set_nw_ttl.ttl", |
6327 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
6328 | 16 | NULL, HFILL } |
6329 | 16 | }, |
6330 | 16 | { &hf_openflow_v5_action_set_nw_ttl_pad, |
6331 | 16 | { "Pad", "openflow_v5.action.set_nw_ttl.pad", |
6332 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6333 | 16 | NULL, HFILL } |
6334 | 16 | }, |
6335 | 16 | { &hf_openflow_v5_action_dec_nw_ttl_pad, |
6336 | 16 | { "Pad", "openflow_v5.action.dec_nw_ttl.pad", |
6337 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6338 | 16 | NULL, HFILL } |
6339 | 16 | }, |
6340 | 16 | { &hf_openflow_v5_action_set_field_pad, |
6341 | 16 | { "Pad", "openflow_v5.action.set_field.pad", |
6342 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6343 | 16 | NULL, HFILL } |
6344 | 16 | }, |
6345 | 16 | { &hf_openflow_v5_action_push_pbb_ethertype, |
6346 | 16 | { "Ethertype", "openflow_v5.action.push_pbb.ethertype", |
6347 | 16 | FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0, |
6348 | 16 | NULL, HFILL } |
6349 | 16 | }, |
6350 | 16 | { &hf_openflow_v5_action_push_pbb_pad, |
6351 | 16 | { "Pad", "openflow_v5.action.push_pbb.pad", |
6352 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6353 | 16 | NULL, HFILL } |
6354 | 16 | }, |
6355 | 16 | { &hf_openflow_v5_action_pop_pbb_pad, |
6356 | 16 | { "Pad", "openflow_v5.action.pop_pbb.pad", |
6357 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6358 | 16 | NULL, HFILL } |
6359 | 16 | }, |
6360 | 16 | { &hf_openflow_v5_instruction_type, |
6361 | 16 | { "Type", "openflow_v5.instruction.type", |
6362 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_instruction_type_values), 0x0, |
6363 | 16 | NULL, HFILL } |
6364 | 16 | }, |
6365 | 16 | { &hf_openflow_v5_instruction_length, |
6366 | 16 | { "Length", "openflow_v5.instruction.length", |
6367 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6368 | 16 | NULL, HFILL } |
6369 | 16 | }, |
6370 | 16 | { &hf_openflow_v5_instruction_experimenter_experimenter, |
6371 | 16 | { "Experimenter", "openflow_v5.instruction_experimenter.experimenter", |
6372 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6373 | 16 | NULL, HFILL } |
6374 | 16 | }, |
6375 | 16 | { &hf_openflow_v5_instruction_goto_table_table_id, |
6376 | 16 | { "Table ID", "openflow_v5.instruction.goto_table.table_id", |
6377 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
6378 | 16 | NULL, HFILL } |
6379 | 16 | }, |
6380 | 16 | { &hf_openflow_v5_instruction_goto_table_pad, |
6381 | 16 | { "Pad", "openflow_v5.instruction.goto_table.pad", |
6382 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6383 | 16 | NULL, HFILL } |
6384 | 16 | }, |
6385 | 16 | { &hf_openflow_v5_instruction_write_metadata_pad, |
6386 | 16 | { "Pad", "openflow_v5.instruction.write_metadata.pad", |
6387 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6388 | 16 | NULL, HFILL } |
6389 | 16 | }, |
6390 | 16 | { &hf_openflow_v5_instruction_write_metadata_value, |
6391 | 16 | { "Value", "openflow_v5.instruction.write_metadata.value", |
6392 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
6393 | 16 | NULL, HFILL } |
6394 | 16 | }, |
6395 | 16 | { &hf_openflow_v5_instruction_write_metadata_mask, |
6396 | 16 | { "Mask", "openflow_v5.instruction.write_metadata.mask", |
6397 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
6398 | 16 | NULL, HFILL } |
6399 | 16 | }, |
6400 | 16 | { &hf_openflow_v5_instruction_actions_pad, |
6401 | 16 | { "Pad", "openflow_v5.instruction.actions.pad", |
6402 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6403 | 16 | NULL, HFILL } |
6404 | 16 | }, |
6405 | 16 | { &hf_openflow_v5_instruction_meter_meter_id, |
6406 | 16 | { "Meter ID", "openflow_v5.instruction.meter.meter_id", |
6407 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_meter_id_reserved_values), 0x0, |
6408 | 16 | NULL, HFILL } |
6409 | 16 | }, |
6410 | 16 | { &hf_openflow_v5_port_desc_prop_type, |
6411 | 16 | { "Type", "openflow_v5.port.desc_prop.type", |
6412 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_port_desc_prop_type_values), 0x0, |
6413 | 16 | NULL, HFILL } |
6414 | 16 | }, |
6415 | 16 | { &hf_openflow_v5_port_desc_prop_length, |
6416 | 16 | { "Length", "openflow_v5.port.desc_prop.length", |
6417 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6418 | 16 | NULL, HFILL } |
6419 | 16 | }, |
6420 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_pad, |
6421 | 16 | { "Pad", "openflow_v5.port.desc_prop.ethernet.pad", |
6422 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6423 | 16 | NULL, HFILL } |
6424 | 16 | }, |
6425 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current, |
6426 | 16 | { "Current", "openflow_v5.port.desc_prop.ethernet.current", |
6427 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6428 | 16 | NULL, HFILL } |
6429 | 16 | }, |
6430 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_10mb_hd, |
6431 | 16 | { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.current.10mb_hd", |
6432 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_HD, |
6433 | 16 | NULL, HFILL } |
6434 | 16 | }, |
6435 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_10mb_fd, |
6436 | 16 | { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.current.10mb_fd", |
6437 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_FD, |
6438 | 16 | NULL, HFILL } |
6439 | 16 | }, |
6440 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_100mb_hd, |
6441 | 16 | { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.current.100mb_hd", |
6442 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_HD, |
6443 | 16 | NULL, HFILL } |
6444 | 16 | }, |
6445 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_100mb_fd, |
6446 | 16 | { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.current.100mb_fd", |
6447 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_FD, |
6448 | 16 | NULL, HFILL } |
6449 | 16 | }, |
6450 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_1gb_hd, |
6451 | 16 | { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.current.1gb_hd", |
6452 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_HD, |
6453 | 16 | NULL, HFILL } |
6454 | 16 | }, |
6455 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_1gb_fd, |
6456 | 16 | { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.current.1gb_fd", |
6457 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_FD, |
6458 | 16 | NULL, HFILL } |
6459 | 16 | }, |
6460 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_10gb_fd, |
6461 | 16 | { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.current.10gb_fd", |
6462 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10GB_FD, |
6463 | 16 | NULL, HFILL } |
6464 | 16 | }, |
6465 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_40gb_fd, |
6466 | 16 | { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.current.40gb_fd", |
6467 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_40GB_FD, |
6468 | 16 | NULL, HFILL } |
6469 | 16 | }, |
6470 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_100gb_fd, |
6471 | 16 | { "OFPPF_100_GB_FD", "openflow_v5.port.desc_prop.ethernet.current.100_gb_fd", |
6472 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100GB_FD, |
6473 | 16 | NULL, HFILL } |
6474 | 16 | }, |
6475 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_1tb_fd, |
6476 | 16 | { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.current.1tb_fd", |
6477 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1TB_FD, |
6478 | 16 | NULL, HFILL } |
6479 | 16 | }, |
6480 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_other, |
6481 | 16 | { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.current.other", |
6482 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_OTHER, |
6483 | 16 | NULL, HFILL } |
6484 | 16 | }, |
6485 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_copper, |
6486 | 16 | { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.current.copper", |
6487 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_COPPER, |
6488 | 16 | NULL, HFILL } |
6489 | 16 | }, |
6490 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_fiber, |
6491 | 16 | { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.current.fiber", |
6492 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_FIBER, |
6493 | 16 | NULL, HFILL } |
6494 | 16 | }, |
6495 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_autoneg, |
6496 | 16 | { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.current.autoneg", |
6497 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_AUTONEG, |
6498 | 16 | NULL, HFILL } |
6499 | 16 | }, |
6500 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_pause, |
6501 | 16 | { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.current.pause", |
6502 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE, |
6503 | 16 | NULL, HFILL } |
6504 | 16 | }, |
6505 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_current_pause_asym, |
6506 | 16 | { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.current.pause_asym", |
6507 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE_ASYM, |
6508 | 16 | NULL, HFILL } |
6509 | 16 | }, |
6510 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised, |
6511 | 16 | { "Advertised", "openflow_v5.port.desc_prop.ethernet.advertised", |
6512 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6513 | 16 | NULL, HFILL } |
6514 | 16 | }, |
6515 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_hd, |
6516 | 16 | { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.advertised.10mb_hd", |
6517 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_HD, |
6518 | 16 | NULL, HFILL } |
6519 | 16 | }, |
6520 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_10mb_fd, |
6521 | 16 | { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.10mb_fd", |
6522 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_FD, |
6523 | 16 | NULL, HFILL } |
6524 | 16 | }, |
6525 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_hd, |
6526 | 16 | { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.advertised.100mb_hd", |
6527 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_HD, |
6528 | 16 | NULL, HFILL } |
6529 | 16 | }, |
6530 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_100mb_fd, |
6531 | 16 | { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.100mb_fd", |
6532 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_FD, |
6533 | 16 | NULL, HFILL } |
6534 | 16 | }, |
6535 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_hd, |
6536 | 16 | { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.advertised.1gb_hd", |
6537 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_HD, |
6538 | 16 | NULL, HFILL } |
6539 | 16 | }, |
6540 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_1gb_fd, |
6541 | 16 | { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.1gb_fd", |
6542 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_FD, |
6543 | 16 | NULL, HFILL } |
6544 | 16 | }, |
6545 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_10gb_fd, |
6546 | 16 | { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.10gb_fd", |
6547 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10GB_FD, |
6548 | 16 | NULL, HFILL } |
6549 | 16 | }, |
6550 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_40gb_fd, |
6551 | 16 | { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.40gb_fd", |
6552 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_40GB_FD, |
6553 | 16 | NULL, HFILL } |
6554 | 16 | }, |
6555 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_100gb_fd, |
6556 | 16 | { "OFPPF_100GB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.100gb_fd", |
6557 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100GB_FD, |
6558 | 16 | NULL, HFILL } |
6559 | 16 | }, |
6560 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_1tb_fd, |
6561 | 16 | { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.advertised.1tb_fd", |
6562 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1TB_FD, |
6563 | 16 | NULL, HFILL } |
6564 | 16 | }, |
6565 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_other, |
6566 | 16 | { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.advertised.other", |
6567 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_OTHER, |
6568 | 16 | NULL, HFILL } |
6569 | 16 | }, |
6570 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_copper, |
6571 | 16 | { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.advertised.copper", |
6572 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_COPPER, |
6573 | 16 | NULL, HFILL } |
6574 | 16 | }, |
6575 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_fiber, |
6576 | 16 | { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.advertised.fiber", |
6577 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_FIBER, |
6578 | 16 | NULL, HFILL } |
6579 | 16 | }, |
6580 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_autoneg, |
6581 | 16 | { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.advertised.autoneg", |
6582 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_AUTONEG, |
6583 | 16 | NULL, HFILL } |
6584 | 16 | }, |
6585 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_pause, |
6586 | 16 | { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.advertised.pause", |
6587 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE, |
6588 | 16 | NULL, HFILL } |
6589 | 16 | }, |
6590 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_advertised_pause_asym, |
6591 | 16 | { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.advertised.pause_asym", |
6592 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE_ASYM, |
6593 | 16 | NULL, HFILL } |
6594 | 16 | }, |
6595 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported, |
6596 | 16 | { "Supported", "openflow_v5.port.desc_prop.ethernet.supported", |
6597 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6598 | 16 | NULL, HFILL } |
6599 | 16 | }, |
6600 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_hd, |
6601 | 16 | { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.supported.10mb_hd", |
6602 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_HD, |
6603 | 16 | NULL, HFILL } |
6604 | 16 | }, |
6605 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_10mb_fd, |
6606 | 16 | { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.supported.10mb_fd", |
6607 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_FD, |
6608 | 16 | NULL, HFILL } |
6609 | 16 | }, |
6610 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_hd, |
6611 | 16 | { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.supported.100mb_hd", |
6612 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_HD, |
6613 | 16 | NULL, HFILL } |
6614 | 16 | }, |
6615 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_100mb_fd, |
6616 | 16 | { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.supported.100mb_fd", |
6617 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_FD, |
6618 | 16 | NULL, HFILL } |
6619 | 16 | }, |
6620 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_hd, |
6621 | 16 | { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.supported.1gb_hd", |
6622 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_HD, |
6623 | 16 | NULL, HFILL } |
6624 | 16 | }, |
6625 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_1gb_fd, |
6626 | 16 | { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.1gb_fd", |
6627 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_FD, |
6628 | 16 | NULL, HFILL } |
6629 | 16 | }, |
6630 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_10gb_fd, |
6631 | 16 | { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.10gb_fd", |
6632 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10GB_FD, |
6633 | 16 | NULL, HFILL } |
6634 | 16 | }, |
6635 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_40gb_fd, |
6636 | 16 | { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.40gb_fd", |
6637 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_40GB_FD, |
6638 | 16 | NULL, HFILL } |
6639 | 16 | }, |
6640 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_100gb_fd, |
6641 | 16 | { "OFPPF_100GB_FD", "openflow_v5.port.desc_prop.ethernet.supported.100gb_fd", |
6642 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100GB_FD, |
6643 | 16 | NULL, HFILL } |
6644 | 16 | }, |
6645 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_1tb_fd, |
6646 | 16 | { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.supported.1tb_fd", |
6647 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1TB_FD, |
6648 | 16 | NULL, HFILL } |
6649 | 16 | }, |
6650 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_other, |
6651 | 16 | { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.supported.other", |
6652 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_OTHER, |
6653 | 16 | NULL, HFILL } |
6654 | 16 | }, |
6655 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_copper, |
6656 | 16 | { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.supported.copper", |
6657 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_COPPER, |
6658 | 16 | NULL, HFILL } |
6659 | 16 | }, |
6660 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_fiber, |
6661 | 16 | { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.supported.fiber", |
6662 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_FIBER, |
6663 | 16 | NULL, HFILL } |
6664 | 16 | }, |
6665 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_autoneg, |
6666 | 16 | { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.supported.autoneg", |
6667 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_AUTONEG, |
6668 | 16 | NULL, HFILL } |
6669 | 16 | }, |
6670 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_pause, |
6671 | 16 | { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.supported.pause", |
6672 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE, |
6673 | 16 | NULL, HFILL } |
6674 | 16 | }, |
6675 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_supported_pause_asym, |
6676 | 16 | { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.supported.pause_asym", |
6677 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE_ASYM, |
6678 | 16 | NULL, HFILL } |
6679 | 16 | }, |
6680 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer, |
6681 | 16 | { "Peer", "openflow_v5.port.desc_prop.ethernet.peer", |
6682 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6683 | 16 | NULL, HFILL } |
6684 | 16 | }, |
6685 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_hd, |
6686 | 16 | { "OFPPF_10MB_HD", "openflow_v5.port.desc_prop.ethernet.peer.10mb_hd", |
6687 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_HD, |
6688 | 16 | NULL, HFILL } |
6689 | 16 | }, |
6690 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_10mb_fd, |
6691 | 16 | { "OFPPF_10MB_FD", "openflow_v5.port.desc_prop.ethernet.peer.10mb_fd", |
6692 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_FD, |
6693 | 16 | NULL, HFILL } |
6694 | 16 | }, |
6695 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_hd, |
6696 | 16 | { "OFPPF_100MB_HD", "openflow_v5.port.desc_prop.ethernet.peer.100mb_hd", |
6697 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_HD, |
6698 | 16 | NULL, HFILL } |
6699 | 16 | }, |
6700 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_100mb_fd, |
6701 | 16 | { "OFPPF_100MB_FD", "openflow_v5.port.desc_prop.ethernet.peer.100mb_fd", |
6702 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_FD, |
6703 | 16 | NULL, HFILL } |
6704 | 16 | }, |
6705 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_hd, |
6706 | 16 | { "OFPPF_1GB_HD", "openflow_v5.port.desc_prop.ethernet.peer.1gb_hd", |
6707 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_HD, |
6708 | 16 | NULL, HFILL } |
6709 | 16 | }, |
6710 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_1gb_fd, |
6711 | 16 | { "OFPPF_1GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.1gb_fd", |
6712 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_FD, |
6713 | 16 | NULL, HFILL } |
6714 | 16 | }, |
6715 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_10gb_fd, |
6716 | 16 | { "OFPPF_10_GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.10gb_fd", |
6717 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10GB_FD, |
6718 | 16 | NULL, HFILL } |
6719 | 16 | }, |
6720 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_40gb_fd, |
6721 | 16 | { "OFPPF_40GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.40gb_fd", |
6722 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_40GB_FD, |
6723 | 16 | NULL, HFILL } |
6724 | 16 | }, |
6725 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_100gb_fd, |
6726 | 16 | { "OFPPF_100GB_FD", "openflow_v5.port.desc_prop.ethernet.peer.100gb_fd", |
6727 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100GB_FD, |
6728 | 16 | NULL, HFILL } |
6729 | 16 | }, |
6730 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_1tb_fd, |
6731 | 16 | { "OFPPF_1TB_FD", "openflow_v5.port.desc_prop.ethernet.peer.1tb_fd", |
6732 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1TB_FD, |
6733 | 16 | NULL, HFILL } |
6734 | 16 | }, |
6735 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_other, |
6736 | 16 | { "OFPPF_OTHER", "openflow_v5.port.desc_prop.ethernet.peer.other", |
6737 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_OTHER, |
6738 | 16 | NULL, HFILL } |
6739 | 16 | }, |
6740 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_copper, |
6741 | 16 | { "OFPPF_COPPER", "openflow_v5.port.desc_prop.ethernet.peer.copper", |
6742 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_COPPER, |
6743 | 16 | NULL, HFILL } |
6744 | 16 | }, |
6745 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_fiber, |
6746 | 16 | { "OFPPF_FIBER", "openflow_v5.port.desc_prop.ethernet.peer.fiber", |
6747 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_FIBER, |
6748 | 16 | NULL, HFILL } |
6749 | 16 | }, |
6750 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_autoneg, |
6751 | 16 | { "OFPPF_AUTONEG", "openflow_v5.port.desc_prop.ethernet.peer.autoneg", |
6752 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_AUTONEG, |
6753 | 16 | NULL, HFILL } |
6754 | 16 | }, |
6755 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_pause, |
6756 | 16 | { "OFPPF_PAUSE", "openflow_v5.port.desc_prop.ethernet.peer.pause", |
6757 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE, |
6758 | 16 | NULL, HFILL } |
6759 | 16 | }, |
6760 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_peer_pause_asym, |
6761 | 16 | { "OFPPF_PAUSE_ASYM", "openflow_v5.port.desc_prop.ethernet.peer.pause_asym", |
6762 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE_ASYM, |
6763 | 16 | NULL, HFILL } |
6764 | 16 | }, |
6765 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_curr_speed, |
6766 | 16 | { "Curr speed", "openflow_v5.port.desc_prop.ethernet.curr_speed", |
6767 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6768 | 16 | NULL, HFILL } |
6769 | 16 | }, |
6770 | 16 | { &hf_openflow_v5_port_desc_prop_ethernet_max_speed, |
6771 | 16 | { "Max speed", "openflow_v5.port.desc_prop.ethernet.max_speed", |
6772 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6773 | 16 | NULL, HFILL } |
6774 | 16 | }, |
6775 | 16 | { &hf_openflow_v5_port_desc_prop_optical_pad, |
6776 | 16 | { "Pad", "openflow_v5.port.desc_prop.optical.pad", |
6777 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6778 | 16 | NULL, HFILL } |
6779 | 16 | }, |
6780 | 16 | { &hf_openflow_v5_port_desc_prop_optical_supported, |
6781 | 16 | { "Supported", "openflow_v5.port.desc_prop.optical.supported", |
6782 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6783 | 16 | NULL, HFILL } |
6784 | 16 | }, |
6785 | 16 | { &hf_openflow_v5_port_desc_prop_optical_supported_rx_tune, |
6786 | 16 | { "OFPOPF_RX_TUNE", "openflow_v5.port.desc_prop.optical.supported.rx_tune", |
6787 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_RX_TUNE, |
6788 | 16 | NULL, HFILL } |
6789 | 16 | }, |
6790 | 16 | { &hf_openflow_v5_port_desc_prop_optical_supported_tx_tune, |
6791 | 16 | { "OFPOPF_TX_TUNE", "openflow_v5.port.desc_prop.optical.supported.tx_tune", |
6792 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_TX_TUNE, |
6793 | 16 | NULL, HFILL } |
6794 | 16 | }, |
6795 | 16 | { &hf_openflow_v5_port_desc_prop_optical_supported_tx_pwr, |
6796 | 16 | { "OFPOPF_TX_PWR", "openflow_v5.port.desc_prop.optical.supported.tx_pwr", |
6797 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_TX_PWR, |
6798 | 16 | NULL, HFILL } |
6799 | 16 | }, |
6800 | 16 | { &hf_openflow_v5_port_desc_prop_optical_supported_use_freq, |
6801 | 16 | { "OFPOPF_USE_FREQ", "openflow_v5.port.desc_prop.optical.supported.use_freq", |
6802 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_USE_FREQ, |
6803 | 16 | NULL, HFILL } |
6804 | 16 | }, |
6805 | 16 | { &hf_openflow_v5_port_desc_prop_optical_tx_min_freq_lmda, |
6806 | 16 | { "Tx. Min. Freq. Lambda", "openflow_v5.port.desc_prop.optical.tx_min_freq_lmda", |
6807 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6808 | 16 | NULL, HFILL } |
6809 | 16 | }, |
6810 | 16 | { &hf_openflow_v5_port_desc_prop_optical_tx_max_freq_lmda, |
6811 | 16 | { "Tx. Max. Freq. Lambda", "openflow_v5.port.desc_prop.optical.tx_max_freq_lmda", |
6812 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6813 | 16 | NULL, HFILL } |
6814 | 16 | }, |
6815 | 16 | { &hf_openflow_v5_port_desc_prop_optical_tx_grid_freq_lmda, |
6816 | 16 | { "Tx. Grid Freq. Lambda", "openflow_v5.port.desc_prop.optical.tx_grid_freq_lmda", |
6817 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6818 | 16 | NULL, HFILL } |
6819 | 16 | }, |
6820 | 16 | { &hf_openflow_v5_port_desc_prop_optical_rx_min_freq_lmda, |
6821 | 16 | { "Rx. Min. Freq. Lambda", "openflow_v5.port.desc_prop.optical.rx_min_freq_lmda", |
6822 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6823 | 16 | NULL, HFILL } |
6824 | 16 | }, |
6825 | 16 | { &hf_openflow_v5_port_desc_prop_optical_rx_max_freq_lmda, |
6826 | 16 | { "Rx. Max. Freq Lambda", "openflow_v5.port.desc_prop.optical.rx_max_freq_lmda", |
6827 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6828 | 16 | NULL, HFILL } |
6829 | 16 | }, |
6830 | 16 | { &hf_openflow_v5_port_desc_prop_optical_rx_grid_freq_lmda, |
6831 | 16 | { "Rx. Grid Freq. Lambda", "openflow_v5.port.desc_prop.optical.rx_grid_freq_lambda", |
6832 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6833 | 16 | NULL, HFILL } |
6834 | 16 | }, |
6835 | 16 | { &hf_openflow_v5_port_desc_prop_optical_tx_pwr_min, |
6836 | 16 | { "Tx. Power Min.", "openflow_v5.port.desc_prop.optical.tx_pwr_min", |
6837 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6838 | 16 | NULL, HFILL } |
6839 | 16 | }, |
6840 | 16 | { &hf_openflow_v5_port_desc_prop_optical_tx_pwr_max, |
6841 | 16 | { "Tx. Power Max.", "openflow_v5.port.desc_prop.optical.tx_pwr_max", |
6842 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6843 | 16 | NULL, HFILL } |
6844 | 16 | }, |
6845 | 16 | { &hf_openflow_v5_port_desc_prop_experimenter_experimenter, |
6846 | 16 | { "Experimenter", "openflow_v5.port_desc_prop.experimenter.experimenter", |
6847 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6848 | 16 | NULL, HFILL } |
6849 | 16 | }, |
6850 | 16 | { &hf_openflow_v5_port_desc_prop_experimenter_exp_type, |
6851 | 16 | { "Exp. type", "openflow_v5.port_desc_prop.experimenter.exp_type", |
6852 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6853 | 16 | NULL, HFILL } |
6854 | 16 | }, |
6855 | 16 | { &hf_openflow_v5_port_stats_prop_type, |
6856 | 16 | { "Type", "openflow_v5.port.stats_prop.type", |
6857 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_port_stats_prop_type_values), 0x0, |
6858 | 16 | NULL, HFILL } |
6859 | 16 | }, |
6860 | 16 | { &hf_openflow_v5_port_stats_prop_length, |
6861 | 16 | { "Length", "openflow_v5.port.stats_prop.length", |
6862 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6863 | 16 | NULL, HFILL } |
6864 | 16 | }, |
6865 | 16 | { &hf_openflow_v5_port_stats_prop_ethernet_pad, |
6866 | 16 | { "Pad", "openflow_v5.port.stats_prop.ethernet.pad", |
6867 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6868 | 16 | NULL, HFILL } |
6869 | 16 | }, |
6870 | 16 | { &hf_openflow_v5_port_stats_prop_ethernet_rx_frame_err, |
6871 | 16 | { "Rx. Frame Error", "openflow_v5.port.stats_prop.ethernet.rx_frame_err", |
6872 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
6873 | 16 | NULL, HFILL } |
6874 | 16 | }, |
6875 | 16 | { &hf_openflow_v5_port_stats_prop_ethernet_rx_over_err, |
6876 | 16 | { "Rx. Over Error", "openflow_v5.port.stats_prop.ethernet.rx_over_err", |
6877 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
6878 | 16 | NULL, HFILL } |
6879 | 16 | }, |
6880 | 16 | { &hf_openflow_v5_port_stats_prop_ethernet_rx_crc_err, |
6881 | 16 | { "Rx. CRC Error", "openflow_v5.port.stats_prop.ethernet.rx_crc_err", |
6882 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
6883 | 16 | NULL, HFILL } |
6884 | 16 | }, |
6885 | 16 | { &hf_openflow_v5_port_stats_prop_ethernet_collisions, |
6886 | 16 | { "Collisions", "openflow_v5.port.stats_prop.ethernet.collisions", |
6887 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
6888 | 16 | NULL, HFILL } |
6889 | 16 | }, |
6890 | 16 | { &hf_openflow_v5_port_stats_prop_optical_pad, |
6891 | 16 | { "Pad", "openflow_v5.port.stats_prop.optical.pad", |
6892 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6893 | 16 | NULL, HFILL } |
6894 | 16 | }, |
6895 | 16 | { &hf_openflow_v5_port_stats_prop_optical_flags, |
6896 | 16 | { "Flags", "openflow_v5.port.desc_prop.optical.supported", |
6897 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6898 | 16 | NULL, HFILL } |
6899 | 16 | }, |
6900 | 16 | { &hf_openflow_v5_port_stats_prop_optical_flags_rx_tune, |
6901 | 16 | { "OFPOSF_RX_TUNE", "openflow_v5.port.stats_prop.optical.flags.rx_tune", |
6902 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOSF_RX_TUNE, |
6903 | 16 | NULL, HFILL } |
6904 | 16 | }, |
6905 | 16 | { &hf_openflow_v5_port_stats_prop_optical_flags_tx_tune, |
6906 | 16 | { "OFPOSF_TX_TUNE", "openflow_v5.port.stats_prop.optical.flags.tx_tune", |
6907 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOSF_TX_TUNE, |
6908 | 16 | NULL, HFILL } |
6909 | 16 | }, |
6910 | 16 | { &hf_openflow_v5_port_stats_prop_optical_flags_tx_pwr, |
6911 | 16 | { "OFPOSF_TX_PWR", "openflow_v5.port.stats_prop.optical.flags.tx_pwr", |
6912 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOSF_TX_PWR, |
6913 | 16 | NULL, HFILL } |
6914 | 16 | }, |
6915 | 16 | { &hf_openflow_v5_port_stats_prop_optical_flags_rx_pwr, |
6916 | 16 | { "OFPOSF_RX_PWR", "openflow_v5.port.stats_prop.optical.flags.rx_pwr", |
6917 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOSF_RX_PWR, |
6918 | 16 | NULL, HFILL } |
6919 | 16 | }, |
6920 | 16 | { &hf_openflow_v5_port_stats_prop_optical_flags_tx_bias, |
6921 | 16 | { "OFPOSF_TX_BIAS", "openflow_v5.port.stats_prop.optical.flags.tx_bias", |
6922 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOSF_TX_BIAS, |
6923 | 16 | NULL, HFILL } |
6924 | 16 | }, |
6925 | 16 | { &hf_openflow_v5_port_stats_prop_optical_flags_tx_temp, |
6926 | 16 | { "OFPOSF_TX_TEMP", "openflow_v5.port.stats_prop.optical.flags.tx_temp", |
6927 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOSF_TX_TEMP, |
6928 | 16 | NULL, HFILL } |
6929 | 16 | }, |
6930 | 16 | { &hf_openflow_v5_port_stats_prop_optical_tx_freq_lmda, |
6931 | 16 | { "Tx. Freq. Lambda", "openflow_v5.port.stats_prop.optical.tx_freq_lmda", |
6932 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6933 | 16 | NULL, HFILL } |
6934 | 16 | }, |
6935 | 16 | { &hf_openflow_v5_port_stats_prop_optical_tx_offset, |
6936 | 16 | { "Tx. Offset", "openflow_v5.port.stats_prop.optical.tx_offset", |
6937 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6938 | 16 | NULL, HFILL } |
6939 | 16 | }, |
6940 | 16 | { &hf_openflow_v5_port_stats_prop_optical_tx_grid_span, |
6941 | 16 | { "Tx. Grid Spacing", "openflow_v5.port.stats_prop.optical.tx_grid_span", |
6942 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6943 | 16 | NULL, HFILL } |
6944 | 16 | }, |
6945 | 16 | { &hf_openflow_v5_port_stats_prop_optical_rx_freq_lmda, |
6946 | 16 | { "Rx. Freq. Lambda", "openflow_v5.port.stats_prop.optical.rx_freq_lmda", |
6947 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6948 | 16 | NULL, HFILL } |
6949 | 16 | }, |
6950 | 16 | { &hf_openflow_v5_port_stats_prop_optical_rx_offset, |
6951 | 16 | { "Rx. Offset", "openflow_v5.port.stats_prop.optical.rx_offset", |
6952 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6953 | 16 | NULL, HFILL } |
6954 | 16 | }, |
6955 | 16 | { &hf_openflow_v5_port_stats_prop_optical_rx_grid_span, |
6956 | 16 | { "Rx. Grid Spacing", "openflow_v5.port.stats_prop.optical.rx_grid_span", |
6957 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6958 | 16 | NULL, HFILL } |
6959 | 16 | }, |
6960 | 16 | { &hf_openflow_v5_port_stats_prop_optical_tx_pwr, |
6961 | 16 | { "Tx. Power", "openflow_v5.port.stats_prop.optical.tx_pwr", |
6962 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6963 | 16 | NULL, HFILL } |
6964 | 16 | }, |
6965 | 16 | { &hf_openflow_v5_port_stats_prop_optical_rx_pwr, |
6966 | 16 | { "Rx. Power", "openflow_v5.port.stats_prop.optical.rx_pwr", |
6967 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6968 | 16 | NULL, HFILL } |
6969 | 16 | }, |
6970 | 16 | { &hf_openflow_v5_port_stats_prop_optical_bias_current, |
6971 | 16 | { "Tx. Bias Current", "openflow_v5.port.stats_prop.optical.bias_current", |
6972 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6973 | 16 | NULL, HFILL } |
6974 | 16 | }, |
6975 | 16 | { &hf_openflow_v5_port_stats_prop_optical_temperature, |
6976 | 16 | { "Tx. Laser Temperature", "openflow_v5.port.stats_prop.optical.temperature", |
6977 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
6978 | 16 | NULL, HFILL } |
6979 | 16 | }, |
6980 | 16 | { &hf_openflow_v5_port_stats_prop_experimenter_experimenter, |
6981 | 16 | { "Experimenter", "openflow_v5.port_stats_prop.experimenter.experimenter", |
6982 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
6983 | 16 | NULL, HFILL } |
6984 | 16 | }, |
6985 | 16 | { &hf_openflow_v5_port_stats_prop_experimenter_exp_type, |
6986 | 16 | { "Exp. type", "openflow_v5.port_stats_prop.experimenter.exp_type", |
6987 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
6988 | 16 | NULL, HFILL } |
6989 | 16 | }, |
6990 | 16 | { &hf_openflow_v5_port_port_no, |
6991 | 16 | { "Port no", "openflow_v5.port.port_no", |
6992 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
6993 | 16 | NULL, HFILL } |
6994 | 16 | }, |
6995 | 16 | { &hf_openflow_v5_port_pad, |
6996 | 16 | { "Pad", "openflow_v5.port.pad", |
6997 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
6998 | 16 | NULL, HFILL } |
6999 | 16 | }, |
7000 | 16 | { &hf_openflow_v5_port_length, |
7001 | 16 | { "Length", "openflow_v5.port.length", |
7002 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7003 | 16 | NULL, HFILL } |
7004 | 16 | }, |
7005 | 16 | { &hf_openflow_v5_port_hw_addr, |
7006 | 16 | { "Hw addr", "openflow_v5.port.hw_addr", |
7007 | 16 | FT_ETHER, BASE_NONE, NULL, 0x0, |
7008 | 16 | NULL, HFILL } |
7009 | 16 | }, |
7010 | 16 | { &hf_openflow_v5_port_pad2, |
7011 | 16 | { "Pad2", "openflow_v5.port.pad2", |
7012 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7013 | 16 | NULL, HFILL } |
7014 | 16 | }, |
7015 | 16 | { &hf_openflow_v5_port_name, |
7016 | 16 | { "Name", "openflow_v5.port.name", |
7017 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
7018 | 16 | NULL, HFILL } |
7019 | 16 | }, |
7020 | 16 | { &hf_openflow_v5_port_config, |
7021 | 16 | { "Config", "openflow_v5.port.config", |
7022 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7023 | 16 | NULL, HFILL } |
7024 | 16 | }, |
7025 | 16 | { &hf_openflow_v5_port_config_port_down, |
7026 | 16 | { "OFPPC_PORT_DOWN", "openflow_v5.port.config.port_down", |
7027 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_PORT_DOWN, |
7028 | 16 | NULL, HFILL } |
7029 | 16 | }, |
7030 | 16 | { &hf_openflow_v5_port_config_no_recv, |
7031 | 16 | { "OFPPC_NO_RECV", "openflow_v5.port.config.no_recv", |
7032 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_RECV, |
7033 | 16 | NULL, HFILL } |
7034 | 16 | }, |
7035 | 16 | { &hf_openflow_v5_port_config_no_fwd, |
7036 | 16 | { "OFPPC_NO_FWD", "openflow_v5.port.config.no_fwd", |
7037 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_FWD, |
7038 | 16 | NULL, HFILL } |
7039 | 16 | }, |
7040 | 16 | { &hf_openflow_v5_port_config_no_packet_in, |
7041 | 16 | { "OFPPC_NO_PACKET_IN", "openflow_v5.port.config.no_packet_in", |
7042 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_PACKET_IN, |
7043 | 16 | NULL, HFILL } |
7044 | 16 | }, |
7045 | 16 | { &hf_openflow_v5_port_state, |
7046 | 16 | { "State", "openflow_v5.port.sate", |
7047 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7048 | 16 | NULL, HFILL } |
7049 | 16 | }, |
7050 | 16 | { &hf_openflow_v5_port_state_link_down, |
7051 | 16 | { "OFPPS_LINK_DOWN", "openflow_v5.port.state.link_down", |
7052 | 16 | FT_BOOLEAN, 32, NULL, OFPPS_LINK_DOWN, |
7053 | 16 | NULL, HFILL } |
7054 | 16 | }, |
7055 | 16 | { &hf_openflow_v5_port_state_blocked, |
7056 | 16 | { "OFPPS_BLOCKED", "openflow_v5.port.state.blocked", |
7057 | 16 | FT_BOOLEAN, 32, NULL, OFPPS_BLOCKED, |
7058 | 16 | NULL, HFILL } |
7059 | 16 | }, |
7060 | 16 | { &hf_openflow_v5_port_state_live, |
7061 | 16 | { "OFPPS_LIVE", "openflow_v5.port.state.live", |
7062 | 16 | FT_BOOLEAN, 32, NULL, OFPPS_LIVE, |
7063 | 16 | NULL, HFILL } |
7064 | 16 | }, |
7065 | 16 | { &hf_openflow_v5_meter_band_type, |
7066 | 16 | { "Type", "openflow_v5.meter_band.type", |
7067 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_meter_band_type_values), 0x0, |
7068 | 16 | NULL, HFILL } |
7069 | 16 | }, |
7070 | 16 | { &hf_openflow_v5_meter_band_len, |
7071 | 16 | { "Length", "openflow_v5.meter_band.length", |
7072 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7073 | 16 | NULL, HFILL } |
7074 | 16 | }, |
7075 | 16 | { &hf_openflow_v5_meter_band_rate, |
7076 | 16 | { "Rate", "openflow_v5.meter_band.rate", |
7077 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7078 | 16 | NULL, HFILL } |
7079 | 16 | }, |
7080 | 16 | { &hf_openflow_v5_meter_band_burst_size, |
7081 | 16 | { "Burst size", "openflow_v5.meter_band.burst_size", |
7082 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7083 | 16 | NULL, HFILL } |
7084 | 16 | }, |
7085 | 16 | { &hf_openflow_v5_meter_band_drop_pad, |
7086 | 16 | { "Pad", "openflow_v5.meter_band.drop.pad", |
7087 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7088 | 16 | NULL, HFILL } |
7089 | 16 | }, |
7090 | 16 | { &hf_openflow_v5_meter_band_dscp_remark_prec_level, |
7091 | 16 | { "Precedence level", "openflow_v5.meter_band.dscp_remark.prec_level", |
7092 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7093 | 16 | NULL, HFILL } |
7094 | 16 | }, |
7095 | 16 | { &hf_openflow_v5_meter_band_dscp_remark_pad, |
7096 | 16 | { "Pad", "openflow_v5.meter_band.dscp_remark.pad", |
7097 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7098 | 16 | NULL, HFILL } |
7099 | 16 | }, |
7100 | 16 | { &hf_openflow_v5_meter_band_experimenter_experimenter, |
7101 | 16 | { "Experimenter", "openflow_v5.meter_band.experimenter.experimenter", |
7102 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7103 | 16 | NULL, HFILL } |
7104 | 16 | }, |
7105 | 16 | { &hf_openflow_v5_hello_element_type, |
7106 | 16 | { "Type", "openflow_v5.hello_element.type", |
7107 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_hello_element_type_values), 0x0, |
7108 | 16 | NULL, HFILL } |
7109 | 16 | }, |
7110 | 16 | { &hf_openflow_v5_hello_element_length, |
7111 | 16 | { "Length", "openflow_v5.hello_element.length", |
7112 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7113 | 16 | NULL, HFILL } |
7114 | 16 | }, |
7115 | 16 | { &hf_openflow_v5_hello_element_version_bitmap, |
7116 | 16 | { "Bitmap", "openflow_v5.hello_element.version.bitmap", |
7117 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7118 | 16 | NULL, HFILL } |
7119 | 16 | }, |
7120 | 16 | { &hf_openflow_v5_hello_element_pad, |
7121 | 16 | { "Pad", "openflow_v5.hello_element.pad", |
7122 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7123 | 16 | NULL, HFILL } |
7124 | 16 | }, |
7125 | 16 | { &hf_openflow_v5_error_type, |
7126 | 16 | { "Type", "openflow_v5.error.type", |
7127 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_type_values), 0x0, |
7128 | 16 | NULL, HFILL } |
7129 | 16 | }, |
7130 | 16 | { &hf_openflow_v5_error_hello_failed_code, |
7131 | 16 | { "Code", "openflow_v5.error.code", |
7132 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_hello_failed_code_values), 0x0, |
7133 | 16 | NULL, HFILL } |
7134 | 16 | }, |
7135 | 16 | { &hf_openflow_v5_error_bad_request_code, |
7136 | 16 | { "Code", "openflow_v5.error.code", |
7137 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_bad_request_code_values), 0x0, |
7138 | 16 | NULL, HFILL } |
7139 | 16 | }, |
7140 | 16 | { &hf_openflow_v5_error_bad_action_code, |
7141 | 16 | { "Code", "openflow_v5.error.code", |
7142 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_bad_action_code_values), 0x0, |
7143 | 16 | NULL, HFILL } |
7144 | 16 | }, |
7145 | 16 | { &hf_openflow_v5_error_bad_instruction_code, |
7146 | 16 | { "Code", "openflow_v5.error.code", |
7147 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_bad_instruction_code_values), 0x0, |
7148 | 16 | NULL, HFILL } |
7149 | 16 | }, |
7150 | 16 | { &hf_openflow_v5_error_bad_match_code, |
7151 | 16 | { "Code", "openflow_v5.error.code", |
7152 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_bad_match_code_values), 0x0, |
7153 | 16 | NULL, HFILL } |
7154 | 16 | }, |
7155 | 16 | { &hf_openflow_v5_error_flow_mod_failed_code, |
7156 | 16 | { "Code", "openflow_v5.error.code", |
7157 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_flow_mod_failed_code_values), 0x0, |
7158 | 16 | NULL, HFILL } |
7159 | 16 | }, |
7160 | 16 | { &hf_openflow_v5_error_group_mod_failed_code, |
7161 | 16 | { "Code", "openflow_v5.error.code", |
7162 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_group_mod_failed_code_values), 0x0, |
7163 | 16 | NULL, HFILL } |
7164 | 16 | }, |
7165 | 16 | { &hf_openflow_v5_error_port_mod_failed_code, |
7166 | 16 | { "Code", "openflow_v5.error.code", |
7167 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_port_mod_failed_code_values), 0x0, |
7168 | 16 | NULL, HFILL } |
7169 | 16 | }, |
7170 | 16 | { &hf_openflow_v5_error_table_mod_failed_code, |
7171 | 16 | { "Code", "openflow_v5.error.code", |
7172 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_table_mod_failed_code_values), 0x0, |
7173 | 16 | NULL, HFILL } |
7174 | 16 | }, |
7175 | 16 | { &hf_openflow_v5_error_queue_op_failed_code, |
7176 | 16 | { "Code", "openflow_v5.error.code", |
7177 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_queue_op_failed_code_values), 0x0, |
7178 | 16 | NULL, HFILL } |
7179 | 16 | }, |
7180 | 16 | { &hf_openflow_v5_error_switch_config_failed_code, |
7181 | 16 | { "Code", "openflow_v5.error.code", |
7182 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_switch_config_failed_code_values), 0x0, |
7183 | 16 | NULL, HFILL } |
7184 | 16 | }, |
7185 | 16 | { &hf_openflow_v5_error_role_request_failed_code, |
7186 | 16 | { "Code", "openflow_v5.error.code", |
7187 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_role_request_failed_code_values), 0x0, |
7188 | 16 | NULL, HFILL } |
7189 | 16 | }, |
7190 | 16 | { &hf_openflow_v5_error_meter_mod_failed_code, |
7191 | 16 | { "Code", "openflow_v5.error.code", |
7192 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_meter_mod_failed_code_values), 0x0, |
7193 | 16 | NULL, HFILL } |
7194 | 16 | }, |
7195 | 16 | { &hf_openflow_v5_error_table_features_failed_code, |
7196 | 16 | { "Code", "openflow_v5.error.code", |
7197 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_table_features_failed_code_values), 0x0, |
7198 | 16 | NULL, HFILL } |
7199 | 16 | }, |
7200 | 16 | { &hf_openflow_v5_error_bad_property_code, |
7201 | 16 | { "Code", "openflow_v5.error.code", |
7202 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_bad_property_code_values), 0x0, |
7203 | 16 | NULL, HFILL } |
7204 | 16 | }, |
7205 | 16 | { &hf_openflow_v5_error_async_config_failed_code, |
7206 | 16 | { "Code", "openflow_v5.error.code", |
7207 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_async_config_failed_code_values), 0x0, |
7208 | 16 | NULL, HFILL } |
7209 | 16 | }, |
7210 | 16 | { &hf_openflow_v5_error_flow_monitor_failed_code, |
7211 | 16 | { "Code", "openflow_v5.error.code", |
7212 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_flow_monitor_failed_code_values), 0x0, |
7213 | 16 | NULL, HFILL } |
7214 | 16 | }, |
7215 | 16 | { &hf_openflow_v5_error_bundle_failed_code, |
7216 | 16 | { "Code", "openflow_v5.error.code", |
7217 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_error_bundle_failed_code_values), 0x0, |
7218 | 16 | NULL, HFILL } |
7219 | 16 | }, |
7220 | 16 | { &hf_openflow_v5_error_code, |
7221 | 16 | { "Code", "openflow_v5.error.code", |
7222 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7223 | 16 | NULL, HFILL } |
7224 | 16 | }, |
7225 | 16 | { &hf_openflow_v5_error_data_text, |
7226 | 16 | { "Data", "openflow_v5.error.data", |
7227 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
7228 | 16 | NULL, HFILL } |
7229 | 16 | }, |
7230 | 16 | { &hf_openflow_v5_echo_data, |
7231 | 16 | { "Data", "openflow_v5.echo.data", |
7232 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7233 | 16 | NULL, HFILL } |
7234 | 16 | }, |
7235 | 16 | { &hf_openflow_v5_error_data_body, |
7236 | 16 | { "Body", "openflow_v5.error.data.body", |
7237 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7238 | 16 | NULL, HFILL } |
7239 | 16 | }, |
7240 | 16 | { &hf_openflow_v5_error_experimenter, |
7241 | 16 | { "Experimenter", "openflow_v5.error.experimenter", |
7242 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7243 | 16 | NULL, HFILL } |
7244 | 16 | }, |
7245 | 16 | { &hf_openflow_v5_experimenter_experimenter, |
7246 | 16 | { "Experimenter", "openflow_v5.experimenter.experimenter", |
7247 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7248 | 16 | NULL, HFILL } |
7249 | 16 | }, |
7250 | 16 | { &hf_openflow_v5_experimenter_exp_type, |
7251 | 16 | { "Experimenter type", "openflow_v5.experimenter.exp_type", |
7252 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7253 | 16 | NULL, HFILL } |
7254 | 16 | }, |
7255 | 16 | { &hf_openflow_v5_switch_features_datapath_id, |
7256 | 16 | { "datapath_id", "openflow_v5.switch_features.datapath_id", |
7257 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7258 | 16 | NULL, HFILL } |
7259 | 16 | }, |
7260 | 16 | { &hf_openflow_v5_switch_features_n_buffers, |
7261 | 16 | { "n_buffers", "openflow_v5.switch_features.n_buffers", |
7262 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7263 | 16 | NULL, HFILL } |
7264 | 16 | }, |
7265 | 16 | { &hf_openflow_v5_switch_features_n_tables, |
7266 | 16 | { "n_tables", "openflow_v5.switch_features.n_tables", |
7267 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7268 | 16 | NULL, HFILL } |
7269 | 16 | }, |
7270 | 16 | { &hf_openflow_v5_switch_features_auxiliary_id, |
7271 | 16 | { "auxiliary_id", "openflow_v5.switch_features.auxiliary_id", |
7272 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7273 | 16 | NULL, HFILL } |
7274 | 16 | }, |
7275 | 16 | { &hf_openflow_v5_switch_features_pad, |
7276 | 16 | { "Pad", "openflow_v5.switch_features.pad", |
7277 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7278 | 16 | NULL, HFILL } |
7279 | 16 | }, |
7280 | 16 | { &hf_openflow_v5_switch_features_capabilities, |
7281 | 16 | { "capabilities", "openflow_v5.switch_features.capabilities", |
7282 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7283 | 16 | NULL, HFILL } |
7284 | 16 | }, |
7285 | 16 | { &hf_openflow_v5_switch_features_capabilities_flow_stats, |
7286 | 16 | { "OFPC_FLOW_STATS", "openflow_v5.switch_features.capabilities.flow_stats", |
7287 | 16 | FT_BOOLEAN, 32, NULL, OFPC_FLOW_STATS, |
7288 | 16 | NULL, HFILL } |
7289 | 16 | }, |
7290 | 16 | { &hf_openflow_v5_switch_features_capabilities_table_stats, |
7291 | 16 | { "OFPC_TABLE_STATS", "openflow_v5.switch_features.capabilities.table_stats", |
7292 | 16 | FT_BOOLEAN, 32, NULL, OFPC_TABLE_STATS, |
7293 | 16 | NULL, HFILL } |
7294 | 16 | }, |
7295 | 16 | { &hf_openflow_v5_switch_features_capabilities_port_stats, |
7296 | 16 | { "OFPC_PORT_STATS", "openflow_v5.switch_features.capabilities.port_stats", |
7297 | 16 | FT_BOOLEAN, 32, NULL, OFPC_PORT_STATS, |
7298 | 16 | NULL, HFILL } |
7299 | 16 | }, |
7300 | 16 | { &hf_openflow_v5_switch_features_capabilities_group_stats, |
7301 | 16 | { "OFPC_GROUP_STATS", "openflow_v5.switch_features.capabilities.group_stats", |
7302 | 16 | FT_BOOLEAN, 32, NULL, OFPC_GROUP_STATS, |
7303 | 16 | NULL, HFILL } |
7304 | 16 | }, |
7305 | 16 | { &hf_openflow_v5_switch_features_capabilities_ip_reasm, |
7306 | 16 | { "OFPC_IP_REASM", "openflow_v5.switch_features.capabilities.ip_reasm", |
7307 | 16 | FT_BOOLEAN, 32, NULL, OFPC_IP_REASM, |
7308 | 16 | NULL, HFILL } |
7309 | 16 | }, |
7310 | 16 | { &hf_openflow_v5_switch_features_capabilities_queue_stats, |
7311 | 16 | { "OFPC_QUEUE_STATS", "openflow_v5.switch_features.capabilities.queue_stats", |
7312 | 16 | FT_BOOLEAN, 32, NULL, OFPC_QUEUE_STATS, |
7313 | 16 | NULL, HFILL } |
7314 | 16 | }, |
7315 | 16 | { &hf_openflow_v5_switch_features_capabilities_port_blocked, |
7316 | 16 | { "OFPC_PORT_BLOCKED", "openflow_v5.switch_features.capabilities.port_blocked", |
7317 | 16 | FT_BOOLEAN, 32, NULL, OFPC_PORT_BLOCKED, |
7318 | 16 | NULL, HFILL } |
7319 | 16 | }, |
7320 | 16 | { &hf_openflow_v5_switch_features_reserved, |
7321 | 16 | { "Reserved", "openflow_v5.switch_features_reserved", |
7322 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7323 | 16 | NULL, HFILL } |
7324 | 16 | }, |
7325 | 16 | { &hf_openflow_v5_switch_config_flags, |
7326 | 16 | { "Flags", "openflow_v5.switch_config.flags", |
7327 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
7328 | 16 | NULL, HFILL } |
7329 | 16 | }, |
7330 | 16 | { &hf_openflow_v5_switch_config_flags_fragments, |
7331 | 16 | { "IP Fragments", "openflow_v5.switch_config.flags.fragments", |
7332 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_switch_config_fragments_values), 0x0, |
7333 | 16 | NULL, HFILL } |
7334 | 16 | }, |
7335 | 16 | { &hf_openflow_v5_switch_config_miss_send_len, |
7336 | 16 | { "Miss send length", "openflow_v5.switch_config.miss_send_len", |
7337 | 16 | FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_controller_max_len_reserved_values), 0x0, |
7338 | 16 | NULL, HFILL } |
7339 | 16 | }, |
7340 | 16 | { &hf_openflow_v5_packet_in_buffer_id, |
7341 | 16 | { "Buffer ID", "openflow_v5.packet_in.buffer_id", |
7342 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_buffer_reserved_values), 0x0, |
7343 | 16 | NULL, HFILL } |
7344 | 16 | }, |
7345 | 16 | { &hf_openflow_v5_packet_in_total_len, |
7346 | 16 | { "Total length", "openflow_v5.packet_in.total_len", |
7347 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7348 | 16 | NULL, HFILL } |
7349 | 16 | }, |
7350 | 16 | { &hf_openflow_v5_packet_in_reason, |
7351 | 16 | { "Reason", "openflow_v5.packet_in.reason", |
7352 | 16 | FT_UINT8, BASE_DEC, VALS(openflow_v5_packet_in_reason_values), 0x0, |
7353 | 16 | NULL, HFILL } |
7354 | 16 | }, |
7355 | 16 | { &hf_openflow_v5_packet_in_table_id, |
7356 | 16 | { "Table ID", "openflow_v5.packet_in.table_id", |
7357 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7358 | 16 | NULL, HFILL } |
7359 | 16 | }, |
7360 | 16 | { &hf_openflow_v5_packet_in_cookie, |
7361 | 16 | { "Cookie", "openflow_v5.packet_in.cookie", |
7362 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7363 | 16 | NULL, HFILL } |
7364 | 16 | }, |
7365 | 16 | { &hf_openflow_v5_packet_in_pad, |
7366 | 16 | { "Pad", "openflow_v5.packet_in.pad", |
7367 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7368 | 16 | NULL, HFILL } |
7369 | 16 | }, |
7370 | 16 | { &hf_openflow_v5_flow_removed_cookie, |
7371 | 16 | { "Cookie", "openflow_v5.flow_removed.cookie", |
7372 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7373 | 16 | NULL, HFILL } |
7374 | 16 | }, |
7375 | 16 | { &hf_openflow_v5_flow_removed_priority, |
7376 | 16 | { "Priority", "openflow_v5.flow_removed.priority", |
7377 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7378 | 16 | NULL, HFILL } |
7379 | 16 | }, |
7380 | 16 | { &hf_openflow_v5_flow_removed_reason, |
7381 | 16 | { "Reason", "openflow_v5.flow_removed.reason", |
7382 | 16 | FT_UINT8, BASE_DEC, VALS(openflow_v5_flow_removed_reason_values), 0x0, |
7383 | 16 | NULL, HFILL } |
7384 | 16 | }, |
7385 | 16 | { &hf_openflow_v5_flow_removed_table_id, |
7386 | 16 | { "Table ID", "openflow_v5.flow_removed.table_id", |
7387 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7388 | 16 | NULL, HFILL } |
7389 | 16 | }, |
7390 | 16 | { &hf_openflow_v5_flow_removed_duration_sec, |
7391 | 16 | { "Duration sec", "openflow_v5.flow_removed.duration_sec", |
7392 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7393 | 16 | NULL, HFILL } |
7394 | 16 | }, |
7395 | 16 | { &hf_openflow_v5_flow_removed_duration_nsec, |
7396 | 16 | { "Duration nsec", "openflow_v5.flow_removed.duration_nsec", |
7397 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7398 | 16 | NULL, HFILL } |
7399 | 16 | }, |
7400 | 16 | { &hf_openflow_v5_flow_removed_idle_timeout, |
7401 | 16 | { "Idle timeout", "openflow_v5.flow_removed.idle_timeout", |
7402 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7403 | 16 | NULL, HFILL } |
7404 | 16 | }, |
7405 | 16 | { &hf_openflow_v5_flow_removed_hard_timeout, |
7406 | 16 | { "Hard timeout", "openflow_v5.flow_removed.hard_timeout", |
7407 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7408 | 16 | NULL, HFILL } |
7409 | 16 | }, |
7410 | 16 | { &hf_openflow_v5_flow_removed_packet_count, |
7411 | 16 | { "Packet count", "openflow_v5.flow_removed.packet_count", |
7412 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
7413 | 16 | NULL, HFILL } |
7414 | 16 | }, |
7415 | 16 | { &hf_openflow_v5_flow_removed_byte_count, |
7416 | 16 | { "Byte count", "openflow_v5.flow_removed.byte_count", |
7417 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
7418 | 16 | NULL, HFILL } |
7419 | 16 | }, |
7420 | 16 | { &hf_openflow_v5_port_status_reason, |
7421 | 16 | { "Reason", "openflow_v5.port_status.reason", |
7422 | 16 | FT_UINT8, BASE_DEC, VALS(openflow_v5_port_status_reason_values), 0x0, |
7423 | 16 | NULL, HFILL } |
7424 | 16 | }, |
7425 | 16 | { &hf_openflow_v5_port_status_pad, |
7426 | 16 | { "Pad", "openflow_v5.port_status.pad", |
7427 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7428 | 16 | NULL, HFILL } |
7429 | 16 | }, |
7430 | 16 | { &hf_openflow_v5_packet_out_buffer_id, |
7431 | 16 | { "Buffer ID", "openflow_v5.packet_out.buffer_id", |
7432 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_buffer_reserved_values), 0x0, |
7433 | 16 | NULL, HFILL } |
7434 | 16 | }, |
7435 | 16 | { &hf_openflow_v5_packet_out_in_port, |
7436 | 16 | { "In port", "openflow_v5.packet_out.in_port", |
7437 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
7438 | 16 | NULL, HFILL } |
7439 | 16 | }, |
7440 | 16 | { &hf_openflow_v5_packet_out_acts_len, |
7441 | 16 | { "Actions length", "openflow_v5.packet_out.acts_len", |
7442 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7443 | 16 | NULL, HFILL } |
7444 | 16 | }, |
7445 | 16 | { &hf_openflow_v5_packet_out_pad, |
7446 | 16 | { "Pad", "openflow_v5.packet_out.pad", |
7447 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7448 | 16 | NULL, HFILL } |
7449 | 16 | }, |
7450 | 16 | { &hf_openflow_v5_flowmod_cookie, |
7451 | 16 | { "Cookie", "openflow_v5.flowmod.cookie", |
7452 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7453 | 16 | NULL, HFILL } |
7454 | 16 | }, |
7455 | 16 | { &hf_openflow_v5_flowmod_cookie_mask, |
7456 | 16 | { "Cookie mask", "openflow_v5.flowmod.cookie_mask", |
7457 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7458 | 16 | NULL, HFILL } |
7459 | 16 | }, |
7460 | 16 | { &hf_openflow_v5_flowmod_table_id, |
7461 | 16 | { "Table ID", "openflow_v5.flowmod.table_id", |
7462 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
7463 | 16 | NULL, HFILL } |
7464 | 16 | }, |
7465 | 16 | { &hf_openflow_v5_flowmod_command, |
7466 | 16 | { "Command", "openflow_v5.flowmod.command", |
7467 | 16 | FT_UINT8, BASE_DEC, VALS(openflow_v5_flowmod_command_values), 0x0, |
7468 | 16 | NULL, HFILL } |
7469 | 16 | }, |
7470 | 16 | { &hf_openflow_v5_flowmod_idle_timeout, |
7471 | 16 | { "Idle timeout", "openflow_v5.flowmod.idle_timeout", |
7472 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7473 | 16 | NULL, HFILL } |
7474 | 16 | }, |
7475 | 16 | { &hf_openflow_v5_flowmod_hard_timeout, |
7476 | 16 | { "Hard timeout", "openflow_v5.flowmod.hard_timeout", |
7477 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7478 | 16 | NULL, HFILL } |
7479 | 16 | }, |
7480 | 16 | { &hf_openflow_v5_flowmod_priority, |
7481 | 16 | { "Priority", "openflow_v5.flowmod.priority", |
7482 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7483 | 16 | NULL, HFILL } |
7484 | 16 | }, |
7485 | 16 | { &hf_openflow_v5_flowmod_buffer_id, |
7486 | 16 | { "Buffer ID", "openflow_v5.flowmod.buffer_id", |
7487 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_buffer_reserved_values), 0x0, |
7488 | 16 | NULL, HFILL } |
7489 | 16 | }, |
7490 | 16 | { &hf_openflow_v5_flowmod_out_port, |
7491 | 16 | { "Out port", "openflow_v5.flowmod.out_port", |
7492 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
7493 | 16 | NULL, HFILL } |
7494 | 16 | }, |
7495 | 16 | { &hf_openflow_v5_flowmod_out_group, |
7496 | 16 | { "Out group", "openflow_v5.flowmod.out_group", |
7497 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
7498 | 16 | NULL, HFILL } |
7499 | 16 | }, |
7500 | 16 | { &hf_openflow_v5_flowmod_flags, |
7501 | 16 | { "Flags", "openflow_v5.flowmod.flags", |
7502 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
7503 | 16 | NULL, HFILL } |
7504 | 16 | }, |
7505 | 16 | { &hf_openflow_v5_flowmod_flags_send_flow_rem, |
7506 | 16 | { "Send flow removed", "openflow_v5.flowmod.flags.send_flow_rem", |
7507 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_SEND_FLOW_REM, |
7508 | 16 | NULL, HFILL } |
7509 | 16 | }, |
7510 | 16 | { &hf_openflow_v5_flowmod_flags_check_overlap, |
7511 | 16 | { "Check overlap", "openflow_v5.flowmod.flags.check_overlap", |
7512 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_CHECK_OVERLAP, |
7513 | 16 | NULL, HFILL } |
7514 | 16 | }, |
7515 | 16 | { &hf_openflow_v5_flowmod_flags_reset_counts, |
7516 | 16 | { "Reset counts", "openflow_v5.flowmod.flags.reset_counts", |
7517 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_RESET_COUNTS, |
7518 | 16 | NULL, HFILL } |
7519 | 16 | }, |
7520 | 16 | { &hf_openflow_v5_flowmod_flags_no_packet_counts, |
7521 | 16 | { "Don't count packets", "openflow_v5.flowmod.flags.no_packet_counts", |
7522 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_NO_PKT_COUNTS, |
7523 | 16 | NULL, HFILL } |
7524 | 16 | }, |
7525 | 16 | { &hf_openflow_v5_flowmod_flags_no_byte_counts, |
7526 | 16 | { "Don't count bytes", "openflow_v5.flowmod.flags.no_byte_counts", |
7527 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_NO_BYT_COUNTS, |
7528 | 16 | NULL, HFILL } |
7529 | 16 | }, |
7530 | 16 | { &hf_openflow_v5_flowmod_importance, |
7531 | 16 | { "Importance", "openflow_v5.flowmod.importance", |
7532 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7533 | 16 | NULL, HFILL } |
7534 | 16 | }, |
7535 | 16 | { &hf_openflow_v5_bucket_length, |
7536 | 16 | { "Length", "openflow_v5.bucket.length", |
7537 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7538 | 16 | NULL, HFILL } |
7539 | 16 | }, |
7540 | 16 | { &hf_openflow_v5_bucket_weight, |
7541 | 16 | { "Weight", "openflow_v5.bucket.weight", |
7542 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7543 | 16 | NULL, HFILL } |
7544 | 16 | }, |
7545 | 16 | { &hf_openflow_v5_bucket_watch_port, |
7546 | 16 | { "Watch port", "openflow_v5.bucket.watch_port", |
7547 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
7548 | 16 | NULL, HFILL } |
7549 | 16 | }, |
7550 | 16 | { &hf_openflow_v5_bucket_watch_group, |
7551 | 16 | { "Watch group", "openflow_v5.bucket.watch_group", |
7552 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
7553 | 16 | NULL, HFILL } |
7554 | 16 | }, |
7555 | 16 | { &hf_openflow_v5_bucket_pad, |
7556 | 16 | { "Pad", "openflow_v5.bucket.pad", |
7557 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7558 | 16 | NULL, HFILL } |
7559 | 16 | }, |
7560 | 16 | { &hf_openflow_v5_groupmod_command, |
7561 | 16 | { "Command", "openflow_v5.groupmod.command", |
7562 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_groupmod_command_values), 0x0, |
7563 | 16 | NULL, HFILL } |
7564 | 16 | }, |
7565 | 16 | { &hf_openflow_v5_groupmod_type, |
7566 | 16 | { "Type", "openflow_v5.groupmod.type", |
7567 | 16 | FT_UINT8, BASE_DEC, VALS(openflow_v5_group_type_values), 0x0, |
7568 | 16 | NULL, HFILL } |
7569 | 16 | }, |
7570 | 16 | { &hf_openflow_v5_groupmod_pad, |
7571 | 16 | { "Pad", "openflow_v5.groupmod.pad", |
7572 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7573 | 16 | NULL, HFILL } |
7574 | 16 | }, |
7575 | 16 | { &hf_openflow_v5_groupmod_group_id, |
7576 | 16 | { "Group ID", "openflow_v5.groupmod.group_id", |
7577 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
7578 | 16 | NULL, HFILL } |
7579 | 16 | }, |
7580 | 16 | { &hf_openflow_v5_portmod_prop_type, |
7581 | 16 | { "Type", "openflow_v5.portmod.prop.type", |
7582 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_portmod_prop_type_values), 0x0, |
7583 | 16 | NULL, HFILL } |
7584 | 16 | }, |
7585 | 16 | { &hf_openflow_v5_portmod_prop_length, |
7586 | 16 | { "Length", "openflow_v5.portmod.prop.length", |
7587 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7588 | 16 | NULL, HFILL } |
7589 | 16 | }, |
7590 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise, |
7591 | 16 | { "Advertise", "openflow_v5.portmod.prop_ethernet.advertise", |
7592 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7593 | 16 | NULL, HFILL } |
7594 | 16 | }, |
7595 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_hd, |
7596 | 16 | { "OFPPF_10MB_HD", "openflow_v5.portmod.prop_ethernet.advertise.10mb_hd", |
7597 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_HD, |
7598 | 16 | NULL, HFILL } |
7599 | 16 | }, |
7600 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_10mb_fd, |
7601 | 16 | { "OFPPF_10MB_FD", "openflow_v5.portmod.prop_ethernet.advertise.10mb_fd", |
7602 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10MB_FD, |
7603 | 16 | NULL, HFILL } |
7604 | 16 | }, |
7605 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_hd, |
7606 | 16 | { "OFPPF_100MB_HD", "openflow_v5.portmod.prop_ethernet.advertise.100mb_hd", |
7607 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_HD, |
7608 | 16 | NULL, HFILL } |
7609 | 16 | }, |
7610 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_100mb_fd, |
7611 | 16 | { "OFPPF_100MB_FD", "openflow_v5.portmod.prop_ethernet.advertise.100mb_fd", |
7612 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100MB_FD, |
7613 | 16 | NULL, HFILL } |
7614 | 16 | }, |
7615 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_hd, |
7616 | 16 | { "OFPPF_1GB_HD", "openflow_v5.portmod.prop_ethernet.advertise.1gb_hd", |
7617 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_HD, |
7618 | 16 | NULL, HFILL } |
7619 | 16 | }, |
7620 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_1gb_fd, |
7621 | 16 | { "OFPPF_1GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.1gb_fd", |
7622 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1GB_FD, |
7623 | 16 | NULL, HFILL } |
7624 | 16 | }, |
7625 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_10gb_fd, |
7626 | 16 | { "OFPPF_10_GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.10gb_fd", |
7627 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_10GB_FD, |
7628 | 16 | NULL, HFILL } |
7629 | 16 | }, |
7630 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_40gb_fd, |
7631 | 16 | { "OFPPF_40GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.40gb_fd", |
7632 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_40GB_FD, |
7633 | 16 | NULL, HFILL } |
7634 | 16 | }, |
7635 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_100gb_fd, |
7636 | 16 | { "OFPPF_100_GB_FD", "openflow_v5.portmod.prop_ethernet.advertise.100_gb_fd", |
7637 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_100GB_FD, |
7638 | 16 | NULL, HFILL } |
7639 | 16 | }, |
7640 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_1tb_fd, |
7641 | 16 | { "OFPPF_1TB_FD", "openflow_v5.portmod.prop_ethernet.advertise.1tb_fd", |
7642 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_1TB_FD, |
7643 | 16 | NULL, HFILL } |
7644 | 16 | }, |
7645 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_other, |
7646 | 16 | { "OFPPF_OTHER", "openflow_v5.portmod.prop_ethernet.advertise.other", |
7647 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_OTHER, |
7648 | 16 | NULL, HFILL } |
7649 | 16 | }, |
7650 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_copper, |
7651 | 16 | { "OFPPF_COPPER", "openflow_v5.portmod.prop_ethernet.advertise.copper", |
7652 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_COPPER, |
7653 | 16 | NULL, HFILL } |
7654 | 16 | }, |
7655 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_fiber, |
7656 | 16 | { "OFPPF_FIBER", "openflow_v5.portmod.prop_ethernet.advertise.fiber", |
7657 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_FIBER, |
7658 | 16 | NULL, HFILL } |
7659 | 16 | }, |
7660 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_autoneg, |
7661 | 16 | { "OFPPF_AUTONEG", "openflow_v5.portmod.prop_ethernet.advertise.autoneg", |
7662 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_AUTONEG, |
7663 | 16 | NULL, HFILL } |
7664 | 16 | }, |
7665 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_pause, |
7666 | 16 | { "OFPPF_PAUSE", "openflow_v5.portmod.prop_ethernet.advertise.pause", |
7667 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE, |
7668 | 16 | NULL, HFILL } |
7669 | 16 | }, |
7670 | 16 | { &hf_openflow_v5_portmod_prop_ethernet_advertise_pause_asym, |
7671 | 16 | { "OFPPF_PAUSE_ASYM", "openflow_v5.portmod.prop_ethernet.advertise.pause_asym", |
7672 | 16 | FT_BOOLEAN, 32, NULL, OFPPF_PAUSE_ASYM, |
7673 | 16 | NULL, HFILL } |
7674 | 16 | }, |
7675 | 16 | { &hf_openflow_v5_portmod_prop_optical_configure, |
7676 | 16 | { "Configure", "openflow_v5.portmod.prop.optical.configure", |
7677 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7678 | 16 | NULL, HFILL } |
7679 | 16 | }, |
7680 | 16 | { &hf_openflow_v5_portmod_prop_optical_configure_rx_tune, |
7681 | 16 | { "OFPOPF_RX_TUNE", "openflow_v5.portmod.prop.optical.configure.rx_tune", |
7682 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_RX_TUNE, |
7683 | 16 | NULL, HFILL } |
7684 | 16 | }, |
7685 | 16 | { &hf_openflow_v5_portmod_prop_optical_configure_tx_tune, |
7686 | 16 | { "OFPOPF_TX_TUNE", "openflow_v5.portmod.prop.optical.configure.tx_tune", |
7687 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_TX_TUNE, |
7688 | 16 | NULL, HFILL } |
7689 | 16 | }, |
7690 | 16 | { &hf_openflow_v5_portmod_prop_optical_configure_tx_pwr, |
7691 | 16 | { "OFPOPF_TX_PWR", "openflow_v5.portmod.prop.optical.configure.tx_pwr", |
7692 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_TX_PWR, |
7693 | 16 | NULL, HFILL } |
7694 | 16 | }, |
7695 | 16 | { &hf_openflow_v5_portmod_prop_optical_configure_use_freq, |
7696 | 16 | { "OFPOPF_USE_FREQ", "openflow_v5.portmod.prop.optical.configure.use_freq", |
7697 | 16 | FT_UINT32, BASE_HEX, NULL, OFPOPF_USE_FREQ, |
7698 | 16 | NULL, HFILL } |
7699 | 16 | }, |
7700 | 16 | { &hf_openflow_v5_portmod_prop_optical_freq_lmda, |
7701 | 16 | { "Freq. lambda", "openflow_v5.portmod.prop.optical.freq_lmda", |
7702 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7703 | 16 | NULL, HFILL } |
7704 | 16 | }, |
7705 | 16 | { &hf_openflow_v5_portmod_prop_optical_fl_offset, |
7706 | 16 | { "Freq. offset", "openflow_v5.portmod.prop.optical.fl_offset", |
7707 | 16 | FT_INT32, BASE_DEC, NULL, 0x0, |
7708 | 16 | NULL, HFILL } |
7709 | 16 | }, |
7710 | 16 | { &hf_openflow_v5_portmod_prop_optical_grid_span, |
7711 | 16 | { "Grid span", "openflow_v5.portmod.prop.optical.grid_span", |
7712 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7713 | 16 | NULL, HFILL } |
7714 | 16 | }, |
7715 | 16 | { &hf_openflow_v5_portmod_prop_optical_tx_pwr, |
7716 | 16 | { "Tx power", "openflow_v5.portmod.prop.optical.tx_pwr", |
7717 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7718 | 16 | NULL, HFILL } |
7719 | 16 | }, |
7720 | 16 | { &hf_openflow_v5_portmod_prop_experimenter_experimenter, |
7721 | 16 | { "Experimenter", "openflow_v5.portmod.prop.experimenter.experimenter", |
7722 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7723 | 16 | NULL, HFILL } |
7724 | 16 | }, |
7725 | 16 | { &hf_openflow_v5_portmod_prop_experimenter_exp_type, |
7726 | 16 | { "Exp. type", "openflow_v5.portmod.prop.experimenter.exp_type", |
7727 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7728 | 16 | NULL, HFILL } |
7729 | 16 | }, |
7730 | 16 | { &hf_openflow_v5_portmod_port_no, |
7731 | 16 | { "Port no", "openflow_v5.portmod.port_no", |
7732 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
7733 | 16 | NULL, HFILL } |
7734 | 16 | }, |
7735 | 16 | { &hf_openflow_v5_portmod_pad, |
7736 | 16 | { "Pad", "openflow_v5.portmod.pad", |
7737 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7738 | 16 | NULL, HFILL } |
7739 | 16 | }, |
7740 | 16 | { &hf_openflow_v5_portmod_hw_addr, |
7741 | 16 | { "Hw addr", "openflow_v5.portmod.hw_addr", |
7742 | 16 | FT_ETHER, BASE_NONE, NULL, 0x0, |
7743 | 16 | NULL, HFILL } |
7744 | 16 | }, |
7745 | 16 | { &hf_openflow_v5_portmod_pad2, |
7746 | 16 | { "Pad", "openflow_v5.portmod.pad2", |
7747 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7748 | 16 | NULL, HFILL } |
7749 | 16 | }, |
7750 | 16 | { &hf_openflow_v5_portmod_config, |
7751 | 16 | { "Config", "openflow_v5.portmod.config", |
7752 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7753 | 16 | NULL, HFILL } |
7754 | 16 | }, |
7755 | 16 | { &hf_openflow_v5_portmod_config_port_down, |
7756 | 16 | { "OFPPC_PORT_DOWN", "openflow_v5.portmod.config.port_down", |
7757 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_PORT_DOWN, |
7758 | 16 | NULL, HFILL } |
7759 | 16 | }, |
7760 | 16 | { &hf_openflow_v5_portmod_config_no_recv, |
7761 | 16 | { "OFPPC_NO_RECV", "openflow_v5.portmod.config.no_recv", |
7762 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_RECV, |
7763 | 16 | NULL, HFILL } |
7764 | 16 | }, |
7765 | 16 | { &hf_openflow_v5_portmod_config_no_fwd, |
7766 | 16 | { "OFPPC_NO_FWD", "openflow_v5.portmod.config.no_fwd", |
7767 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_FWD, |
7768 | 16 | NULL, HFILL } |
7769 | 16 | }, |
7770 | 16 | { &hf_openflow_v5_portmod_config_no_packet_in, |
7771 | 16 | { "OFPPC_NO_PACKET_IN", "openflow_v5.portmod.config.no_packet_in", |
7772 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_PACKET_IN, |
7773 | 16 | NULL, HFILL } |
7774 | 16 | }, |
7775 | 16 | { &hf_openflow_v5_portmod_mask, |
7776 | 16 | { "Mask", "openflow_v5.portmod.mask", |
7777 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7778 | 16 | NULL, HFILL } |
7779 | 16 | }, |
7780 | 16 | { &hf_openflow_v5_portmod_mask_port_down, |
7781 | 16 | { "OFPPC_PORT_DOWN", "openflow_v5.portmod.mask.port_down", |
7782 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_PORT_DOWN, |
7783 | 16 | NULL, HFILL } |
7784 | 16 | }, |
7785 | 16 | { &hf_openflow_v5_portmod_mask_no_recv, |
7786 | 16 | { "OFPPC_NO_RECV", "openflow_v5.portmod.mask.no_recv", |
7787 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_RECV, |
7788 | 16 | NULL, HFILL } |
7789 | 16 | }, |
7790 | 16 | { &hf_openflow_v5_portmod_mask_no_fwd, |
7791 | 16 | { "OFPPC_NO_FWD", "openflow_v5.portmod.mask.no_fwd", |
7792 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_FWD, |
7793 | 16 | NULL, HFILL } |
7794 | 16 | }, |
7795 | 16 | { &hf_openflow_v5_portmod_mask_no_packet_in, |
7796 | 16 | { "OFPPC_NO_PACKET_IN", "openflow_v5.portmod.mask.no_packet_in", |
7797 | 16 | FT_BOOLEAN, 32, NULL, OFPPC_NO_PACKET_IN, |
7798 | 16 | NULL, HFILL } |
7799 | 16 | }, |
7800 | 16 | { &hf_openflow_v5_tablemod_table_id, |
7801 | 16 | { "Table ID", "openflow_v5.tablemod.table_id", |
7802 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
7803 | 16 | NULL, HFILL } |
7804 | 16 | }, |
7805 | 16 | { &hf_openflow_v5_tablemod_pad, |
7806 | 16 | { "Pad", "openflow_v5.tablemod.pad", |
7807 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7808 | 16 | NULL, HFILL } |
7809 | 16 | }, |
7810 | 16 | { &hf_openflow_v5_tablemod_config, |
7811 | 16 | { "Config", "openflow_v5.tablemod.config", |
7812 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7813 | 16 | NULL, HFILL } |
7814 | 16 | }, |
7815 | 16 | { &hf_openflow_v5_tablemod_config_eviction, |
7816 | 16 | { "OFPTC_EVICTION", "openflow_v5.tablemod.config.eviction", |
7817 | 16 | FT_BOOLEAN, 32, NULL, OFPTC_EVICTION, |
7818 | 16 | NULL, HFILL } |
7819 | 16 | }, |
7820 | 16 | { &hf_openflow_v5_tablemod_config_vacancy_events, |
7821 | 16 | { "OFPTC_VACANCY_EVENTS", "openflow_v5.tablemod.config.vacancy_events", |
7822 | 16 | FT_BOOLEAN, 32, NULL, OFPTC_VACANCY_EVENTS, |
7823 | 16 | NULL, HFILL } |
7824 | 16 | }, |
7825 | 16 | { &hf_openflow_v5_tablemod_prop_type, |
7826 | 16 | { "Type", "openflow_v5.tablemod_prop.type", |
7827 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_tablemod_prop_type_values), 0x0, |
7828 | 16 | NULL, HFILL } |
7829 | 16 | }, |
7830 | 16 | { &hf_openflow_v5_tablemod_prop_length, |
7831 | 16 | { "Length", "openflow_v5.tablemod_prop.length", |
7832 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7833 | 16 | NULL, HFILL } |
7834 | 16 | }, |
7835 | 16 | { &hf_openflow_v5_tablemod_prop_eviction_flags, |
7836 | 16 | { "Flags", "openflow_v5.tablemod.prop.eviction.flags", |
7837 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7838 | 16 | NULL, HFILL } |
7839 | 16 | }, |
7840 | 16 | { &hf_openflow_v5_tablemod_prop_eviction_flags_other, |
7841 | 16 | { "OFPTMPEF_OTHER", "openflow_v5.tablemod.prop.eviction.flags.other", |
7842 | 16 | FT_BOOLEAN, 32, NULL, OFPTMPEF_OTHER, |
7843 | 16 | NULL, HFILL } |
7844 | 16 | }, |
7845 | 16 | { &hf_openflow_v5_tablemod_prop_eviction_flags_importance, |
7846 | 16 | { "OFPTMPEF_IMPORTANCE", "openflow_v5.tablemod.prop.eviction.flags.importance", |
7847 | 16 | FT_BOOLEAN, 32, NULL, OFPTMPEF_IMPORTANCE, |
7848 | 16 | NULL, HFILL } |
7849 | 16 | }, |
7850 | 16 | { &hf_openflow_v5_tablemod_prop_eviction_flags_lifetime, |
7851 | 16 | { "OFPTMPEF_LIFETIME", "openflow_v5.tablemod.prop.eviction.flags.lifetime", |
7852 | 16 | FT_BOOLEAN, 32, NULL, OFPTMPEF_LIFETIME, |
7853 | 16 | NULL, HFILL } |
7854 | 16 | }, |
7855 | 16 | { &hf_openflow_v5_tablemod_prop_vacancy_vacancy_down, |
7856 | 16 | { "Vacancy down", "openflow_v5.tablemod.prop.vacancy.vacancy_down", |
7857 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7858 | 16 | NULL, HFILL } |
7859 | 16 | }, |
7860 | 16 | { &hf_openflow_v5_tablemod_prop_vacancy_vacancy_up, |
7861 | 16 | { "Vacancy up", "openflow_v5.tablemod.prop.vacancy.vacancy_up", |
7862 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7863 | 16 | NULL, HFILL } |
7864 | 16 | }, |
7865 | 16 | { &hf_openflow_v5_tablemod_prop_vacancy_vacancy, |
7866 | 16 | { "Vacancy", "openflow_v5.tablemod.prop.vacancy.vacancy", |
7867 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7868 | 16 | NULL, HFILL } |
7869 | 16 | }, |
7870 | 16 | { &hf_openflow_v5_tablemod_prop_vacancy_pad, |
7871 | 16 | { "Pad", "openflow_v5.tablemod.prop.vacancy.pad", |
7872 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7873 | 16 | NULL, HFILL } |
7874 | 16 | }, |
7875 | 16 | { &hf_openflow_v5_tablemod_prop_experimenter_experimenter, |
7876 | 16 | { "Experimenter", "openflow_v5.tablemod.prop.experimenter.experimenter", |
7877 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7878 | 16 | NULL, HFILL } |
7879 | 16 | }, |
7880 | 16 | { &hf_openflow_v5_tablemod_prop_experimenter_exp_type, |
7881 | 16 | { "Exp. type", "openflow_v5.tablemod.prop.experimenter.exp_type", |
7882 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7883 | 16 | NULL, HFILL } |
7884 | 16 | }, |
7885 | 16 | { &hf_openflow_v5_flow_stats_request_table_id, |
7886 | 16 | { "Table ID", "openflow_v5.flow_stats_request.table_id", |
7887 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
7888 | 16 | NULL, HFILL } |
7889 | 16 | }, |
7890 | 16 | { &hf_openflow_v5_flow_stats_request_pad, |
7891 | 16 | { "Pad", "openflow_v5.flow_stats_request.pad", |
7892 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7893 | 16 | NULL, HFILL } |
7894 | 16 | }, |
7895 | 16 | { &hf_openflow_v5_flow_stats_request_out_port, |
7896 | 16 | { "Out port", "openflow_v5.flow_stats_request.out_port", |
7897 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
7898 | 16 | NULL, HFILL } |
7899 | 16 | }, |
7900 | 16 | { &hf_openflow_v5_flow_stats_request_out_group, |
7901 | 16 | { "Out group", "openflow_v5.flow_stats_request.out_group", |
7902 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
7903 | 16 | NULL, HFILL } |
7904 | 16 | }, |
7905 | 16 | { &hf_openflow_v5_flow_stats_request_pad2, |
7906 | 16 | { "Pad", "openflow_v5.flow_stats_request.pad2", |
7907 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7908 | 16 | NULL, HFILL } |
7909 | 16 | }, |
7910 | 16 | { &hf_openflow_v5_flow_stats_request_cookie, |
7911 | 16 | { "Cookie", "openflow_v5.flow_stats_request.cookie", |
7912 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7913 | 16 | NULL, HFILL } |
7914 | 16 | }, |
7915 | 16 | { &hf_openflow_v5_flow_stats_request_cookie_mask, |
7916 | 16 | { "Cookie mask", "openflow_v5.flow_stats_request.cookie_mask", |
7917 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7918 | 16 | NULL, HFILL } |
7919 | 16 | }, |
7920 | 16 | { &hf_openflow_v5_aggregate_stats_request_table_id, |
7921 | 16 | { "Table ID", "openflow_v5.aggregate_stats_request.table_id", |
7922 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
7923 | 16 | NULL, HFILL } |
7924 | 16 | }, |
7925 | 16 | { &hf_openflow_v5_aggregate_stats_request_pad, |
7926 | 16 | { "Pad", "openflow_v5.aggregate_stats_request.pad", |
7927 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7928 | 16 | NULL, HFILL } |
7929 | 16 | }, |
7930 | 16 | { &hf_openflow_v5_aggregate_stats_request_out_port, |
7931 | 16 | { "Out port", "openflow_v5.aggregate_stats_request.out_port", |
7932 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
7933 | 16 | NULL, HFILL } |
7934 | 16 | }, |
7935 | 16 | { &hf_openflow_v5_aggregate_stats_request_out_group, |
7936 | 16 | { "Out group", "openflow_v5.aggregate_stats_request.out_group", |
7937 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
7938 | 16 | NULL, HFILL } |
7939 | 16 | }, |
7940 | 16 | { &hf_openflow_v5_aggregate_stats_request_pad2, |
7941 | 16 | { "Pad", "openflow_v5.aggregate_stats_request.pad2", |
7942 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7943 | 16 | NULL, HFILL } |
7944 | 16 | }, |
7945 | 16 | { &hf_openflow_v5_aggregate_stats_request_cookie, |
7946 | 16 | { "Cookie", "openflow_v5.aggregate_stats_request.cookie", |
7947 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7948 | 16 | NULL, HFILL } |
7949 | 16 | }, |
7950 | 16 | { &hf_openflow_v5_aggregate_stats_request_cookie_mask, |
7951 | 16 | { "Cookie mask", "openflow_v5.aggregate_stats_request.cookie_mask", |
7952 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
7953 | 16 | NULL, HFILL } |
7954 | 16 | }, |
7955 | 16 | { &hf_openflow_v5_table_feature_prop_type, |
7956 | 16 | { "Type", "openflow_v5.table_feature_prop.type", |
7957 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_table_feature_prop_type_values), 0x0, |
7958 | 16 | NULL, HFILL } |
7959 | 16 | }, |
7960 | 16 | { &hf_openflow_v5_table_feature_prop_length, |
7961 | 16 | { "Length", "openflow_v5.table_feature_prop.length", |
7962 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7963 | 16 | NULL, HFILL } |
7964 | 16 | }, |
7965 | 16 | { &hf_openflow_v5_table_feature_prop_next_tables_next_table_id, |
7966 | 16 | { "Next table ID", "openflow_v5.table_feature_prop.next_tables.next_table_id", |
7967 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7968 | 16 | NULL, HFILL } |
7969 | 16 | }, |
7970 | 16 | { &hf_openflow_v5_table_feature_prop_table_sync_from_table_id, |
7971 | 16 | { "Sync table ID", "openflow_v5.table_feature_prop.table_sync_from.table_id", |
7972 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7973 | 16 | NULL, HFILL } |
7974 | 16 | }, |
7975 | 16 | { &hf_openflow_v5_table_feature_prop_experimenter_experimenter, |
7976 | 16 | { "Experimenter", "openflow_v5.table_feature_prop.experimenter.experimenter", |
7977 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
7978 | 16 | NULL, HFILL } |
7979 | 16 | }, |
7980 | 16 | { &hf_openflow_v5_table_feature_prop_experimenter_exp_type, |
7981 | 16 | { "Experimenter type", "openflow_v5.table_feature_prop.experimenter.exp_type", |
7982 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
7983 | 16 | NULL, HFILL } |
7984 | 16 | }, |
7985 | 16 | { &hf_openflow_v5_table_feature_prop_pad, |
7986 | 16 | { "Pad", "openflow_v5.table_feature_prop.pad", |
7987 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
7988 | 16 | NULL, HFILL } |
7989 | 16 | }, |
7990 | 16 | { &hf_openflow_v5_table_features_length, |
7991 | 16 | { "Length", "openflow_v5.table_features.length", |
7992 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
7993 | 16 | NULL, HFILL } |
7994 | 16 | }, |
7995 | 16 | { &hf_openflow_v5_table_features_table_id, |
7996 | 16 | { "Table ID", "openflow_v5.table_features.table_id", |
7997 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
7998 | 16 | NULL, HFILL } |
7999 | 16 | }, |
8000 | 16 | { &hf_openflow_v5_table_features_pad, |
8001 | 16 | { "Pad", "openflow_v5.table_features.pad", |
8002 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8003 | 16 | NULL, HFILL } |
8004 | 16 | }, |
8005 | 16 | { &hf_openflow_v5_table_features_name, |
8006 | 16 | { "Name", "openflow_v5.table_features.name", |
8007 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
8008 | 16 | NULL, HFILL } |
8009 | 16 | }, |
8010 | 16 | { &hf_openflow_v5_table_features_metadata_match, |
8011 | 16 | { "Metadata match", "openflow_v5.table_features.metadata_match", |
8012 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
8013 | 16 | NULL, HFILL } |
8014 | 16 | }, |
8015 | 16 | { &hf_openflow_v5_table_features_metadata_write, |
8016 | 16 | { "Metadata write", "openflow_v5.table_features.metadata_write", |
8017 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
8018 | 16 | NULL, HFILL } |
8019 | 16 | }, |
8020 | 16 | { &hf_openflow_v5_table_features_capabilities, |
8021 | 16 | { "Capabilities", "openflow_v5.table_features.capabilities", |
8022 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8023 | 16 | NULL, HFILL } |
8024 | 16 | }, |
8025 | 16 | { &hf_openflow_v5_table_features_capabilities_eviction, |
8026 | 16 | { "OFPTC_EVICTION", "openflow_v5.table_features.capabilities.eviction", |
8027 | 16 | FT_UINT32, BASE_HEX, NULL, OFPTC_EVICTION, |
8028 | 16 | NULL, HFILL } |
8029 | 16 | }, |
8030 | 16 | { &hf_openflow_v5_table_features_capabilities_vacancy_events, |
8031 | 16 | { "OFPTC_VACANCY_EVENTS", "openflow_v5.table_features.capabilities.vacancy_events", |
8032 | 16 | FT_UINT32, BASE_HEX, NULL, OFPTC_VACANCY_EVENTS, |
8033 | 16 | NULL, HFILL } |
8034 | 16 | }, |
8035 | 16 | { &hf_openflow_v5_table_features_max_entries, |
8036 | 16 | { "Max entries", "openflow_v5.table_features.max_entries", |
8037 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8038 | 16 | NULL, HFILL } |
8039 | 16 | }, |
8040 | 16 | { &hf_openflow_v5_port_stats_request_port_no, |
8041 | 16 | { "Port number", "openflow_v5.port_stats_request.port_no", |
8042 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
8043 | 16 | NULL, HFILL } |
8044 | 16 | }, |
8045 | 16 | { &hf_openflow_v5_port_stats_request_pad, |
8046 | 16 | { "Pad", "openflow_v5.port_stats_request.pad", |
8047 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8048 | 16 | NULL, HFILL } |
8049 | 16 | }, |
8050 | 16 | { &hf_openflow_v5_queue_stats_request_port_no, |
8051 | 16 | { "Port number", "openflow_v5.queue_stats_request.port_no", |
8052 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
8053 | 16 | NULL, HFILL } |
8054 | 16 | }, |
8055 | 16 | { &hf_openflow_v5_queue_stats_request_queue_id, |
8056 | 16 | { "Queue ID", "openflow_v5.queue_stats_request.queue_id", |
8057 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_queue_reserved_values), 0x0, |
8058 | 16 | NULL, HFILL } |
8059 | 16 | }, |
8060 | 16 | { &hf_openflow_v5_group_stats_request_group_id, |
8061 | 16 | { "Group ID", "openflow_v5.group_stats_request.group_id", |
8062 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
8063 | 16 | NULL, HFILL } |
8064 | 16 | }, |
8065 | 16 | { &hf_openflow_v5_group_stats_request_pad, |
8066 | 16 | { "Pad", "openflow_v5.group_stats_request.pad", |
8067 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8068 | 16 | NULL, HFILL } |
8069 | 16 | }, |
8070 | 16 | { &hf_openflow_v5_meter_stats_request_meter_id, |
8071 | 16 | { "Meter ID", "openflow_v5.meter_stats_request.meter_id", |
8072 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_meter_id_reserved_values), 0x0, |
8073 | 16 | NULL, HFILL } |
8074 | 16 | }, |
8075 | 16 | { &hf_openflow_v5_meter_stats_request_pad, |
8076 | 16 | { "Pad", "openflow_v5.meter_stats_request.pad", |
8077 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8078 | 16 | NULL, HFILL } |
8079 | 16 | }, |
8080 | 16 | { &hf_openflow_v5_meter_config_request_meter_id, |
8081 | 16 | { "Meter ID", "openflow_v5.meter_config_request.meter_id", |
8082 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_meter_id_reserved_values), 0x0, |
8083 | 16 | NULL, HFILL } |
8084 | 16 | }, |
8085 | 16 | { &hf_openflow_v5_meter_config_request_pad, |
8086 | 16 | { "Pad", "openflow_v5.meter_config_request.pad", |
8087 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8088 | 16 | NULL, HFILL } |
8089 | 16 | }, |
8090 | 16 | { &hf_openflow_v5_queue_desc_request_port_no, |
8091 | 16 | { "Port number", "openflow_v5.queue_desc_request.port_no", |
8092 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
8093 | 16 | NULL, HFILL } |
8094 | 16 | }, |
8095 | 16 | { &hf_openflow_v5_queue_desc_request_queue_id, |
8096 | 16 | { "Queue ID", "openflow_v5.queue_desc_request.queue_id", |
8097 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_queue_reserved_values), 0x0, |
8098 | 16 | NULL, HFILL } |
8099 | 16 | }, |
8100 | 16 | { &hf_openflow_v5_flow_monitor_request_monitor_id, |
8101 | 16 | { "Monitor ID", "openflow_v5.flow_monitor_request.monitor_id", |
8102 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8103 | 16 | NULL, HFILL } |
8104 | 16 | }, |
8105 | 16 | { &hf_openflow_v5_flow_monitor_request_out_port, |
8106 | 16 | { "Out port", "openflow_v5.flow_monitor_request.out_port", |
8107 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
8108 | 16 | NULL, HFILL } |
8109 | 16 | }, |
8110 | 16 | { &hf_openflow_v5_flow_monitor_request_out_group, |
8111 | 16 | { "Out group", "openflow_v5.flow_monitor_request.out_group", |
8112 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
8113 | 16 | NULL, HFILL } |
8114 | 16 | }, |
8115 | 16 | { &hf_openflow_v5_flow_monitor_request_flags, |
8116 | 16 | { "Flags", "openflow_v5.flow_monitor_request.flags", |
8117 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
8118 | 16 | NULL, HFILL } |
8119 | 16 | }, |
8120 | 16 | { &hf_openflow_v5_flow_monitor_request_flags_initial, |
8121 | 16 | { "OFPFMF_INITIAL", "openflow_v5.flow_monitor_request.flags.initial", |
8122 | 16 | FT_UINT16, BASE_HEX, NULL, OFPFMF_INITIAL, |
8123 | 16 | NULL, HFILL } |
8124 | 16 | }, |
8125 | 16 | { &hf_openflow_v5_flow_monitor_request_flags_add, |
8126 | 16 | { "OFPFMF_ADD", "openflow_v5.flow_monitor_request.flags.add", |
8127 | 16 | FT_UINT16, BASE_HEX, NULL, OFPFMF_ADD, |
8128 | 16 | NULL, HFILL } |
8129 | 16 | }, |
8130 | 16 | { &hf_openflow_v5_flow_monitor_request_flags_removed, |
8131 | 16 | { "OFPFMF_REMOVED", "openflow_v5.flow_monitor_request.flags.removed", |
8132 | 16 | FT_UINT16, BASE_HEX, NULL, OFPFMF_REMOVED, |
8133 | 16 | NULL, HFILL } |
8134 | 16 | }, |
8135 | 16 | { &hf_openflow_v5_flow_monitor_request_flags_modify, |
8136 | 16 | { "OFPFMF_MODIFY", "openflow_v5.flow_monitor_request.flags.modify", |
8137 | 16 | FT_UINT16, BASE_HEX, NULL, OFPFMF_MODIFY, |
8138 | 16 | NULL, HFILL } |
8139 | 16 | }, |
8140 | 16 | { &hf_openflow_v5_flow_monitor_request_flags_instructions, |
8141 | 16 | { "OFPFMF_INSTRUCTIONS", "openflow_v5.flow_monitor_request.flags.instructions", |
8142 | 16 | FT_UINT16, BASE_HEX, NULL, OFPFMF_INSTRUCTIONS, |
8143 | 16 | NULL, HFILL } |
8144 | 16 | }, |
8145 | 16 | { &hf_openflow_v5_flow_monitor_request_flags_no_abbrev, |
8146 | 16 | { "OFPFMF_NO_ABBREV", "openflow_v5.flow_monitor_request.flags.no_abbrev", |
8147 | 16 | FT_UINT16, BASE_HEX, NULL, OFPFMF_NO_ABBREV, |
8148 | 16 | NULL, HFILL } |
8149 | 16 | }, |
8150 | 16 | { &hf_openflow_v5_flow_monitor_request_flags_only_own, |
8151 | 16 | { "OFPFMF_ONLY_OWN", "openflow_v5.flow_monitor_request.flags.only_own", |
8152 | 16 | FT_UINT16, BASE_HEX, NULL, OFPFMF_ONLY_OWN, |
8153 | 16 | NULL, HFILL } |
8154 | 16 | }, |
8155 | 16 | { &hf_openflow_v5_flow_monitor_request_table_id, |
8156 | 16 | { "Table ID", "openflow_v5.flow_monitor_request.table_id", |
8157 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
8158 | 16 | NULL, HFILL } |
8159 | 16 | }, |
8160 | 16 | { &hf_openflow_v5_flow_monitor_request_command, |
8161 | 16 | { "Command", "openflow_v5.flow_monitor_request.command", |
8162 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_flow_monitor_request_command_values), 0x0, |
8163 | 16 | NULL, HFILL } |
8164 | 16 | }, |
8165 | 16 | { &hf_openflow_v5_multipart_request_type, |
8166 | 16 | { "Type", "openflow_v5.multipart_request.type", |
8167 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_multipart_type_values), 0x0, |
8168 | 16 | NULL, HFILL } |
8169 | 16 | }, |
8170 | 16 | { &hf_openflow_v5_multipart_request_flags, |
8171 | 16 | { "Flags", "openflow_v5.multipart_request.flags", |
8172 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
8173 | 16 | NULL, HFILL } |
8174 | 16 | }, |
8175 | 16 | { &hf_openflow_v5_multipart_request_flags_more, |
8176 | 16 | { "OFPMPF_REQ_MORE", "openflow_v5.multipart_request.flags.more", |
8177 | 16 | FT_UINT16, BASE_HEX, NULL, OFPMPF_REQ_MORE, |
8178 | 16 | NULL, HFILL } |
8179 | 16 | }, |
8180 | 16 | { &hf_openflow_v5_multipart_request_pad, |
8181 | 16 | { "Pad", "openflow_v5.multipart_request.pad", |
8182 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8183 | 16 | NULL, HFILL } |
8184 | 16 | }, |
8185 | 16 | { &hf_openflow_v5_multipart_request_experimenter_experimenter, |
8186 | 16 | { "Experimenter", "openflow_v5.multipart_request.experimenter.experimenter", |
8187 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8188 | 16 | NULL, HFILL } |
8189 | 16 | }, |
8190 | 16 | { &hf_openflow_v5_multipart_request_experimenter_exp_type, |
8191 | 16 | { "Experimenter type", "openflow_v5.multipart_request.experimenter.exp_type", |
8192 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8193 | 16 | NULL, HFILL } |
8194 | 16 | }, |
8195 | 16 | { &hf_openflow_v5_switch_description_mfr_desc, |
8196 | 16 | { "Manufacturer desc.", "openflow_v5.switch_description.mfr_desc", |
8197 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
8198 | 16 | NULL, HFILL } |
8199 | 16 | }, |
8200 | 16 | { &hf_openflow_v5_switch_description_hw_desc, |
8201 | 16 | { "Hardware desc.", "openflow_v5.switch_description.hw_desc", |
8202 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
8203 | 16 | NULL, HFILL } |
8204 | 16 | }, |
8205 | 16 | { &hf_openflow_v5_switch_description_sw_desc, |
8206 | 16 | { "Software desc.", "openflow_v5.switch_description.sw_desc", |
8207 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
8208 | 16 | NULL, HFILL } |
8209 | 16 | }, |
8210 | 16 | { &hf_openflow_v5_switch_description_serial_num, |
8211 | 16 | { "Serial no.", "openflow_v5.switch_description.serial_num", |
8212 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
8213 | 16 | NULL, HFILL } |
8214 | 16 | }, |
8215 | 16 | { &hf_openflow_v5_switch_description_dp_desc, |
8216 | 16 | { "Datapath desc.", "openflow_v5.switch_description.dp_desc", |
8217 | 16 | FT_STRING, BASE_NONE, NULL, 0x0, |
8218 | 16 | NULL, HFILL } |
8219 | 16 | }, |
8220 | 16 | { &hf_openflow_v5_flow_stats_length, |
8221 | 16 | { "Length", "openflow_v5.flow_stats.length", |
8222 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8223 | 16 | NULL, HFILL } |
8224 | 16 | }, |
8225 | 16 | { &hf_openflow_v5_flow_stats_table_id, |
8226 | 16 | { "Table ID", "openflow_v5.flow_stats.table_id", |
8227 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
8228 | 16 | NULL, HFILL } |
8229 | 16 | }, |
8230 | 16 | { &hf_openflow_v5_flow_stats_pad, |
8231 | 16 | { "Pad", "openflow_v5.flow_stats.pad", |
8232 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8233 | 16 | NULL, HFILL } |
8234 | 16 | }, |
8235 | 16 | { &hf_openflow_v5_flow_stats_duration_sec, |
8236 | 16 | { "Duration sec", "openflow_v5.flow_stats.duration_sec", |
8237 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8238 | 16 | NULL, HFILL } |
8239 | 16 | }, |
8240 | 16 | { &hf_openflow_v5_flow_stats_duration_nsec, |
8241 | 16 | { "Duration nsec", "openflow_v5.flow_stats.duration_nsec", |
8242 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8243 | 16 | NULL, HFILL } |
8244 | 16 | }, |
8245 | 16 | { &hf_openflow_v5_flow_stats_priority, |
8246 | 16 | { "Priority", "openflow_v5.flow_stats.priority", |
8247 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8248 | 16 | NULL, HFILL } |
8249 | 16 | }, |
8250 | 16 | { &hf_openflow_v5_flow_stats_idle_timeout, |
8251 | 16 | { "Idle timeout", "openflow_v5.flow_stats.idle_timeout", |
8252 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8253 | 16 | NULL, HFILL } |
8254 | 16 | }, |
8255 | 16 | { &hf_openflow_v5_flow_stats_hard_timeout, |
8256 | 16 | { "Hard timeout", "openflow_v5.flow_stats.hard_timeout", |
8257 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8258 | 16 | NULL, HFILL } |
8259 | 16 | }, |
8260 | 16 | { &hf_openflow_v5_flow_stats_flags, |
8261 | 16 | { "Flags", "openflow_v5.flow_stats.flags", |
8262 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
8263 | 16 | NULL, HFILL } |
8264 | 16 | }, |
8265 | 16 | { &hf_openflow_v5_flow_stats_flags_send_flow_rem, |
8266 | 16 | { "Send flow removed", "openflow_v5.flow_stats.flags.send_flow_rem", |
8267 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_SEND_FLOW_REM, |
8268 | 16 | NULL, HFILL } |
8269 | 16 | }, |
8270 | 16 | { &hf_openflow_v5_flow_stats_flags_check_overlap, |
8271 | 16 | { "Check overlap", "openflow_v5.flow_stats.flags.check_overlap", |
8272 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_CHECK_OVERLAP, |
8273 | 16 | NULL, HFILL } |
8274 | 16 | }, |
8275 | 16 | { &hf_openflow_v5_flow_stats_flags_reset_counts, |
8276 | 16 | { "Reset counts", "openflow_v5.flow_stats.flags.reset_counts", |
8277 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_RESET_COUNTS, |
8278 | 16 | NULL, HFILL } |
8279 | 16 | }, |
8280 | 16 | { &hf_openflow_v5_flow_stats_flags_no_packet_counts, |
8281 | 16 | { "Don't count packets", "openflow_v5.flow_stats.flags.no_packet_counts", |
8282 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_NO_PKT_COUNTS, |
8283 | 16 | NULL, HFILL } |
8284 | 16 | }, |
8285 | 16 | { &hf_openflow_v5_flow_stats_flags_no_byte_counts, |
8286 | 16 | { "Don't count bytes", "openflow_v5.flow_stats.flags.no_byte_counts", |
8287 | 16 | FT_BOOLEAN, 16, NULL, OFPFF_NO_BYT_COUNTS, |
8288 | 16 | NULL, HFILL } |
8289 | 16 | }, |
8290 | 16 | { &hf_openflow_v5_flow_stats_importance, |
8291 | 16 | { "Importance", "openflow_v5.flow_stats.importance", |
8292 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8293 | 16 | NULL, HFILL } |
8294 | 16 | }, |
8295 | 16 | { &hf_openflow_v5_flow_stats_pad2, |
8296 | 16 | { "Pad", "openflow_v5.flow_stats.pad2", |
8297 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8298 | 16 | NULL, HFILL } |
8299 | 16 | }, |
8300 | 16 | { &hf_openflow_v5_flow_stats_cookie, |
8301 | 16 | { "Cookie", "openflow_v5.flow_stats.cookie", |
8302 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
8303 | 16 | NULL, HFILL } |
8304 | 16 | }, |
8305 | 16 | { &hf_openflow_v5_flow_stats_packet_count, |
8306 | 16 | { "Packet count", "openflow_v5.flow_stats.packet_count", |
8307 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8308 | 16 | NULL, HFILL } |
8309 | 16 | }, |
8310 | 16 | { &hf_openflow_v5_flow_stats_byte_count, |
8311 | 16 | { "Byte count", "openflow_v5.flow_stats.byte_count", |
8312 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8313 | 16 | NULL, HFILL } |
8314 | 16 | }, |
8315 | 16 | { &hf_openflow_v5_aggregate_stats_packet_count, |
8316 | 16 | { "Packet count", "openflow_v5.aggregate_stats.packet_count", |
8317 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8318 | 16 | NULL, HFILL } |
8319 | 16 | }, |
8320 | 16 | { &hf_openflow_v5_aggregate_stats_byte_count, |
8321 | 16 | { "Byte count", "openflow_v5.aggregate_stats.byte_count", |
8322 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8323 | 16 | NULL, HFILL } |
8324 | 16 | }, |
8325 | 16 | { &hf_openflow_v5_aggregate_stats_flow_count, |
8326 | 16 | { "Flow count", "openflow_v5.aggregate_stats.flow_count", |
8327 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8328 | 16 | NULL, HFILL } |
8329 | 16 | }, |
8330 | 16 | { &hf_openflow_v5_aggregate_stats_pad, |
8331 | 16 | { "Pad", "openflow_v5.aggregate_stats.pad", |
8332 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8333 | 16 | NULL, HFILL } |
8334 | 16 | }, |
8335 | 16 | { &hf_openflow_v5_table_stats_table_id, |
8336 | 16 | { "Table ID", "openflow_v5.table_stats.table_id", |
8337 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
8338 | 16 | NULL, HFILL } |
8339 | 16 | }, |
8340 | 16 | { &hf_openflow_v5_table_stats_pad, |
8341 | 16 | { "Pad", "openflow_v5.table_stats.pad", |
8342 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8343 | 16 | NULL, HFILL } |
8344 | 16 | }, |
8345 | 16 | { &hf_openflow_v5_table_stats_active_count, |
8346 | 16 | { "Active count", "openflow_v5.table_stats.active_count", |
8347 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8348 | 16 | NULL, HFILL } |
8349 | 16 | }, |
8350 | 16 | { &hf_openflow_v5_table_stats_lookup_count, |
8351 | 16 | { "Lookup count", "openflow_v5.table_stats.lookup_count", |
8352 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8353 | 16 | NULL, HFILL } |
8354 | 16 | }, |
8355 | 16 | { &hf_openflow_v5_table_stats_match_count, |
8356 | 16 | { "Match count", "openflow_v5.table_stats.match_count", |
8357 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8358 | 16 | NULL, HFILL } |
8359 | 16 | }, |
8360 | 16 | { &hf_openflow_v5_port_stats_length, |
8361 | 16 | { "Length", "openflow_v5.port_stats.length", |
8362 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8363 | 16 | NULL, HFILL } |
8364 | 16 | }, |
8365 | 16 | { &hf_openflow_v5_port_stats_pad, |
8366 | 16 | { "Pad", "openflow_v5.port_stats.pad", |
8367 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8368 | 16 | NULL, HFILL } |
8369 | 16 | }, |
8370 | 16 | { &hf_openflow_v5_port_stats_port_no, |
8371 | 16 | { "Port number", "openflow_v5.port_stats.port_no", |
8372 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
8373 | 16 | NULL, HFILL } |
8374 | 16 | }, |
8375 | 16 | { &hf_openflow_v5_port_stats_duration_sec, |
8376 | 16 | { "Duration sec", "openflow_v5.port_stats.duration_sec", |
8377 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8378 | 16 | NULL, HFILL } |
8379 | 16 | }, |
8380 | 16 | { &hf_openflow_v5_port_stats_duration_nsec, |
8381 | 16 | { "Duration nsec", "openflow_v5.port_stats.duration_nsec", |
8382 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8383 | 16 | NULL, HFILL } |
8384 | 16 | }, |
8385 | 16 | { &hf_openflow_v5_port_stats_rx_packets, |
8386 | 16 | { "Rx packets", "openflow_v5.port_stats.rx_packets", |
8387 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8388 | 16 | NULL, HFILL } |
8389 | 16 | }, |
8390 | 16 | { &hf_openflow_v5_port_stats_tx_packets, |
8391 | 16 | { "Tx packets", "openflow_v5.port_stats.tx_packets", |
8392 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8393 | 16 | NULL, HFILL } |
8394 | 16 | }, |
8395 | 16 | { &hf_openflow_v5_port_stats_rx_bytes, |
8396 | 16 | { "Rx bytes", "openflow_v5.port_stats.rx_bytes", |
8397 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8398 | 16 | NULL, HFILL } |
8399 | 16 | }, |
8400 | 16 | { &hf_openflow_v5_port_stats_tx_bytes, |
8401 | 16 | { "Tx bytes", "openflow_v5.port_stats.tx_bytes", |
8402 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8403 | 16 | NULL, HFILL } |
8404 | 16 | }, |
8405 | 16 | { &hf_openflow_v5_port_stats_rx_dropped, |
8406 | 16 | { "Rx dropped", "openflow_v5.port_stats.rx_dropped", |
8407 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8408 | 16 | NULL, HFILL } |
8409 | 16 | }, |
8410 | 16 | { &hf_openflow_v5_port_stats_tx_dropped, |
8411 | 16 | { "Tx dropped", "openflow_v5.port_stats.tx_dropped", |
8412 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8413 | 16 | NULL, HFILL } |
8414 | 16 | }, |
8415 | 16 | { &hf_openflow_v5_port_stats_rx_errors, |
8416 | 16 | { "Rx errors", "openflow_v5.port_stats.rx_errors", |
8417 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8418 | 16 | NULL, HFILL } |
8419 | 16 | }, |
8420 | 16 | { &hf_openflow_v5_port_stats_tx_errors, |
8421 | 16 | { "Tx errors", "openflow_v5.port_stats.tx_errors", |
8422 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8423 | 16 | NULL, HFILL } |
8424 | 16 | }, |
8425 | 16 | { &hf_openflow_v5_queue_stats_length, |
8426 | 16 | { "Length", "openflow_v5.queue_stats.length", |
8427 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8428 | 16 | NULL, HFILL } |
8429 | 16 | }, |
8430 | 16 | { &hf_openflow_v5_queue_stats_pad, |
8431 | 16 | { "Pad", "openflow_v5.queue_stats.pad", |
8432 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8433 | 16 | NULL, HFILL } |
8434 | 16 | }, |
8435 | 16 | { &hf_openflow_v5_queue_stats_port_no, |
8436 | 16 | { "Port number", "openflow_v5.queue_stats.port_no", |
8437 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
8438 | 16 | NULL, HFILL } |
8439 | 16 | }, |
8440 | 16 | { &hf_openflow_v5_queue_stats_queue_id, |
8441 | 16 | { "Queue ID", "openflow_v5.queue_stats.queue_id", |
8442 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_queue_reserved_values), 0x0, |
8443 | 16 | NULL, HFILL } |
8444 | 16 | }, |
8445 | 16 | { &hf_openflow_v5_queue_stats_tx_bytes, |
8446 | 16 | { "Tx bytes", "openflow_v5.queue_stats.tx_bytes", |
8447 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8448 | 16 | NULL, HFILL } |
8449 | 16 | }, |
8450 | 16 | { &hf_openflow_v5_queue_stats_tx_packets, |
8451 | 16 | { "Tx packets", "openflow_v5.quee_stats.tx_packets", |
8452 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8453 | 16 | NULL, HFILL } |
8454 | 16 | }, |
8455 | 16 | { &hf_openflow_v5_queue_stats_tx_errors, |
8456 | 16 | { "Tx errors", "openflow_v5.port_stats.tx_errors", |
8457 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8458 | 16 | NULL, HFILL } |
8459 | 16 | }, |
8460 | 16 | { &hf_openflow_v5_queue_stats_duration_sec, |
8461 | 16 | { "Duration sec", "openflow_v5.queue_stats.duration_sec", |
8462 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8463 | 16 | NULL, HFILL } |
8464 | 16 | }, |
8465 | 16 | { &hf_openflow_v5_queue_stats_duration_nsec, |
8466 | 16 | { "Duration nsec", "openflow_v5.queue_stats.duration_nsec", |
8467 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8468 | 16 | NULL, HFILL } |
8469 | 16 | }, |
8470 | 16 | { &hf_openflow_v5_queue_stats_prop_type, |
8471 | 16 | { "Type", "openflow_v5.queue_stats_prop.type", |
8472 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_queue_stats_prop_type_values), 0x0, |
8473 | 16 | NULL, HFILL } |
8474 | 16 | }, |
8475 | 16 | { &hf_openflow_v5_queue_stats_prop_length, |
8476 | 16 | { "Length", "openflow_v5.queue_stats_prop.length", |
8477 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8478 | 16 | NULL, HFILL } |
8479 | 16 | }, |
8480 | 16 | { &hf_openflow_v5_queue_stats_prop_experimenter_experimenter, |
8481 | 16 | { "Experimenter", "openflow_v5.queue_stats_prop.experimenter.experimenter", |
8482 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8483 | 16 | NULL, HFILL } |
8484 | 16 | }, |
8485 | 16 | { &hf_openflow_v5_queue_stats_prop_experimenter_exp_type, |
8486 | 16 | { "Experimenter type", "openflow_v5.queue_stats_prop.experimenter.exp_type", |
8487 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8488 | 16 | NULL, HFILL } |
8489 | 16 | }, |
8490 | 16 | { &hf_openflow_v5_bucket_counter_packet_count, |
8491 | 16 | { "Packet count", "openflow_v5.bucket_counter.packet_count", |
8492 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8493 | 16 | NULL, HFILL } |
8494 | 16 | }, |
8495 | 16 | { &hf_openflow_v5_bucket_counter_byte_count, |
8496 | 16 | { "Byte count", "openflow_v5.bucket_counter.byte_count", |
8497 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8498 | 16 | NULL, HFILL } |
8499 | 16 | }, |
8500 | 16 | { &hf_openflow_v5_group_stats_length, |
8501 | 16 | { "Length", "openflow_v5.group_stats.length", |
8502 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8503 | 16 | NULL, HFILL } |
8504 | 16 | }, |
8505 | 16 | { &hf_openflow_v5_group_stats_pad, |
8506 | 16 | { "Pad", "openflow_v5.group_stats.pad", |
8507 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8508 | 16 | NULL, HFILL } |
8509 | 16 | }, |
8510 | 16 | { &hf_openflow_v5_group_stats_group_id, |
8511 | 16 | { "Group ID", "openflow_v5.group_stats.group_id", |
8512 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
8513 | 16 | NULL, HFILL } |
8514 | 16 | }, |
8515 | 16 | { &hf_openflow_v5_group_stats_ref_count, |
8516 | 16 | { "Ref. count", "openflow_v5.group_stats.ref_count", |
8517 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8518 | 16 | NULL, HFILL } |
8519 | 16 | }, |
8520 | 16 | { &hf_openflow_v5_group_stats_pad2, |
8521 | 16 | { "Pad", "openflow_v5.group_stats.pad2", |
8522 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8523 | 16 | NULL, HFILL } |
8524 | 16 | }, |
8525 | 16 | { &hf_openflow_v5_group_stats_packet_count, |
8526 | 16 | { "Packet count", "openflow_v5.group_stats.packet_count", |
8527 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8528 | 16 | NULL, HFILL } |
8529 | 16 | }, |
8530 | 16 | { &hf_openflow_v5_group_stats_byte_count, |
8531 | 16 | { "Byte count", "openflow_v5.group_stats.byte_count", |
8532 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8533 | 16 | NULL, HFILL } |
8534 | 16 | }, |
8535 | 16 | { &hf_openflow_v5_group_desc_length, |
8536 | 16 | { "Length", "openflow_v5.group_desc.length", |
8537 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8538 | 16 | NULL, HFILL } |
8539 | 16 | }, |
8540 | 16 | { &hf_openflow_v5_group_desc_type, |
8541 | 16 | { "Type", "openflow_v5.group_desc.type", |
8542 | 16 | FT_UINT8, BASE_DEC, VALS(openflow_v5_group_type_values), 0x0, |
8543 | 16 | NULL, HFILL } |
8544 | 16 | }, |
8545 | 16 | { &hf_openflow_v5_group_desc_pad, |
8546 | 16 | { "Pad", "openflow_v5.group_desc.pad2", |
8547 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8548 | 16 | NULL, HFILL } |
8549 | 16 | }, |
8550 | 16 | { &hf_openflow_v5_group_desc_group_id, |
8551 | 16 | { "Group ID", "openflow_v5.group_desc.group_id", |
8552 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_group_reserved_values), 0x0, |
8553 | 16 | NULL, HFILL } |
8554 | 16 | }, |
8555 | 16 | { &hf_openflow_v5_group_features_types, |
8556 | 16 | { "Types", "openflow_v5.group_features.types", |
8557 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8558 | 16 | NULL, HFILL } |
8559 | 16 | }, |
8560 | 16 | { &hf_openflow_v5_group_features_types_all, |
8561 | 16 | { "OFPGT_ALL", "openflow_v5.group_features.types.all", |
8562 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPGT_ALL, |
8563 | 16 | NULL, HFILL } |
8564 | 16 | }, |
8565 | 16 | { &hf_openflow_v5_group_features_types_select, |
8566 | 16 | { "OFPGT_SELECT", "openflow_v5.group_features.types.select", |
8567 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPGT_SELECT, |
8568 | 16 | NULL, HFILL } |
8569 | 16 | }, |
8570 | 16 | { &hf_openflow_v5_group_features_types_indirect, |
8571 | 16 | { "OFPGT_INDIRECT", "openflow_v5.group_features.types.indirect", |
8572 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPGT_INDIRECT, |
8573 | 16 | NULL, HFILL } |
8574 | 16 | }, |
8575 | 16 | { &hf_openflow_v5_group_features_types_ff, |
8576 | 16 | { "OFPGT_FF", "openflow_v5.group_features.types.ff", |
8577 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPGT_FF, |
8578 | 16 | NULL, HFILL } |
8579 | 16 | }, |
8580 | 16 | { &hf_openflow_v5_group_features_capabilities, |
8581 | 16 | { "Capabilities", "openflow_v5.group_features.capabilities", |
8582 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8583 | 16 | NULL, HFILL } |
8584 | 16 | }, |
8585 | 16 | { &hf_openflow_v5_group_features_capabilities_select_weight, |
8586 | 16 | { "OFPGFC_SELECT_WEIGHT", "openflow_v5.group_features.capabilities.select_weight", |
8587 | 16 | FT_BOOLEAN, 32, NULL, OFPGFC_SELECT_WEIGHT, |
8588 | 16 | NULL, HFILL } |
8589 | 16 | }, |
8590 | 16 | { &hf_openflow_v5_group_features_capabilities_select_liveness, |
8591 | 16 | { "OFPGFC_SELECT_LIVENESS", "openflow_v5.group_features.capabilities.select_liveness", |
8592 | 16 | FT_BOOLEAN, 32, NULL, OFPGFC_SELECT_LIVENESS, |
8593 | 16 | NULL, HFILL } |
8594 | 16 | }, |
8595 | 16 | { &hf_openflow_v5_group_features_capabilities_chaining, |
8596 | 16 | { "OFPGFC_CHAINING", "openflow_v5.group_features.capabilities.chaining", |
8597 | 16 | FT_BOOLEAN, 32, NULL, OFPGFC_CHAINING, |
8598 | 16 | NULL, HFILL } |
8599 | 16 | }, |
8600 | 16 | { &hf_openflow_v5_group_features_capabilities_chaining_checks, |
8601 | 16 | { "OFPGFC_CHAINING_CHECKS", "openflow_v5.group_features.capabilities.chaining_checks", |
8602 | 16 | FT_BOOLEAN, 32, NULL, OFPGFC_CHAINING_CHECKS, |
8603 | 16 | NULL, HFILL } |
8604 | 16 | }, |
8605 | 16 | { &hf_openflow_v5_group_features_max_groups_all, |
8606 | 16 | { "Max groups (all)", "openflow_v5.group_stats.max_groups.all", |
8607 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8608 | 16 | NULL, HFILL } |
8609 | 16 | }, |
8610 | 16 | { &hf_openflow_v5_group_features_max_groups_select, |
8611 | 16 | { "Max groups (select)", "openflow_v5.group_stats.max_groups.select", |
8612 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8613 | 16 | NULL, HFILL } |
8614 | 16 | }, |
8615 | 16 | { &hf_openflow_v5_group_features_max_groups_indirect, |
8616 | 16 | { "Max groups (indirect)", "openflow_v5.group_stats.max_groups.indirect", |
8617 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8618 | 16 | NULL, HFILL } |
8619 | 16 | }, |
8620 | 16 | { &hf_openflow_v5_group_features_max_groups_ff, |
8621 | 16 | { "Max groups (ff)", "openflow_v5.group_stats.max_groups.ff", |
8622 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8623 | 16 | NULL, HFILL } |
8624 | 16 | }, |
8625 | 16 | { &hf_openflow_v5_group_features_actions_all, |
8626 | 16 | { "Actions (all)", "openflow_v5.group_features.actions.all", |
8627 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8628 | 16 | NULL, HFILL } |
8629 | 16 | }, |
8630 | 16 | { &hf_openflow_v5_group_features_actions_all_output, |
8631 | 16 | { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.all.output", |
8632 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_OUTPUT, |
8633 | 16 | NULL, HFILL } |
8634 | 16 | }, |
8635 | 16 | { &hf_openflow_v5_group_features_actions_all_copy_ttl_out, |
8636 | 16 | { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.all.copy_ttl_out", |
8637 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_OUT, |
8638 | 16 | NULL, HFILL } |
8639 | 16 | }, |
8640 | 16 | { &hf_openflow_v5_group_features_actions_all_copy_ttl_in, |
8641 | 16 | { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.all.copy_ttl_in", |
8642 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_IN, |
8643 | 16 | NULL, HFILL } |
8644 | 16 | }, |
8645 | 16 | { &hf_openflow_v5_group_features_actions_all_set_mpls_ttl, |
8646 | 16 | { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.all.set_mpls_ttl", |
8647 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_MPLS_TTL, |
8648 | 16 | NULL, HFILL } |
8649 | 16 | }, |
8650 | 16 | { &hf_openflow_v5_group_features_actions_all_dec_mpls_ttl, |
8651 | 16 | { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.all.dec_mpls_ttl", |
8652 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_MPLS_TTL, |
8653 | 16 | NULL, HFILL } |
8654 | 16 | }, |
8655 | 16 | { &hf_openflow_v5_group_features_actions_all_push_vlan, |
8656 | 16 | { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.all.push_vlan", |
8657 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_VLAN, |
8658 | 16 | NULL, HFILL } |
8659 | 16 | }, |
8660 | 16 | { &hf_openflow_v5_group_features_actions_all_pop_vlan, |
8661 | 16 | { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.all.pop_vlan", |
8662 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_VLAN, |
8663 | 16 | NULL, HFILL } |
8664 | 16 | }, |
8665 | 16 | { &hf_openflow_v5_group_features_actions_all_push_mpls, |
8666 | 16 | { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.all.push_mpls", |
8667 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_MPLS, |
8668 | 16 | NULL, HFILL } |
8669 | 16 | }, |
8670 | 16 | { &hf_openflow_v5_group_features_actions_all_pop_mpls, |
8671 | 16 | { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.all.pop_mpls", |
8672 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_MPLS, |
8673 | 16 | NULL, HFILL } |
8674 | 16 | }, |
8675 | 16 | { &hf_openflow_v5_group_features_actions_all_set_queue, |
8676 | 16 | { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.all.set_queue", |
8677 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_QUEUE, |
8678 | 16 | NULL, HFILL } |
8679 | 16 | }, |
8680 | 16 | { &hf_openflow_v5_group_features_actions_all_group, |
8681 | 16 | { "OFPAT_GROUP", "openflow_v5.group_features.actions.all.group", |
8682 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_GROUP, |
8683 | 16 | NULL, HFILL } |
8684 | 16 | }, |
8685 | 16 | { &hf_openflow_v5_group_features_actions_all_set_nw_ttl, |
8686 | 16 | { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.all.set_nw_ttl", |
8687 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_NW_TTL, |
8688 | 16 | NULL, HFILL } |
8689 | 16 | }, |
8690 | 16 | { &hf_openflow_v5_group_features_actions_all_dec_nw_ttl, |
8691 | 16 | { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.all.dec_nw_ttl", |
8692 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_NW_TTL, |
8693 | 16 | NULL, HFILL } |
8694 | 16 | }, |
8695 | 16 | { &hf_openflow_v5_group_features_actions_all_set_field, |
8696 | 16 | { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.all.set_field", |
8697 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_FIELD, |
8698 | 16 | NULL, HFILL } |
8699 | 16 | }, |
8700 | 16 | { &hf_openflow_v5_group_features_actions_all_push_pbb, |
8701 | 16 | { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.all.push_pbb", |
8702 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_PBB, |
8703 | 16 | NULL, HFILL } |
8704 | 16 | }, |
8705 | 16 | { &hf_openflow_v5_group_features_actions_all_pop_pbb, |
8706 | 16 | { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.all.pop_pbb", |
8707 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_PBB, |
8708 | 16 | NULL, HFILL } |
8709 | 16 | }, |
8710 | 16 | { &hf_openflow_v5_group_features_actions_select, |
8711 | 16 | { "Actions (select)", "openflow_v5.group_features.actions.select", |
8712 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8713 | 16 | NULL, HFILL } |
8714 | 16 | }, |
8715 | 16 | { &hf_openflow_v5_group_features_actions_select_output, |
8716 | 16 | { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.select.output", |
8717 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_OUTPUT, |
8718 | 16 | NULL, HFILL } |
8719 | 16 | }, |
8720 | 16 | { &hf_openflow_v5_group_features_actions_select_copy_ttl_out, |
8721 | 16 | { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.select.copy_ttl_out", |
8722 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_OUT, |
8723 | 16 | NULL, HFILL } |
8724 | 16 | }, |
8725 | 16 | { &hf_openflow_v5_group_features_actions_select_copy_ttl_in, |
8726 | 16 | { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.select.copy_ttl_in", |
8727 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_IN, |
8728 | 16 | NULL, HFILL } |
8729 | 16 | }, |
8730 | 16 | { &hf_openflow_v5_group_features_actions_select_set_mpls_ttl, |
8731 | 16 | { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.select.set_mpls_ttl", |
8732 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_MPLS_TTL, |
8733 | 16 | NULL, HFILL } |
8734 | 16 | }, |
8735 | 16 | { &hf_openflow_v5_group_features_actions_select_dec_mpls_ttl, |
8736 | 16 | { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.select.dec_mpls_ttl", |
8737 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_MPLS_TTL, |
8738 | 16 | NULL, HFILL } |
8739 | 16 | }, |
8740 | 16 | { &hf_openflow_v5_group_features_actions_select_push_vlan, |
8741 | 16 | { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.select.push_vlan", |
8742 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_VLAN, |
8743 | 16 | NULL, HFILL } |
8744 | 16 | }, |
8745 | 16 | { &hf_openflow_v5_group_features_actions_select_pop_vlan, |
8746 | 16 | { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.select.pop_vlan", |
8747 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_VLAN, |
8748 | 16 | NULL, HFILL } |
8749 | 16 | }, |
8750 | 16 | { &hf_openflow_v5_group_features_actions_select_push_mpls, |
8751 | 16 | { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.select.push_mpls", |
8752 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_MPLS, |
8753 | 16 | NULL, HFILL } |
8754 | 16 | }, |
8755 | 16 | { &hf_openflow_v5_group_features_actions_select_pop_mpls, |
8756 | 16 | { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.select.pop_mpls", |
8757 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_MPLS, |
8758 | 16 | NULL, HFILL } |
8759 | 16 | }, |
8760 | 16 | { &hf_openflow_v5_group_features_actions_select_set_queue, |
8761 | 16 | { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.select.set_queue", |
8762 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_QUEUE, |
8763 | 16 | NULL, HFILL } |
8764 | 16 | }, |
8765 | 16 | { &hf_openflow_v5_group_features_actions_select_group, |
8766 | 16 | { "OFPAT_GROUP", "openflow_v5.group_features.actions.select.group", |
8767 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_GROUP, |
8768 | 16 | NULL, HFILL } |
8769 | 16 | }, |
8770 | 16 | { &hf_openflow_v5_group_features_actions_select_set_nw_ttl, |
8771 | 16 | { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.select.set_nw_ttl", |
8772 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_NW_TTL, |
8773 | 16 | NULL, HFILL } |
8774 | 16 | }, |
8775 | 16 | { &hf_openflow_v5_group_features_actions_select_dec_nw_ttl, |
8776 | 16 | { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.select.dec_nw_ttl", |
8777 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_NW_TTL, |
8778 | 16 | NULL, HFILL } |
8779 | 16 | }, |
8780 | 16 | { &hf_openflow_v5_group_features_actions_select_set_field, |
8781 | 16 | { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.select.set_field", |
8782 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_FIELD, |
8783 | 16 | NULL, HFILL } |
8784 | 16 | }, |
8785 | 16 | { &hf_openflow_v5_group_features_actions_select_push_pbb, |
8786 | 16 | { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.select.push_pbb", |
8787 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_PBB, |
8788 | 16 | NULL, HFILL } |
8789 | 16 | }, |
8790 | 16 | { &hf_openflow_v5_group_features_actions_select_pop_pbb, |
8791 | 16 | { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.select.pop_pbb", |
8792 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_PBB, |
8793 | 16 | NULL, HFILL } |
8794 | 16 | }, |
8795 | 16 | { &hf_openflow_v5_group_features_actions_indirect, |
8796 | 16 | { "Actions (indirect)", "openflow_v5.group_features.actions.indirect", |
8797 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8798 | 16 | NULL, HFILL } |
8799 | 16 | }, |
8800 | 16 | { &hf_openflow_v5_group_features_actions_indirect_output, |
8801 | 16 | { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.indirect.output", |
8802 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_OUTPUT, |
8803 | 16 | NULL, HFILL } |
8804 | 16 | }, |
8805 | 16 | { &hf_openflow_v5_group_features_actions_indirect_copy_ttl_out, |
8806 | 16 | { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.indirect.copy_ttl_out", |
8807 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_OUT, |
8808 | 16 | NULL, HFILL } |
8809 | 16 | }, |
8810 | 16 | { &hf_openflow_v5_group_features_actions_indirect_copy_ttl_in, |
8811 | 16 | { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.indirect.copy_ttl_in", |
8812 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_IN, |
8813 | 16 | NULL, HFILL } |
8814 | 16 | }, |
8815 | 16 | { &hf_openflow_v5_group_features_actions_indirect_set_mpls_ttl, |
8816 | 16 | { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.indirect.set_mpls_ttl", |
8817 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_MPLS_TTL, |
8818 | 16 | NULL, HFILL } |
8819 | 16 | }, |
8820 | 16 | { &hf_openflow_v5_group_features_actions_indirect_dec_mpls_ttl, |
8821 | 16 | { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.indirect.dec_mpls_ttl", |
8822 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_MPLS_TTL, |
8823 | 16 | NULL, HFILL } |
8824 | 16 | }, |
8825 | 16 | { &hf_openflow_v5_group_features_actions_indirect_push_vlan, |
8826 | 16 | { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.indirect.push_vlan", |
8827 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_VLAN, |
8828 | 16 | NULL, HFILL } |
8829 | 16 | }, |
8830 | 16 | { &hf_openflow_v5_group_features_actions_indirect_pop_vlan, |
8831 | 16 | { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.indirect.pop_vlan", |
8832 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_VLAN, |
8833 | 16 | NULL, HFILL } |
8834 | 16 | }, |
8835 | 16 | { &hf_openflow_v5_group_features_actions_indirect_push_mpls, |
8836 | 16 | { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.indirect.push_mpls", |
8837 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_MPLS, |
8838 | 16 | NULL, HFILL } |
8839 | 16 | }, |
8840 | 16 | { &hf_openflow_v5_group_features_actions_indirect_pop_mpls, |
8841 | 16 | { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.indirect.pop_mpls", |
8842 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_MPLS, |
8843 | 16 | NULL, HFILL } |
8844 | 16 | }, |
8845 | 16 | { &hf_openflow_v5_group_features_actions_indirect_set_queue, |
8846 | 16 | { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.indirect.set_queue", |
8847 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_QUEUE, |
8848 | 16 | NULL, HFILL } |
8849 | 16 | }, |
8850 | 16 | { &hf_openflow_v5_group_features_actions_indirect_group, |
8851 | 16 | { "OFPAT_GROUP", "openflow_v5.group_features.actions.indirect.group", |
8852 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_GROUP, |
8853 | 16 | NULL, HFILL } |
8854 | 16 | }, |
8855 | 16 | { &hf_openflow_v5_group_features_actions_indirect_set_nw_ttl, |
8856 | 16 | { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.indirect.set_nw_ttl", |
8857 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_NW_TTL, |
8858 | 16 | NULL, HFILL } |
8859 | 16 | }, |
8860 | 16 | { &hf_openflow_v5_group_features_actions_indirect_dec_nw_ttl, |
8861 | 16 | { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.indirect.dec_nw_ttl", |
8862 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_NW_TTL, |
8863 | 16 | NULL, HFILL } |
8864 | 16 | }, |
8865 | 16 | { &hf_openflow_v5_group_features_actions_indirect_set_field, |
8866 | 16 | { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.indirect.set_field", |
8867 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_FIELD, |
8868 | 16 | NULL, HFILL } |
8869 | 16 | }, |
8870 | 16 | { &hf_openflow_v5_group_features_actions_indirect_push_pbb, |
8871 | 16 | { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.indirect.push_pbb", |
8872 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_PBB, |
8873 | 16 | NULL, HFILL } |
8874 | 16 | }, |
8875 | 16 | { &hf_openflow_v5_group_features_actions_indirect_pop_pbb, |
8876 | 16 | { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.indirect.pop_pbb", |
8877 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_PBB, |
8878 | 16 | NULL, HFILL } |
8879 | 16 | }, |
8880 | 16 | { &hf_openflow_v5_group_features_actions_ff, |
8881 | 16 | { "Actions (ff)", "openflow_v5.group_features.actions.ff", |
8882 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
8883 | 16 | NULL, HFILL } |
8884 | 16 | }, |
8885 | 16 | { &hf_openflow_v5_group_features_actions_ff_output, |
8886 | 16 | { "OFPAT_OUTPUT", "openflow_v5.group_features.actions.ff.output", |
8887 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_OUTPUT, |
8888 | 16 | NULL, HFILL } |
8889 | 16 | }, |
8890 | 16 | { &hf_openflow_v5_group_features_actions_ff_copy_ttl_out, |
8891 | 16 | { "OFPAT_COPY_TTL_OUT", "openflow_v5.group_features.actions.ff.copy_ttl_out", |
8892 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_OUT, |
8893 | 16 | NULL, HFILL } |
8894 | 16 | }, |
8895 | 16 | { &hf_openflow_v5_group_features_actions_ff_copy_ttl_in, |
8896 | 16 | { "OFPAT_COPY_TTL_IN", "openflow_v5.group_features.actions.ff.copy_ttl_in", |
8897 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_COPY_TTL_IN, |
8898 | 16 | NULL, HFILL } |
8899 | 16 | }, |
8900 | 16 | { &hf_openflow_v5_group_features_actions_ff_set_mpls_ttl, |
8901 | 16 | { "OFPAT_SET_MPLS_TTL", "openflow_v5.group_features.actions.ff.set_mpls_ttl", |
8902 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_MPLS_TTL, |
8903 | 16 | NULL, HFILL } |
8904 | 16 | }, |
8905 | 16 | { &hf_openflow_v5_group_features_actions_ff_dec_mpls_ttl, |
8906 | 16 | { "OFPAT_DEC_MPLS_TTL", "openflow_v5.group_features.actions.ff.dec_mpls_ttl", |
8907 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_MPLS_TTL, |
8908 | 16 | NULL, HFILL } |
8909 | 16 | }, |
8910 | 16 | { &hf_openflow_v5_group_features_actions_ff_push_vlan, |
8911 | 16 | { "OFPAT_PUSH_VLAN", "openflow_v5.group_features.actions.ff.push_vlan", |
8912 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_VLAN, |
8913 | 16 | NULL, HFILL } |
8914 | 16 | }, |
8915 | 16 | { &hf_openflow_v5_group_features_actions_ff_pop_vlan, |
8916 | 16 | { "OFPAT_POP_VLAN", "openflow_v5.group_features.actions.ff.pop_vlan", |
8917 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_VLAN, |
8918 | 16 | NULL, HFILL } |
8919 | 16 | }, |
8920 | 16 | { &hf_openflow_v5_group_features_actions_ff_push_mpls, |
8921 | 16 | { "OFPAT_PUSH_MPLS", "openflow_v5.group_features.actions.ff.push_mpls", |
8922 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_MPLS, |
8923 | 16 | NULL, HFILL } |
8924 | 16 | }, |
8925 | 16 | { &hf_openflow_v5_group_features_actions_ff_pop_mpls, |
8926 | 16 | { "OFPAT_POP_MPLS", "openflow_v5.group_features.actions.ff.pop_mpls", |
8927 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_MPLS, |
8928 | 16 | NULL, HFILL } |
8929 | 16 | }, |
8930 | 16 | { &hf_openflow_v5_group_features_actions_ff_set_queue, |
8931 | 16 | { "OFPAT_SET_QUEUE", "openflow_v5.group_features.actions.ff.set_queue", |
8932 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_QUEUE, |
8933 | 16 | NULL, HFILL } |
8934 | 16 | }, |
8935 | 16 | { &hf_openflow_v5_group_features_actions_ff_group, |
8936 | 16 | { "OFPAT_GROUP", "openflow_v5.group_features.actions.ff.group", |
8937 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_GROUP, |
8938 | 16 | NULL, HFILL } |
8939 | 16 | }, |
8940 | 16 | { &hf_openflow_v5_group_features_actions_ff_set_nw_ttl, |
8941 | 16 | { "OFPAT_SET_NW_TTL", "openflow_v5.group_features.actions.ff.set_nw_ttl", |
8942 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_NW_TTL, |
8943 | 16 | NULL, HFILL } |
8944 | 16 | }, |
8945 | 16 | { &hf_openflow_v5_group_features_actions_ff_dec_nw_ttl, |
8946 | 16 | { "OFPAT_DEC_NW_TTL", "openflow_v5.group_features.actions.ff.dec_nw_ttl", |
8947 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_DEC_NW_TTL, |
8948 | 16 | NULL, HFILL } |
8949 | 16 | }, |
8950 | 16 | { &hf_openflow_v5_group_features_actions_ff_set_field, |
8951 | 16 | { "OFPAT_SET_FIELD", "openflow_v5.group_features.actions.ff.set_field", |
8952 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_SET_FIELD, |
8953 | 16 | NULL, HFILL } |
8954 | 16 | }, |
8955 | 16 | { &hf_openflow_v5_group_features_actions_ff_push_pbb, |
8956 | 16 | { "OFPAT_PUSH_PBB", "openflow_v5.group_features.actions.ff.push_pbb", |
8957 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_PUSH_PBB, |
8958 | 16 | NULL, HFILL } |
8959 | 16 | }, |
8960 | 16 | { &hf_openflow_v5_group_features_actions_ff_pop_pbb, |
8961 | 16 | { "OFPAT_POP_PBB", "openflow_v5.group_features.actions.ff.pop_pbb", |
8962 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPAT_POP_PBB, |
8963 | 16 | NULL, HFILL } |
8964 | 16 | }, |
8965 | 16 | { &hf_openflow_v5_meter_band_stats_packet_band_count, |
8966 | 16 | { "Packet count", "openflow_v5.meter_band_stats.packet_band_count", |
8967 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8968 | 16 | NULL, HFILL } |
8969 | 16 | }, |
8970 | 16 | { &hf_openflow_v5_meter_band_stats_byte_band_count, |
8971 | 16 | { "Byte count", "openflow_v5.meter_band_stats.byte_band_count", |
8972 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8973 | 16 | NULL, HFILL } |
8974 | 16 | }, |
8975 | 16 | { &hf_openflow_v5_meter_stats_meter_id, |
8976 | 16 | { "Meter ID", "openflow_v5.meter_stats.meter_id", |
8977 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_meter_id_reserved_values), 0x0, |
8978 | 16 | NULL, HFILL } |
8979 | 16 | }, |
8980 | 16 | { &hf_openflow_v5_meter_stats_len, |
8981 | 16 | { "Length", "openflow_v5.meter_stats.length", |
8982 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
8983 | 16 | NULL, HFILL } |
8984 | 16 | }, |
8985 | 16 | { &hf_openflow_v5_meter_stats_pad, |
8986 | 16 | { "Pad", "openflow_v5.meter_stats.pad", |
8987 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
8988 | 16 | NULL, HFILL } |
8989 | 16 | }, |
8990 | 16 | { &hf_openflow_v5_meter_stats_flow_count, |
8991 | 16 | { "Flow count", "openflow_v5.meter_stats.flow_count", |
8992 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
8993 | 16 | NULL, HFILL } |
8994 | 16 | }, |
8995 | 16 | { &hf_openflow_v5_meter_stats_packet_in_count, |
8996 | 16 | { "Packet in count", "openflow_v5.meter_stats.packet_in_count", |
8997 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
8998 | 16 | NULL, HFILL } |
8999 | 16 | }, |
9000 | 16 | { &hf_openflow_v5_meter_stats_byte_in_count, |
9001 | 16 | { "Byte in count", "openflow_v5.meter_stats.byte_in_count", |
9002 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
9003 | 16 | NULL, HFILL } |
9004 | 16 | }, |
9005 | 16 | { &hf_openflow_v5_meter_stats_duration_sec, |
9006 | 16 | { "Duration sec", "openflow_v5.meter_stats.duration_sec", |
9007 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9008 | 16 | NULL, HFILL } |
9009 | 16 | }, |
9010 | 16 | { &hf_openflow_v5_meter_stats_duration_nsec, |
9011 | 16 | { "Duration nsec", "openflow_v5.meter_stats.duration_nsec", |
9012 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9013 | 16 | NULL, HFILL } |
9014 | 16 | }, |
9015 | 16 | { &hf_openflow_v5_meter_config_len, |
9016 | 16 | { "Length", "openflow_v5.meter_config.len", |
9017 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9018 | 16 | NULL, HFILL } |
9019 | 16 | }, |
9020 | 16 | { &hf_openflow_v5_meter_config_flags, |
9021 | 16 | { "Flags", "openflow_v5.meter_config.flags", |
9022 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9023 | 16 | NULL, HFILL } |
9024 | 16 | }, |
9025 | 16 | { &hf_openflow_v5_meter_config_flags_kbps, |
9026 | 16 | { "OFPMF_KBPS", "openflow_v5.meter_config.flags.kbps", |
9027 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_KBPS, |
9028 | 16 | NULL, HFILL } |
9029 | 16 | }, |
9030 | 16 | { &hf_openflow_v5_meter_config_flags_pktps, |
9031 | 16 | { "OFPMF_PKTPS", "openflow_v5.meter_config.flags.ptkps", |
9032 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_PKTPS, |
9033 | 16 | NULL, HFILL } |
9034 | 16 | }, |
9035 | 16 | { &hf_openflow_v5_meter_config_flags_burst, |
9036 | 16 | { "OFPMF_BURST", "openflow_v5.meter_config.flags.burst", |
9037 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_BURST, |
9038 | 16 | NULL, HFILL } |
9039 | 16 | }, |
9040 | 16 | { &hf_openflow_v5_meter_config_flags_stats, |
9041 | 16 | { "OFPMF_STATS", "openflow_v5.meter_config.flags.stats", |
9042 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_STATS, |
9043 | 16 | NULL, HFILL } |
9044 | 16 | }, |
9045 | 16 | { &hf_openflow_v5_meter_config_meter_id, |
9046 | 16 | { "Meter ID", "openflow_v5.meter_config.meter_id", |
9047 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_meter_id_reserved_values), 0x0, |
9048 | 16 | NULL, HFILL } |
9049 | 16 | }, |
9050 | 16 | { &hf_openflow_v5_meter_features_max_meter, |
9051 | 16 | { "Max meters", "openflow_v5.meter_features.max_meter", |
9052 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9053 | 16 | NULL, HFILL } |
9054 | 16 | }, |
9055 | 16 | { &hf_openflow_v5_meter_features_band_types, |
9056 | 16 | { "Band types", "openflow_v5.features.band_types", |
9057 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9058 | 16 | NULL, HFILL } |
9059 | 16 | }, |
9060 | 16 | { &hf_openflow_v5_meter_features_band_types_drop, |
9061 | 16 | { "OFPMBT_DROP", "openflow_v5.meter_features.band_types.drop", |
9062 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPMBT_DROP, |
9063 | 16 | NULL, HFILL } |
9064 | 16 | }, |
9065 | 16 | { &hf_openflow_v5_meter_features_band_types_dscp_remark, |
9066 | 16 | { "OFPMBT_DSCP_REMARK", "openflow_v5.meter_features.band_types.dscp_remark", |
9067 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPMBT_DSCP_REMARK, |
9068 | 16 | NULL, HFILL } |
9069 | 16 | }, |
9070 | 16 | { &hf_openflow_v5_meter_features_capabilities, |
9071 | 16 | { "Capabilities", "openflow_v5.meter_features.capabilities", |
9072 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9073 | 16 | NULL, HFILL } |
9074 | 16 | }, |
9075 | 16 | { &hf_openflow_v5_meter_features_capabilities_kbps, |
9076 | 16 | { "OFPMF_KBPS", "openflow_v5.meter_features.capabilities.kbps", |
9077 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_KBPS, |
9078 | 16 | NULL, HFILL } |
9079 | 16 | }, |
9080 | 16 | { &hf_openflow_v5_meter_features_capabilities_pktps, |
9081 | 16 | { "OFPMF_PKTPS", "openflow_v5.meter_features.capabilities.ptkps", |
9082 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_PKTPS, |
9083 | 16 | NULL, HFILL } |
9084 | 16 | }, |
9085 | 16 | { &hf_openflow_v5_meter_features_capabilities_burst, |
9086 | 16 | { "OFPMF_BURST", "openflow_v5.meter_features.capabilities.burst", |
9087 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_BURST, |
9088 | 16 | NULL, HFILL } |
9089 | 16 | }, |
9090 | 16 | { &hf_openflow_v5_meter_features_capabilities_stats, |
9091 | 16 | { "OFPMF_STATS", "openflow_v5.meter_features.capabilities.stats", |
9092 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_STATS, |
9093 | 16 | NULL, HFILL } |
9094 | 16 | }, |
9095 | 16 | { &hf_openflow_v5_meter_features_max_bands, |
9096 | 16 | { "Max bands", "openflow_v5.meter_features.max_bands", |
9097 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
9098 | 16 | NULL, HFILL } |
9099 | 16 | }, |
9100 | 16 | { &hf_openflow_v5_meter_features_max_color, |
9101 | 16 | { "Max colors", "openflow_v5.meter_features.max_color", |
9102 | 16 | FT_UINT8, BASE_DEC, NULL, 0x0, |
9103 | 16 | NULL, HFILL } |
9104 | 16 | }, |
9105 | 16 | { &hf_openflow_v5_meter_features_pad, |
9106 | 16 | { "Pad", "openflow_v5.meter_features.pad", |
9107 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9108 | 16 | NULL, HFILL } |
9109 | 16 | }, |
9110 | 16 | { &hf_openflow_v5_flow_update_length, |
9111 | 16 | { "Length", "openflow_v5.flow_update.length", |
9112 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9113 | 16 | NULL, HFILL } |
9114 | 16 | }, |
9115 | 16 | { &hf_openflow_v5_flow_update_event, |
9116 | 16 | { "Length", "openflow_v5.flow_update.event", |
9117 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_flow_monitor_events), 0x0, |
9118 | 16 | NULL, HFILL } |
9119 | 16 | }, |
9120 | 16 | { &hf_openflow_v5_flow_update_full_table_id, |
9121 | 16 | { "Table ID", "openflow_v5.flow_update.full.table_id", |
9122 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
9123 | 16 | NULL, HFILL } |
9124 | 16 | }, |
9125 | 16 | { &hf_openflow_v5_flow_update_full_reason, |
9126 | 16 | { "Reason", "openflow_v5.flow_update.full.reason", |
9127 | 16 | FT_UINT8, BASE_DEC, VALS(openflow_v5_flow_removed_reason_values), 0x0, |
9128 | 16 | NULL, HFILL } |
9129 | 16 | }, |
9130 | 16 | { &hf_openflow_v5_flow_update_full_zero, |
9131 | 16 | { "Zero", "openflow_v5.flow_update.full.zero", |
9132 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9133 | 16 | NULL, HFILL } |
9134 | 16 | }, |
9135 | 16 | { &hf_openflow_v5_flow_update_full_idle_timeout, |
9136 | 16 | { "Idle timeout", "openflow_v5.flow_update.full.idle_timeout", |
9137 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9138 | 16 | NULL, HFILL } |
9139 | 16 | }, |
9140 | 16 | { &hf_openflow_v5_flow_update_full_hard_timeout, |
9141 | 16 | { "Hard timeout", "openflow_v5.flow_update.full.hard_timeout", |
9142 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9143 | 16 | NULL, HFILL } |
9144 | 16 | }, |
9145 | 16 | { &hf_openflow_v5_flow_update_full_priority, |
9146 | 16 | { "Priority", "openflow_v5.flow_update.full.priority", |
9147 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9148 | 16 | NULL, HFILL } |
9149 | 16 | }, |
9150 | 16 | { &hf_openflow_v5_flow_update_full_zeros, |
9151 | 16 | { "Zeros", "openflow_v5.flow_update.full.zeros", |
9152 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9153 | 16 | NULL, HFILL } |
9154 | 16 | }, |
9155 | 16 | { &hf_openflow_v5_flow_update_full_cookie, |
9156 | 16 | { "Cookie", "openflow_v5.flow_update.full.cookie", |
9157 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
9158 | 16 | NULL, HFILL } |
9159 | 16 | }, |
9160 | 16 | { &hf_openflow_v5_flow_update_abbrev_xid, |
9161 | 16 | { "Transaction ID", "openflow_v5.flow_update.abbrev.xid", |
9162 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9163 | 16 | NULL, HFILL } |
9164 | 16 | }, |
9165 | 16 | { &hf_openflow_v5_flow_update_paused_zeros, |
9166 | 16 | { "Zeros", "openflow_v5.flow_update.paused.zeros", |
9167 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9168 | 16 | NULL, HFILL } |
9169 | 16 | }, |
9170 | 16 | { &hf_openflow_v5_multipart_reply_type , |
9171 | 16 | { "Type", "openflow_v5.multipart_reply.type", |
9172 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_multipart_type_values), 0x0, |
9173 | 16 | NULL, HFILL } |
9174 | 16 | }, |
9175 | 16 | { &hf_openflow_v5_multipart_reply_flags, |
9176 | 16 | { "Flags", "openflow_v5.multipart_reply.flags", |
9177 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
9178 | 16 | NULL, HFILL } |
9179 | 16 | }, |
9180 | 16 | { &hf_openflow_v5_multipart_reply_flags_more, |
9181 | 16 | { "OFPMPF_REPLY_MORE", "openflow_v5.multipart_reply.flags.more", |
9182 | 16 | FT_UINT16, BASE_HEX, NULL, OFPMPF_REPLY_MORE, |
9183 | 16 | NULL, HFILL } |
9184 | 16 | }, |
9185 | 16 | { &hf_openflow_v5_multipart_reply_pad, |
9186 | 16 | { "Pad", "openflow_v5.multipart_reply.pad", |
9187 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9188 | 16 | NULL, HFILL } |
9189 | 16 | }, |
9190 | 16 | { &hf_openflow_v5_multipart_reply_experimenter_experimenter, |
9191 | 16 | { "Experimenter", "openflow_v5.multipart_reply.experimenter.experimenter", |
9192 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9193 | 16 | NULL, HFILL } |
9194 | 16 | }, |
9195 | 16 | { &hf_openflow_v5_multipart_reply_experimenter_exp_type, |
9196 | 16 | { "Experimenter type", "openflow_v5.multipart_reply.experimenter.exp_type", |
9197 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9198 | 16 | NULL, HFILL } |
9199 | 16 | }, |
9200 | 16 | { &hf_openflow_v5_table_desc_length, |
9201 | 16 | { "Length", "openflow_v5.table_desc.length", |
9202 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9203 | 16 | NULL, HFILL } |
9204 | 16 | }, |
9205 | 16 | { &hf_openflow_v5_table_desc_table_id, |
9206 | 16 | { "Table ID", "openflow_v5.table_desc.table_id", |
9207 | 16 | FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_table_reserved_values), 0x0, |
9208 | 16 | NULL, HFILL } |
9209 | 16 | }, |
9210 | 16 | { &hf_openflow_v5_table_desc_pad, |
9211 | 16 | { "Pad", "openflow_v5.table_desc.pad", |
9212 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9213 | 16 | NULL, HFILL } |
9214 | 16 | }, |
9215 | 16 | { &hf_openflow_v5_table_desc_config, |
9216 | 16 | { "Config", "openflow_v5.table_desc.config", |
9217 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9218 | 16 | NULL, HFILL } |
9219 | 16 | }, |
9220 | 16 | { &hf_openflow_v5_table_desc_config_eviction, |
9221 | 16 | { "OFPTC_EVICTION", "openflow_v5.table_desc.config.eviction", |
9222 | 16 | FT_BOOLEAN, 32, NULL, OFPTC_EVICTION, |
9223 | 16 | NULL, HFILL } |
9224 | 16 | }, |
9225 | 16 | { &hf_openflow_v5_table_desc_config_vacancy_events, |
9226 | 16 | { "OFPTC_VACANCY_EVENTS", "openflow_v5.table_desc.config.vacancy_events", |
9227 | 16 | FT_BOOLEAN, 32, NULL, OFPTC_VACANCY_EVENTS, |
9228 | 16 | NULL, HFILL } |
9229 | 16 | }, |
9230 | 16 | { &hf_openflow_v5_queue_desc_port_no, |
9231 | 16 | { "Port", "openflow_v5.queue_desc.port_no", |
9232 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_port_reserved_values), 0x0, |
9233 | 16 | NULL, HFILL } |
9234 | 16 | }, |
9235 | 16 | { &hf_openflow_v5_queue_desc_queue_id, |
9236 | 16 | { "Queue ID", "openflow_v5.queue_desc.queue_id", |
9237 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_queue_reserved_values), 0x0, |
9238 | 16 | NULL, HFILL } |
9239 | 16 | }, |
9240 | 16 | { &hf_openflow_v5_queue_desc_len, |
9241 | 16 | { "Length", "openflow_v5.queue_desc.len", |
9242 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9243 | 16 | NULL, HFILL } |
9244 | 16 | }, |
9245 | 16 | { &hf_openflow_v5_queue_desc_pad, |
9246 | 16 | { "Pad", "openflow_v5.queue_desc.pad", |
9247 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9248 | 16 | NULL, HFILL } |
9249 | 16 | }, |
9250 | 16 | { &hf_openflow_v5_queue_desc_prop_property, |
9251 | 16 | { "Property", "openflow_v5.queue_desc_prop.property", |
9252 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_queue_desc_prop_property_values), 0x0, |
9253 | 16 | NULL, HFILL } |
9254 | 16 | }, |
9255 | 16 | { &hf_openflow_v5_queue_desc_prop_len, |
9256 | 16 | { "Length", "openflow_v5.queue_desc_prop.len", |
9257 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9258 | 16 | NULL, HFILL } |
9259 | 16 | }, |
9260 | 16 | { &hf_openflow_v5_queue_desc_prop_pad, |
9261 | 16 | { "Pad", "openflow_v5.queue_desc_prop.pad", |
9262 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9263 | 16 | NULL, HFILL } |
9264 | 16 | }, |
9265 | 16 | { &hf_openflow_v5_queue_desc_prop_min_rate_rate, |
9266 | 16 | { "Rate", "openflow_v5.queue_desc_prop.min_rate.rate", |
9267 | 16 | FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_queue_desc_prop_min_rate_reserved_values), 0x0, |
9268 | 16 | NULL, HFILL } |
9269 | 16 | }, |
9270 | 16 | { &hf_openflow_v5_queue_desc_prop_min_rate_pad, |
9271 | 16 | { "Pad", "openflow_v5.queue_desc_prop.min_rate.pad", |
9272 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9273 | 16 | NULL, HFILL } |
9274 | 16 | }, |
9275 | 16 | { &hf_openflow_v5_queue_desc_prop_max_rate_rate, |
9276 | 16 | { "Rate", "openflow_v5.queue_desc_prop.max_rate.rate", |
9277 | 16 | FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_queue_desc_prop_max_rate_reserved_values), 0x0, |
9278 | 16 | NULL, HFILL } |
9279 | 16 | }, |
9280 | 16 | { &hf_openflow_v5_queue_desc_prop_max_rate_pad, |
9281 | 16 | { "Pad", "openflow_v5.queue_desc_prop.max_rate.pad", |
9282 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9283 | 16 | NULL, HFILL } |
9284 | 16 | }, |
9285 | 16 | { &hf_openflow_v5_queue_desc_prop_experimenter_experimenter, |
9286 | 16 | { "Experimenter", "openflow_v5.queue_desc_prop.experimenter.experimenter", |
9287 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9288 | 16 | NULL, HFILL } |
9289 | 16 | }, |
9290 | 16 | { &hf_openflow_v5_queue_desc_prop_experimenter_exp_type, |
9291 | 16 | { "Exp type", "openflow_v5.queue_desc_prop.experimenter.exp_type", |
9292 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9293 | 16 | NULL, HFILL } |
9294 | 16 | }, |
9295 | 16 | { &hf_openflow_v5_role_request_role, |
9296 | 16 | { "Role", "openflow_v5.role_request.role", |
9297 | 16 | FT_UINT32, BASE_HEX, VALS(openflow_v5_controller_role_values), 0x0, |
9298 | 16 | NULL, HFILL } |
9299 | 16 | }, |
9300 | 16 | { &hf_openflow_v5_role_request_pad, |
9301 | 16 | { "Pad", "openflow_v5.role_request.pad", |
9302 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9303 | 16 | NULL, HFILL } |
9304 | 16 | }, |
9305 | 16 | { &hf_openflow_v5_role_request_generation_id, |
9306 | 16 | { "Generation ID", "openflow_v5.role_request.generation_id", |
9307 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
9308 | 16 | NULL, HFILL } |
9309 | 16 | }, |
9310 | 16 | { &hf_openflow_v5_role_reply_role, |
9311 | 16 | { "Role", "openflow_v5.role_reply.role", |
9312 | 16 | FT_UINT32, BASE_HEX, VALS(openflow_v5_controller_role_values), 0x0, |
9313 | 16 | NULL, HFILL } |
9314 | 16 | }, |
9315 | 16 | { &hf_openflow_v5_role_reply_pad, |
9316 | 16 | { "Pad", "openflow_v5.role_reply.pad", |
9317 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9318 | 16 | NULL, HFILL } |
9319 | 16 | }, |
9320 | 16 | { &hf_openflow_v5_role_reply_generation_id, |
9321 | 16 | { "Generation ID", "openflow_v5.role_reply.generation_id", |
9322 | 16 | FT_UINT64, BASE_HEX, NULL, 0x0, |
9323 | 16 | NULL, HFILL } |
9324 | 16 | }, |
9325 | 16 | { &hf_openflow_v5_async_config_prop_type, |
9326 | 16 | { "Type", "openflow_v5.async_config_prop.type", |
9327 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_async_config_prop_type_values), 0x0, |
9328 | 16 | NULL, HFILL } |
9329 | 16 | }, |
9330 | 16 | { &hf_openflow_v5_async_config_prop_length, |
9331 | 16 | { "Length", "openflow_v5.async_config_prop.length", |
9332 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9333 | 16 | NULL, HFILL } |
9334 | 16 | }, |
9335 | 16 | { &hf_openflow_v5_async_config_prop_reason_packet_in_mask, |
9336 | 16 | { "Mask", "openflow_v5.async_config_prop.reason.packet_in.mask", |
9337 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9338 | 16 | NULL, HFILL } |
9339 | 16 | }, |
9340 | 16 | { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_table_miss, |
9341 | 16 | { "OFPR_TABLE_MISS", "openflow_v5.async_config_prop.reason.packet_in.mask.table_miss", |
9342 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPR_TABLE_MISS, |
9343 | 16 | NULL, HFILL } |
9344 | 16 | }, |
9345 | 16 | { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_apply_action, |
9346 | 16 | { "OFPR_APPLY_ACTION", "openflow_v5.async_config_prop.reason.packet_in.mask.apply_action", |
9347 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPR_APPLY_ACTION, |
9348 | 16 | NULL, HFILL } |
9349 | 16 | }, |
9350 | 16 | { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_invalid_ttl, |
9351 | 16 | { "OFPR_INVALID_TTL", "openflow_v5.async_config_prop.reason.packet_in.mask.invalid_ttl", |
9352 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPR_INVALID_TTL, |
9353 | 16 | NULL, HFILL } |
9354 | 16 | }, |
9355 | 16 | { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_action_set, |
9356 | 16 | { "OFPR_ACTION_SET", "openflow_v5.async_config_prop.reason.packet_in.mask.action_set", |
9357 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPR_ACTION_SET, |
9358 | 16 | NULL, HFILL } |
9359 | 16 | }, |
9360 | 16 | { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_group, |
9361 | 16 | { "OFPR_GROUP", "openflow_v5.async_config_prop.reason.packet_in.mask.group", |
9362 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPR_GROUP, |
9363 | 16 | NULL, HFILL } |
9364 | 16 | }, |
9365 | 16 | { &hf_openflow_v5_async_config_prop_reason_packet_in_mask_packet_out, |
9366 | 16 | { "OFPR_PACKET_OUT", "openflow_v5.async_config_prop.reason.packet_in.mask.packet_out", |
9367 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPR_PACKET_OUT, |
9368 | 16 | NULL, HFILL } |
9369 | 16 | }, |
9370 | 16 | { &hf_openflow_v5_async_config_prop_reason_port_status_mask, |
9371 | 16 | { "Mask", "openflow_v5.async_config_prop.reason.port_status.mask", |
9372 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9373 | 16 | NULL, HFILL } |
9374 | 16 | }, |
9375 | 16 | { &hf_openflow_v5_async_config_prop_reason_port_status_mask_add, |
9376 | 16 | { "OFPPR_ADD", "openflow_v5.async_config_prop.reason.port_status.mask.add", |
9377 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPPR_ADD, |
9378 | 16 | NULL, HFILL } |
9379 | 16 | }, |
9380 | 16 | { &hf_openflow_v5_async_config_prop_reason_port_status_mask_delete, |
9381 | 16 | { "OFPPR_DELETE", "openflow_v5.async_config_prop.reason.port_status.mask.delete", |
9382 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPPR_DELETE, |
9383 | 16 | NULL, HFILL } |
9384 | 16 | }, |
9385 | 16 | { &hf_openflow_v5_async_config_prop_reason_port_status_mask_modify, |
9386 | 16 | { "OFPPR_MODIFY", "openflow_v5.async_config_prop.reason.port_status.mask.modify", |
9387 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPPR_MODIFY, |
9388 | 16 | NULL, HFILL } |
9389 | 16 | }, |
9390 | 16 | { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask, |
9391 | 16 | { "Mask", "openflow_v5.async_config_prop.reason.flow_removed.mask", |
9392 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9393 | 16 | NULL, HFILL } |
9394 | 16 | }, |
9395 | 16 | { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_idle_timeout, |
9396 | 16 | { "OFPRR_IDLE_TIMEOUT", "openflow_v5.async_config_prop.reason.flow_removed.mask.idle_timeout", |
9397 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRR_IDLE_TIMEOUT, |
9398 | 16 | NULL, HFILL } |
9399 | 16 | }, |
9400 | 16 | { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_hard_timeout, |
9401 | 16 | { "OFPRR_HARD_TIMEOUT", "openflow_v5.async_config_prop.reason.flow_removed.mask.hard_timeout", |
9402 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRR_HARD_TIMEOUT, |
9403 | 16 | NULL, HFILL } |
9404 | 16 | }, |
9405 | 16 | { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_delete, |
9406 | 16 | { "OFPRR_DELETE", "openflow_v5.async_config_prop.reason.flow_removed.mask.delete", |
9407 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRR_DELETE, |
9408 | 16 | NULL, HFILL } |
9409 | 16 | }, |
9410 | 16 | { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_group_delete, |
9411 | 16 | { "OFPRR_GROUP_DELETE", "openflow_v5.async_config_prop.reason.flow_removed.mask.group_delete", |
9412 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRR_GROUP_DELETE, |
9413 | 16 | NULL, HFILL } |
9414 | 16 | }, |
9415 | 16 | { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_meter_delete, |
9416 | 16 | { "OFPRR_METER_DELETE", "openflow_v5.async_config_prop.reason.flow_removed.mask.meter_delete", |
9417 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRR_METER_DELETE, |
9418 | 16 | NULL, HFILL } |
9419 | 16 | }, |
9420 | 16 | { &hf_openflow_v5_async_config_prop_reason_flow_removed_mask_eviction, |
9421 | 16 | { "OFPRR_EVICTION", "openflow_v5.async_config_prop.reason.flow_removed.mask.eviction", |
9422 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRR_EVICTION, |
9423 | 16 | NULL, HFILL } |
9424 | 16 | }, |
9425 | 16 | { &hf_openflow_v5_async_config_prop_reason_role_status_mask, |
9426 | 16 | { "Mask", "openflow_v5.async_config_prop.reason.role_status.mask", |
9427 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9428 | 16 | NULL, HFILL } |
9429 | 16 | }, |
9430 | 16 | { &hf_openflow_v5_async_config_prop_reason_role_status_mask_master_request, |
9431 | 16 | { "OFPCRR_MASTER_REQUEST", "openflow_v5.async_config_prop.reason.role_status.mask.master_request", |
9432 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPCRR_MASTER_REQUEST, |
9433 | 16 | NULL, HFILL } |
9434 | 16 | }, |
9435 | 16 | { &hf_openflow_v5_async_config_prop_reason_role_status_mask_config, |
9436 | 16 | { "OFPCRR_CONFIG", "openflow_v5.async_config_prop.reason.role_status.mask.config", |
9437 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPCRR_CONFIG, |
9438 | 16 | NULL, HFILL } |
9439 | 16 | }, |
9440 | 16 | { &hf_openflow_v5_async_config_prop_reason_role_status_mask_experimenter, |
9441 | 16 | { "OFPCRR_EXPERIMENTER", "openflow_v5.async_config_prop.reason.role_status.mask.experimenter", |
9442 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPCRR_EXPERIMENTER, |
9443 | 16 | NULL, HFILL } |
9444 | 16 | }, |
9445 | 16 | { &hf_openflow_v5_async_config_prop_reason_table_status_mask, |
9446 | 16 | { "Mask", "openflow_v5.async_config_prop.reason.table_status.mask", |
9447 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9448 | 16 | NULL, HFILL } |
9449 | 16 | }, |
9450 | | |
9451 | 16 | { &hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_down, |
9452 | 16 | { "OFPTR_VACANCY_DOWN", "openflow_v5.async_config_prop.reason.table_status.mask.vacancy_u", |
9453 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPTR_VACANCY_DOWN, |
9454 | 16 | NULL, HFILL } |
9455 | 16 | }, |
9456 | 16 | { &hf_openflow_v5_async_config_prop_reason_table_status_mask_vacancy_up, |
9457 | 16 | { "OFPTR_VACANCY_UP", "openflow_v5.async_config_prop.reason.table_status.mask.vacancy_up", |
9458 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPTR_VACANCY_UP, |
9459 | 16 | NULL, HFILL } |
9460 | 16 | }, |
9461 | 16 | { &hf_openflow_v5_async_config_prop_reason_requestforward_mask, |
9462 | 16 | { "Mask", "openflow_v5.async_config_prop.reason.requestforward.mask", |
9463 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9464 | 16 | NULL, HFILL } |
9465 | 16 | }, |
9466 | 16 | { &hf_openflow_v5_async_config_prop_reason_requestforward_mask_group_mod, |
9467 | 16 | { "OFPRFR_GROUP_MOD", "openflow_v5.async_config_prop.reason.requestforward.mask.group_mod", |
9468 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRFR_GROUP_MOD, |
9469 | 16 | NULL, HFILL } |
9470 | 16 | }, |
9471 | 16 | { &hf_openflow_v5_async_config_prop_reason_requestforward_mask_meter_mod, |
9472 | 16 | { "OFPRFR_METER_MOD", "openflow_v5.async_config_prop.reason.requestforward.mask.meter_mod", |
9473 | 16 | FT_BOOLEAN, 32, NULL, 1 << OFPRFR_METER_MOD, |
9474 | 16 | NULL, HFILL } |
9475 | 16 | }, |
9476 | 16 | { &hf_openflow_v5_async_config_prop_experimenter_experimenter, |
9477 | 16 | { "Experimenter", "openflow_v5.async_config_prop.experimenter.experimenter", |
9478 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9479 | 16 | NULL, HFILL } |
9480 | 16 | }, |
9481 | 16 | { &hf_openflow_v5_async_config_prop_experimenter_exp_type, |
9482 | 16 | { "Exp type", "openflow_v5.async_config_prop.experimenter.exp_type", |
9483 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9484 | 16 | NULL, HFILL } |
9485 | 16 | }, |
9486 | 16 | { &hf_openflow_v5_metermod_command, |
9487 | 16 | { "Command", "openflow_v5.metermod.command", |
9488 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_metermod_command_values), 0x0, |
9489 | 16 | NULL, HFILL } |
9490 | 16 | }, |
9491 | 16 | { &hf_openflow_v5_metermod_flags, |
9492 | 16 | { "Flags", "openflow_v5.metermod.flags", |
9493 | 16 | FT_UINT32, BASE_HEX, NULL, 0x0, |
9494 | 16 | NULL, HFILL } |
9495 | 16 | }, |
9496 | 16 | { &hf_openflow_v5_metermod_flags_kbps, |
9497 | 16 | { "OFPMF_KBPS", "openflow_v5.metermod.flags.kbps", |
9498 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_KBPS, |
9499 | 16 | NULL, HFILL } |
9500 | 16 | }, |
9501 | 16 | { &hf_openflow_v5_metermod_flags_pktps, |
9502 | 16 | { "OFPMF_PKTPS", "openflow_v5.metermod.flags.ptkps", |
9503 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_PKTPS, |
9504 | 16 | NULL, HFILL } |
9505 | 16 | }, |
9506 | 16 | { &hf_openflow_v5_metermod_flags_burst, |
9507 | 16 | { "OFPMF_BURST", "openflow_v5.metermod.flags.burst", |
9508 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_BURST, |
9509 | 16 | NULL, HFILL } |
9510 | 16 | }, |
9511 | 16 | { &hf_openflow_v5_metermod_flags_stats, |
9512 | 16 | { "OFPMF_STATS", "openflow_v5.metermod.flags.stats", |
9513 | 16 | FT_BOOLEAN, 32, NULL, OFPMF_STATS, |
9514 | 16 | NULL, HFILL } |
9515 | 16 | }, |
9516 | 16 | { &hf_openflow_v5_metermod_meter_id, |
9517 | 16 | { "Meter ID", "openflow_v5.metermod.meter_id", |
9518 | 16 | FT_UINT32, BASE_DEC|BASE_SPECIAL_VALS, VALS(openflow_v5_meter_id_reserved_values), 0x0, |
9519 | 16 | NULL, HFILL } |
9520 | 16 | }, |
9521 | 16 | { &hf_openflow_v5_role_status_role, |
9522 | 16 | { "Role", "openflow_v5.role_status.role", |
9523 | 16 | FT_UINT32, BASE_HEX, VALS(openflow_v5_controller_role_values), 0x0, |
9524 | 16 | NULL, HFILL } |
9525 | 16 | }, |
9526 | 16 | { &hf_openflow_v5_role_status_reason, |
9527 | 16 | { "Reason", "openflow_v5.role_status.reason", |
9528 | 16 | FT_UINT8, BASE_HEX, VALS(openflow_v5_role_status_reason_values), 0x0, |
9529 | 16 | NULL, HFILL } |
9530 | 16 | }, |
9531 | 16 | { &hf_openflow_v5_role_status_pad, |
9532 | 16 | { "Pad", "openflow_v5.role_status.pad", |
9533 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9534 | 16 | NULL, HFILL } |
9535 | 16 | }, |
9536 | 16 | { &hf_openflow_v5_role_status_generation_id, |
9537 | 16 | { "Generation ID", "openflow_v5.role_status.generation_id", |
9538 | 16 | FT_UINT64, BASE_DEC, NULL, 0x0, |
9539 | 16 | NULL, HFILL } |
9540 | 16 | }, |
9541 | 16 | { &hf_openflow_v5_table_status_reason, |
9542 | 16 | { "Reason", "openflow_v5.table_status.reason", |
9543 | 16 | FT_UINT8, BASE_HEX, VALS(openflow_v5_table_status_reason_values), 0x0, |
9544 | 16 | NULL, HFILL } |
9545 | 16 | }, |
9546 | 16 | { &hf_openflow_v5_table_status_pad, |
9547 | 16 | { "Pad", "openflow_v5.table_status.pad", |
9548 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9549 | 16 | NULL, HFILL } |
9550 | 16 | }, |
9551 | 16 | { &hf_openflow_v5_bundle_control_bundle_id, |
9552 | 16 | { "Bundle ID", "openflow_v5.bundle_control.bundle_id", |
9553 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9554 | 16 | NULL, HFILL } |
9555 | 16 | }, |
9556 | 16 | { &hf_openflow_v5_bundle_control_type, |
9557 | 16 | { "Type", "openflow_v5.bundle_control.type", |
9558 | 16 | FT_UINT16, BASE_HEX, VALS(openflow_v5_bundle_control_type_values), 0x0, |
9559 | 16 | NULL, HFILL } |
9560 | 16 | }, |
9561 | 16 | { &hf_openflow_v5_bundle_control_flags, |
9562 | 16 | { "Flags", "openflow_v5.bundle_control.flags", |
9563 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
9564 | 16 | NULL, HFILL } |
9565 | 16 | }, |
9566 | 16 | { &hf_openflow_v5_bundle_control_flags_atomic, |
9567 | 16 | { "OFPBF_ATOMIC", "openflow_v5.bundle_control.flags.atomic", |
9568 | 16 | FT_BOOLEAN, 16, NULL, OFPBF_ATOMIC, |
9569 | 16 | NULL, HFILL } |
9570 | 16 | }, |
9571 | 16 | { &hf_openflow_v5_bundle_control_flags_ordered, |
9572 | 16 | { "OFPBF_ORDERED", "openflow_v5.bundle_control.flags.ordered", |
9573 | 16 | FT_BOOLEAN, 16, NULL, OFPBF_ORDERED, |
9574 | 16 | NULL, HFILL } |
9575 | 16 | }, |
9576 | 16 | { &hf_openflow_v5_bundle_prop_type, |
9577 | 16 | { "Type", "openflow_v5.bundle_prop.type", |
9578 | 16 | FT_UINT16, BASE_DEC, VALS(openflow_v5_bundle_prop_type_values), 0x0, |
9579 | 16 | NULL, HFILL } |
9580 | 16 | }, |
9581 | 16 | { &hf_openflow_v5_bundle_prop_length, |
9582 | 16 | { "Length", "openflow_v5.bundle_prop.length", |
9583 | 16 | FT_UINT16, BASE_DEC, NULL, 0x0, |
9584 | 16 | NULL, HFILL } |
9585 | 16 | }, |
9586 | 16 | { &hf_openflow_v5_bundle_prop_experimenter_experimenter, |
9587 | 16 | { "Experimenter", "openflow_v5.bundle_prop.experimenter.experimenter", |
9588 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9589 | 16 | NULL, HFILL } |
9590 | 16 | }, |
9591 | 16 | { &hf_openflow_v5_bundle_prop_experimenter_exp_type, |
9592 | 16 | { "Exp type", "openflow_v5.bundle_prop.experimenter.exp_type", |
9593 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9594 | 16 | NULL, HFILL } |
9595 | 16 | }, |
9596 | 16 | { &hf_openflow_v5_bundle_add_bundle_id, |
9597 | 16 | { "Bundle ID", "openflow_v5.bundle_add.bundle_id", |
9598 | 16 | FT_UINT32, BASE_DEC, NULL, 0x0, |
9599 | 16 | NULL, HFILL } |
9600 | 16 | }, |
9601 | 16 | { &hf_openflow_v5_bundle_add_pad, |
9602 | 16 | { "Pad", "openflow_v5.table_status.pad", |
9603 | 16 | FT_BYTES, BASE_NONE, NULL, 0x0, |
9604 | 16 | NULL, HFILL } |
9605 | 16 | }, |
9606 | 16 | { &hf_openflow_v5_bundle_add_flags, |
9607 | 16 | { "Flags", "openflow_v5.bundle_add.flags", |
9608 | 16 | FT_UINT16, BASE_HEX, NULL, 0x0, |
9609 | 16 | NULL, HFILL } |
9610 | 16 | }, |
9611 | 16 | { &hf_openflow_v5_bundle_add_flags_atomic, |
9612 | 16 | { "OFPBF_ATOMIC", "openflow_v5.bundle_add.flags.atomic", |
9613 | 16 | FT_BOOLEAN, 16, NULL, OFPBF_ATOMIC, |
9614 | 16 | NULL, HFILL } |
9615 | 16 | }, |
9616 | 16 | { &hf_openflow_v5_bundle_add_flags_ordered, |
9617 | 16 | { "OFPBF_ORDERED", "openflow_v5.bundle_add.flags.ordered", |
9618 | 16 | FT_BOOLEAN, 16, NULL, OFPBF_ORDERED, |
9619 | 16 | NULL, HFILL } |
9620 | 16 | } |
9621 | 16 | }; |
9622 | | |
9623 | 16 | static int *ett[] = { |
9624 | 16 | &ett_openflow_v5, |
9625 | 16 | &ett_openflow_v5_flowmod_flags, |
9626 | 16 | &ett_openflow_v5_bucket, |
9627 | 16 | &ett_openflow_v5_oxm, |
9628 | 16 | &ett_openflow_v5_match, |
9629 | 16 | &ett_openflow_v5_action, |
9630 | 16 | &ett_openflow_v5_instruction, |
9631 | 16 | &ett_openflow_v5_port, |
9632 | 16 | &ett_openflow_v5_port_desc_prop, |
9633 | 16 | &ett_openflow_v5_port_desc_prop_ethernet_current, |
9634 | 16 | &ett_openflow_v5_port_desc_prop_ethernet_advertised, |
9635 | 16 | &ett_openflow_v5_port_desc_prop_ethernet_supported, |
9636 | 16 | &ett_openflow_v5_port_desc_prop_ethernet_peer, |
9637 | 16 | &ett_openflow_v5_port_desc_prop_optical_supported, |
9638 | 16 | &ett_openflow_v5_port_stats_prop, |
9639 | 16 | &ett_openflow_v5_port_stats_prop_optical_flags, |
9640 | 16 | &ett_openflow_v5_port_config, |
9641 | 16 | &ett_openflow_v5_port_state, |
9642 | 16 | &ett_openflow_v5_meter_band, |
9643 | 16 | &ett_openflow_v5_hello_element, |
9644 | 16 | &ett_openflow_v5_error_data, |
9645 | 16 | &ett_openflow_v5_switch_features_capabilities, |
9646 | 16 | &ett_openflow_v5_switch_config_flags, |
9647 | 16 | &ett_openflow_v5_packet_in_data, |
9648 | 16 | &ett_openflow_v5_packet_out_data, |
9649 | 16 | &ett_openflow_v5_portmod_prop, |
9650 | 16 | &ett_openflow_v5_portmod_prop_ethernet_advertise, |
9651 | 16 | &ett_openflow_v5_portmod_prop_optical_configure, |
9652 | 16 | &ett_openflow_v5_portmod_config, |
9653 | 16 | &ett_openflow_v5_portmod_mask, |
9654 | 16 | &ett_openflow_v5_tablemod_config, |
9655 | 16 | &ett_openflow_v5_tablemod_prop, |
9656 | 16 | &ett_openflow_v5_tablemod_prop_eviction_flags, |
9657 | 16 | &ett_openflow_v5_table_features, |
9658 | 16 | &ett_openflow_v5_table_features_capabilities, |
9659 | 16 | &ett_openflow_v5_table_feature_prop, |
9660 | 16 | &ett_openflow_v5_table_feature_prop_instruction_id, |
9661 | 16 | &ett_openflow_v5_table_feature_prop_action_id, |
9662 | 16 | &ett_openflow_v5_table_feature_prop_oxm_id, |
9663 | 16 | &ett_openflow_v5_flow_monitor_request_flags, |
9664 | 16 | &ett_openflow_v5_multipart_request_flags, |
9665 | 16 | &ett_openflow_v5_flow_stats, |
9666 | 16 | &ett_openflow_v5_flow_stats_flags, |
9667 | 16 | &ett_openflow_v5_table_stats, |
9668 | 16 | &ett_openflow_v5_port_stats, |
9669 | 16 | &ett_openflow_v5_queue_stats, |
9670 | 16 | &ett_openflow_v5_queue_stats_prop, |
9671 | 16 | &ett_openflow_v5_bucket_counter, |
9672 | 16 | &ett_openflow_v5_group_stats, |
9673 | 16 | &ett_openflow_v5_group_desc, |
9674 | 16 | &ett_openflow_v5_group_features_types, |
9675 | 16 | &ett_openflow_v5_group_features_capabilities, |
9676 | 16 | &ett_openflow_v5_group_features_actions_all, |
9677 | 16 | &ett_openflow_v5_group_features_actions_select, |
9678 | 16 | &ett_openflow_v5_group_features_actions_indirect, |
9679 | 16 | &ett_openflow_v5_group_features_actions_ff, |
9680 | 16 | &ett_openflow_v5_meter_band_stats, |
9681 | 16 | &ett_openflow_v5_meter_stats, |
9682 | 16 | &ett_openflow_v5_meter_config, |
9683 | 16 | &ett_openflow_v5_meter_config_flags, |
9684 | 16 | &ett_openflow_v5_meter_features_band_types, |
9685 | 16 | &ett_openflow_v5_meter_features_capabilities, |
9686 | 16 | &ett_openflow_v5_flow_update, |
9687 | 16 | &ett_openflow_v5_multipart_reply_flags, |
9688 | 16 | &ett_openflow_v5_table_desc, |
9689 | 16 | &ett_openflow_v5_table_desc_config, |
9690 | 16 | &ett_openflow_v5_queue_desc, |
9691 | 16 | &ett_openflow_v5_queue_desc_prop, |
9692 | 16 | &ett_openflow_v5_async_config_prop, |
9693 | 16 | &ett_openflow_v5_async_config_prop_reason_packet_in_mask, |
9694 | 16 | &ett_openflow_v5_async_config_prop_reason_port_status_mask, |
9695 | 16 | &ett_openflow_v5_async_config_prop_reason_flow_removed_mask, |
9696 | 16 | &ett_openflow_v5_async_config_prop_reason_role_status_mask, |
9697 | 16 | &ett_openflow_v5_async_config_prop_reason_table_status_mask, |
9698 | 16 | &ett_openflow_v5_async_config_prop_reason_requestforward_mask, |
9699 | 16 | &ett_openflow_v5_metermod_flags, |
9700 | 16 | &ett_openflow_v5_requestforward_request, |
9701 | 16 | &ett_openflow_v5_bundle_control_flags, |
9702 | 16 | &ett_openflow_v5_bundle_prop, |
9703 | 16 | &ett_openflow_v5_bundle_add_flags, |
9704 | 16 | &ett_openflow_v5_bundle_add_message |
9705 | 16 | }; |
9706 | | |
9707 | 16 | static ei_register_info ei[] = { |
9708 | 16 | { &ei_openflow_v5_oxm_undecoded, |
9709 | 16 | { "openflow_v5.oxm.undecoded", PI_UNDECODED, PI_NOTE, |
9710 | 16 | "Unknown OMX body.", EXPFILL } |
9711 | 16 | }, |
9712 | 16 | { &ei_openflow_v5_match_undecoded, |
9713 | 16 | { "openflow_v5.match.undecoded", PI_UNDECODED, PI_NOTE, |
9714 | 16 | "Unknown match body.", EXPFILL } |
9715 | 16 | }, |
9716 | 16 | { &ei_openflow_v5_action_undecoded, |
9717 | 16 | { "openflow_v5.action.undecoded", PI_UNDECODED, PI_NOTE, |
9718 | 16 | "Unknown action body.", EXPFILL } |
9719 | 16 | }, |
9720 | 16 | { &ei_openflow_v5_instruction_undecoded, |
9721 | 16 | { "openflow_v5.instruction.undecoded", PI_UNDECODED, PI_NOTE, |
9722 | 16 | "Unknown instruction body.", EXPFILL } |
9723 | 16 | }, |
9724 | 16 | { &ei_openflow_v5_port_desc_prop_undecoded, |
9725 | 16 | { "openflow_v5.port.desc_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9726 | 16 | "Unknown port desc. property body.", EXPFILL } |
9727 | 16 | }, |
9728 | 16 | { &ei_openflow_v5_port_stats_prop_undecoded, |
9729 | 16 | { "openflow_v5.port.stats_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9730 | 16 | "Unknown port stats. property body.", EXPFILL } |
9731 | 16 | }, |
9732 | 16 | { &ei_openflow_v5_meter_band_undecoded, |
9733 | 16 | { "openflow_v5.meter_band.undecoded", PI_UNDECODED, PI_NOTE, |
9734 | 16 | "Unknown meter band body.", EXPFILL } |
9735 | 16 | }, |
9736 | 16 | { &ei_openflow_v5_hello_element_undecoded, |
9737 | 16 | { "openflow_v5.hello_element.undecoded", PI_UNDECODED, PI_NOTE, |
9738 | 16 | "Unknown hello element body.", EXPFILL } |
9739 | 16 | }, |
9740 | 16 | { &ei_openflow_v5_hello_element_length_bad, |
9741 | 16 | { "openflow_v5.hello_element.length_bad", PI_MALFORMED, PI_ERROR, |
9742 | 16 | "Illegal hello element length", EXPFILL } |
9743 | 16 | }, |
9744 | 16 | { &ei_openflow_v5_error_undecoded, |
9745 | 16 | { "openflow_v5.error.undecoded", PI_UNDECODED, PI_NOTE, |
9746 | 16 | "Unknown error data.", EXPFILL } |
9747 | 16 | }, |
9748 | 16 | { &ei_openflow_v5_experimenter_undecoded, |
9749 | 16 | { "openflow_v5.experimenter.undecoded", PI_UNDECODED, PI_NOTE, |
9750 | 16 | "Unknown experimenter body.", EXPFILL } |
9751 | 16 | }, |
9752 | 16 | { &ei_openflow_v5_portmod_prop_undecoded, |
9753 | 16 | { "openflow_v5.portmod_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9754 | 16 | "Unknown portmod property body.", EXPFILL } |
9755 | 16 | }, |
9756 | 16 | { &ei_openflow_v5_tablemod_prop_undecoded, |
9757 | 16 | { "openflow_v5.tablemod_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9758 | 16 | "Unknown tablemod property body.", EXPFILL } |
9759 | 16 | }, |
9760 | 16 | { &ei_openflow_v5_table_feature_prop_undecoded, |
9761 | 16 | { "openflow_v5.table_feature_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9762 | 16 | "Unknown table feature property body.", EXPFILL } |
9763 | 16 | }, |
9764 | 16 | { &ei_openflow_v5_multipart_request_undecoded, |
9765 | 16 | { "openflow_v5.multipart_request.undecoded", PI_UNDECODED, PI_NOTE, |
9766 | 16 | "Unknown multipart request body.", EXPFILL } |
9767 | 16 | }, |
9768 | 16 | { &ei_openflow_v5_queue_stats_prop_undecoded, |
9769 | 16 | { "openflow_v5.queue_stats_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9770 | 16 | "Unknown queue stats prop body.", EXPFILL } |
9771 | 16 | }, |
9772 | 16 | { &ei_openflow_v5_flow_update_undecoded, |
9773 | 16 | { "openflow_v5.flow_update.undecoded", PI_UNDECODED, PI_NOTE, |
9774 | 16 | "Unknown flow update body.", EXPFILL } |
9775 | 16 | }, |
9776 | 16 | { &ei_openflow_v5_multipart_reply_undecoded, |
9777 | 16 | { "openflow_v5.multipart_reply.undecoded", PI_UNDECODED, PI_NOTE, |
9778 | 16 | "Unknown multipart reply body.", EXPFILL } |
9779 | 16 | }, |
9780 | 16 | { &ei_openflow_v5_queue_desc_prop_undecoded, |
9781 | 16 | { "openflow_v5.queue_desc_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9782 | 16 | "Unknown queue property body.", EXPFILL } |
9783 | 16 | }, |
9784 | 16 | { &ei_openflow_v5_async_config_prop_undecoded, |
9785 | 16 | { "openflow_v5.async_config_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9786 | 16 | "Unknown async config property body.", EXPFILL } |
9787 | 16 | }, |
9788 | 16 | {&ei_openflow_v5_bundle_prop_undecoded, |
9789 | 16 | { "openflow_v5.bundle_prop.undecoded", PI_UNDECODED, PI_NOTE, |
9790 | 16 | "Unknown bundle prop body.", EXPFILL } |
9791 | 16 | }, |
9792 | 16 | {&ei_openflow_v5_message_undecoded, |
9793 | 16 | { "openflow_v5.message.undecoded", PI_UNDECODED, PI_NOTE, |
9794 | 16 | "Unknown message body.", EXPFILL } |
9795 | 16 | }, |
9796 | 16 | {&ei_openflow_v5_length_too_short, |
9797 | 16 | { "openflow_v5.message.length_too_short", PI_MALFORMED, PI_ERROR, |
9798 | 16 | "Length is too short.", EXPFILL } |
9799 | 16 | } |
9800 | 16 | }; |
9801 | | |
9802 | | |
9803 | 16 | expert_module_t *expert_openflow_v5; |
9804 | | |
9805 | | /* Register the protocol name and description */ |
9806 | 16 | proto_openflow_v5 = proto_register_protocol("OpenFlow 1.4", "openflow_v5", "openflow_v5"); |
9807 | | |
9808 | 16 | register_dissector("openflow_v5", dissect_openflow_v5, proto_openflow_v5); |
9809 | | |
9810 | | /* Required function calls to register the header fields and subtrees */ |
9811 | 16 | proto_register_field_array(proto_openflow_v5, hf, array_length(hf)); |
9812 | 16 | proto_register_subtree_array(ett, array_length(ett)); |
9813 | 16 | expert_openflow_v5 = expert_register_protocol(proto_openflow_v5); |
9814 | 16 | expert_register_field_array(expert_openflow_v5, ei, array_length(ei)); |
9815 | 16 | } |
9816 | | |
9817 | | void |
9818 | | proto_reg_handoff_openflow_v5(void) |
9819 | 16 | { |
9820 | 16 | eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_openflow_v5); |
9821 | 16 | } |
9822 | | |
9823 | | /* |
9824 | | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
9825 | | * |
9826 | | * Local variables: |
9827 | | * c-basic-offset: 4 |
9828 | | * tab-width: 8 |
9829 | | * indent-tabs-mode: nil |
9830 | | * End: |
9831 | | * |
9832 | | * vi: set shiftwidth=4 tabstop=8 expandtab: |
9833 | | * :indentSize=4:tabSize=8:noTabs=true: |
9834 | | */ |