Coverage Report

Created: 2026-09-28 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
 */