Initial import

LoxiGen is the work of several developers, not just myself.
diff --git a/openflow_input/standard-1.1 b/openflow_input/standard-1.1
new file mode 100644
index 0000000..66a4425
--- /dev/null
+++ b/openflow_input/standard-1.1
@@ -0,0 +1,966 @@
+// Copyright 2013, Big Switch Networks, Inc.
+//
+// LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+// the following special exception:
+//
+// LOXI Exception
+//
+// As a special exception to the terms of the EPL, you may distribute libraries
+// generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+// that copyright and licensing notices generated by LoxiGen are not altered or removed
+// from the LoxiGen Libraries and the notice provided below is (i) included in
+// the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+// documentation for the LoxiGen Libraries, if distributed in binary form.
+//
+// Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+//
+// You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+// a copy of the EPL at:
+//
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// EPL for the specific language governing permissions and limitations
+// under the EPL.
+
+#version 2
+
+struct ofp_header {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+};
+
+struct ofp_hello {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+};
+
+struct ofp_echo_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    of_octets_t data;
+};
+
+struct ofp_echo_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    of_octets_t data;
+};
+
+struct ofp_experimenter {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t experimenter;
+    uint32_t subtype;
+    of_octets_t data;
+};
+
+struct ofp_barrier_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+};
+
+struct ofp_barrier_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+};
+
+struct ofp_get_config_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+};
+
+struct ofp_get_config_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t flags;
+    uint16_t miss_send_len;
+};
+
+struct ofp_set_config {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t flags;
+    uint16_t miss_send_len;
+};
+
+struct ofp_table_mod {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint8_t table_id;
+    uint8_t[3] pad;
+    uint32_t config;
+};
+
+struct ofp_port_desc {
+    of_port_no_t port_no;
+    uint8_t[4] pad;
+    of_mac_addr_t hw_addr;
+    uint8_t[2] pad2;
+    of_port_name_t name;
+    uint32_t config;
+    uint32_t state;
+    uint32_t curr;
+    uint32_t advertised;
+    uint32_t supported;
+    uint32_t peer;
+    uint32_t curr_speed;
+    uint32_t max_speed;
+};
+
+struct ofp_features_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+};
+
+struct ofp_features_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t datapath_id;
+    uint32_t n_buffers;
+    uint8_t n_tables;
+    uint8_t[3] pad;
+    uint32_t capabilities;
+    uint32_t reserved;
+    list(of_port_desc_t) ports;
+};
+
+struct ofp_port_status {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint8_t reason;
+    uint8_t[7] pad;
+    of_port_desc_t desc;
+};
+
+struct ofp_port_mod {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    of_port_no_t port_no;
+    uint8_t[4] pad;
+    of_mac_addr_t hw_addr;
+    uint8_t[2] pad2;
+    uint32_t config;
+    uint32_t mask;
+    uint32_t advertise;
+    uint8_t[4] pad3;
+};
+
+struct ofp_packet_in {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t buffer_id;
+    of_port_no_t in_port;
+    of_port_no_t in_phy_port;
+    uint16_t total_len;
+    uint8_t reason;
+    uint8_t table_id;
+    of_octets_t data;
+};
+
+struct ofp_action_output {
+    uint16_t type;
+    uint16_t len;
+    of_port_no_t port;
+    uint16_t max_len;
+    uint8_t[6] pad;
+};
+
+struct ofp_action_set_vlan_vid {
+    uint16_t type;
+    uint16_t len;
+    uint16_t vlan_vid;
+    uint8_t[2] pad;
+};
+
+struct ofp_action_set_vlan_pcp {
+    uint16_t type;
+    uint16_t len;
+    uint8_t vlan_pcp;
+    uint8_t[3] pad;
+};
+
+struct ofp_action_set_dl_src {
+    uint16_t type;
+    uint16_t len;
+    of_mac_addr_t dl_addr;
+    uint8_t[6] pad;
+};
+
+struct ofp_action_set_dl_dst {
+    uint16_t type;
+    uint16_t len;
+    of_mac_addr_t dl_addr;
+    uint8_t[6] pad;
+};
+
+struct ofp_action_set_nw_src {
+    uint16_t type;
+    uint16_t len;
+    uint32_t nw_addr;
+};
+
+struct ofp_action_set_nw_dst {
+    uint16_t type;
+    uint16_t len;
+    uint32_t nw_addr;
+};
+
+struct ofp_action_set_nw_tos {
+    uint16_t type;
+    uint16_t len;
+    uint8_t nw_tos;
+    uint8_t[3] pad;
+};
+
+struct ofp_action_set_nw_ecn {
+    uint16_t type;
+    uint16_t len;
+    uint8_t nw_ecn;
+    uint8_t[3] pad;
+};
+
+struct ofp_action_set_tp_src {
+    uint16_t type;
+    uint16_t len;
+    uint16_t tp_port;
+    uint8_t[2] pad;
+};
+
+struct ofp_action_set_tp_dst {
+    uint16_t type;
+    uint16_t len;
+    uint16_t tp_port;
+    uint8_t[2] pad;
+};
+
+struct ofp_action_copy_ttl_out {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_action_copy_ttl_in {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_action_set_mpls_label {
+    uint16_t type;
+    uint16_t len;
+    uint32_t mpls_label;
+};
+
+struct ofp_action_set_mpls_tc {
+    uint16_t type;
+    uint16_t len;
+    uint8_t mpls_tc;
+    uint8_t[3] pad;
+};
+
+struct ofp_action_set_mpls_ttl {
+    uint16_t type;
+    uint16_t len;
+    uint8_t mpls_ttl;
+    uint8_t[3] pad;
+};
+
+struct ofp_action_dec_mpls_ttl {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_action_push_vlan {
+    uint16_t type;
+    uint16_t len;
+    uint16_t ethertype;
+    uint8_t[2] pad;
+};
+
+struct ofp_action_pop_vlan {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_action_push_mpls {
+    uint16_t type;
+    uint16_t len;
+    uint16_t ethertype;
+    uint8_t[2] pad;
+};
+
+struct ofp_action_pop_mpls {
+    uint16_t type;
+    uint16_t len;
+    uint16_t ethertype;
+    uint8_t[2] pad;
+};
+
+struct ofp_action_set_queue {
+    uint16_t type;
+    uint16_t len;
+    uint32_t queue_id;
+};
+
+struct ofp_action_group {
+    uint16_t type;
+    uint16_t len;
+    uint32_t group_id;
+};
+
+struct ofp_action_set_nw_ttl {
+    uint16_t type;
+    uint16_t len;
+    uint8_t nw_ttl;
+    uint8_t[3] pad;
+};
+
+struct ofp_action_dec_nw_ttl {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_action_experimenter {
+    uint16_t type;
+    uint16_t len;
+    uint32_t experimenter;
+    of_octets_t data;
+};
+
+struct ofp_action {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_packet_out {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t buffer_id;
+    of_port_no_t in_port;
+    uint16_t actions_len;
+    uint8_t[6] pad;
+    list(of_action_t) actions;
+    of_octets_t data;
+};
+
+struct ofp_match_v2 {
+    uint16_t type;
+    uint16_t length;
+    of_port_no_t in_port;
+    of_wc_bmap_t wildcards;
+    of_mac_addr_t eth_src;
+    of_mac_addr_t eth_src_mask;
+    of_mac_addr_t eth_dst;
+    of_mac_addr_t eth_dst_mask;
+    uint16_t vlan_vid;
+    uint8_t vlan_pcp;
+    uint8_t[1] pad1;
+    uint16_t eth_type;
+    uint8_t ip_dscp;
+    uint8_t ip_proto;
+    uint32_t ipv4_src;
+    uint32_t ipv4_src_mask;
+    uint32_t ipv4_dst;
+    uint32_t ipv4_dst_mask;
+    uint16_t tcp_src;
+    uint16_t tcp_dst;
+    uint32_t mpls_label;
+    uint8_t mpls_tc;
+    uint8_t[3] pad2;
+    uint64_t metadata;
+    uint64_t metadata_mask;
+};
+
+struct ofp_instruction {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_instruction_goto_table {
+    uint16_t type;
+    uint16_t len;
+    uint8_t table_id;
+    uint8_t[3] pad;
+};
+
+struct ofp_instruction_write_metadata {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+    uint64_t metadata;
+    uint64_t metadata_mask;
+};
+
+struct ofp_instruction_write_actions {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+    list(of_action_t) actions;
+};
+
+struct ofp_instruction_apply_actions {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+    list(of_action_t) actions;
+};
+
+struct ofp_instruction_clear_actions {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_instruction_experimenter {
+    uint16_t type;		
+    uint16_t len;
+    uint32_t experimenter;
+    of_octets_t data;
+};
+
+struct ofp_flow_add {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    uint16_t flags;
+    uint8_t[2] pad;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+struct ofp_flow_modify {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    uint16_t flags;
+    uint8_t[2] pad;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+struct ofp_flow_modify_strict {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    uint16_t flags;
+    uint8_t[2] pad;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+struct ofp_flow_delete {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    uint16_t flags;
+    uint8_t[2] pad;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+struct ofp_flow_delete_strict {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    uint8_t table_id;
+    of_fm_cmd_t _command;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint16_t priority;
+    uint32_t buffer_id;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    uint16_t flags;
+    uint8_t[2] pad;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+struct ofp_bucket {
+    uint16_t len;
+    uint16_t weight;
+    of_port_no_t watch_port;
+    uint32_t watch_group;
+    uint8_t[4] pad;
+    list(of_action_t) actions;
+};
+
+struct ofp_group_mod {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t command;
+    uint8_t group_type;
+    uint8_t pad;
+    uint32_t group_id;
+    list(of_bucket_t) buckets;
+};
+
+struct ofp_flow_removed {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint64_t cookie;
+    uint16_t priority;
+    uint8_t reason;
+    uint8_t table_id;
+    uint32_t duration_sec;
+    uint32_t duration_nsec;
+    uint16_t idle_timeout;
+    uint8_t[2] pad2;
+    uint64_t packet_count;
+    uint64_t byte_count;
+    of_match_t match;
+};
+
+struct ofp_error_msg {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t err_type;
+    uint16_t code;
+    of_octets_t data;
+};
+
+// STATS ENTRIES:  flow, table, port, group, group_desc
+
+struct ofp_flow_stats_entry {
+    uint16_t length;
+    uint8_t table_id;
+    uint8_t pad;
+    uint32_t duration_sec;
+    uint32_t duration_nsec;
+    uint16_t priority;
+    uint16_t idle_timeout;
+    uint16_t hard_timeout;
+    uint8_t[6] pad2;
+    uint64_t cookie;
+    uint64_t packet_count;
+    uint64_t byte_count;
+    of_match_t match;
+    list(of_instruction_t) instructions;
+};
+
+struct ofp_table_stats_entry {
+    uint8_t table_id;
+    uint8_t[7] pad;
+    of_table_name_t name;
+    of_wc_bmap_t wildcards;
+    of_match_bmap_t match;
+    uint32_t instructions;
+    uint32_t write_actions;
+    uint32_t apply_actions;
+    uint32_t config;
+    uint32_t max_entries;
+    uint32_t active_count;
+    uint64_t lookup_count;
+    uint64_t matched_count;
+};
+
+struct ofp_port_stats_entry {
+    of_port_no_t port_no;
+    uint8_t[4] pad;
+    uint64_t rx_packets;
+    uint64_t tx_packets;
+    uint64_t rx_bytes;
+    uint64_t tx_bytes;
+    uint64_t rx_dropped;
+    uint64_t tx_dropped;
+    uint64_t rx_errors;
+    uint64_t tx_errors;
+    uint64_t rx_frame_err;
+    uint64_t rx_over_err;
+    uint64_t rx_crc_err;
+    uint64_t collisions;
+};
+
+struct ofp_queue_stats_entry {
+    of_port_no_t port_no;
+    uint32_t queue_id;
+    uint64_t tx_bytes;
+    uint64_t tx_packets;
+    uint64_t tx_errors;
+};
+
+struct ofp_bucket_counter {
+    uint64_t packet_count;
+    uint64_t byte_count;
+};
+
+struct ofp_group_stats_entry {
+    uint16_t length;
+    uint8_t[2] pad;
+    uint32_t group_id;
+    uint32_t ref_count;
+    uint8_t[4] pad2;
+    uint64_t packet_count;
+    uint64_t byte_count;
+    list(of_bucket_counter_t) bucket_stats;
+};
+
+struct ofp_group_desc_stats_entry {
+    uint16_t length;
+    uint8_t type;
+    uint8_t pad;
+    uint32_t group_id;
+    list(of_bucket_t) buckets;
+};
+
+// STATS:  Desc, flow, agg, table, port, queue, group, group_desc, experi
+
+struct ofp_desc_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+};
+
+struct ofp_desc_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    of_desc_str_t mfr_desc;
+    of_desc_str_t hw_desc;
+    of_desc_str_t sw_desc;
+    of_serial_num_t serial_num;
+    of_desc_str_t dp_desc;
+};
+
+struct ofp_flow_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    uint8_t table_id;
+    uint8_t[3] pad;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    uint8_t[4] pad2;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    of_match_t match;
+};
+
+struct ofp_flow_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    list(of_flow_stats_entry_t) entries;
+};
+
+struct ofp_aggregate_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    uint8_t table_id;
+    uint8_t[3] pad;
+    of_port_no_t out_port;
+    uint32_t out_group;
+    uint8_t[4] pad2;
+    uint64_t cookie;
+    uint64_t cookie_mask;
+    of_match_t match;
+};
+
+struct ofp_aggregate_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    uint64_t packet_count;
+    uint64_t byte_count;
+    uint32_t flow_count;
+    uint8_t[4] pad;
+};
+
+struct ofp_table_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+};
+
+struct ofp_table_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    list(of_table_stats_entry_t) entries;
+};
+
+struct ofp_port_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    of_port_no_t port_no;
+    uint8_t[4] pad;
+};
+
+struct ofp_port_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    list(of_port_stats_entry_t) entries;
+};
+
+struct ofp_queue_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    of_port_no_t port_no;
+    uint32_t queue_id;
+};
+
+struct ofp_queue_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    list(of_queue_stats_entry_t) entries;
+};
+
+struct ofp_group_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    uint32_t group_id;
+    uint8_t[4] pad;
+};
+
+struct ofp_group_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    list(of_group_stats_entry_t) entries;
+};
+
+struct ofp_group_desc_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+};
+
+struct ofp_group_desc_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    list(of_group_desc_stats_entry_t) entries;
+};
+
+struct ofp_experimenter_stats_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    uint32_t experimenter;
+    uint8_t[4] pad;
+    of_octets_t data;
+};
+
+struct ofp_experimenter_stats_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type;
+    uint16_t flags;
+    uint8_t[4] pad;
+    uint32_t experimenter;
+    uint8_t[4] pad;
+    of_octets_t data;
+};
+
+// END OF STATS OBJECTS
+
+struct ofp_queue_prop {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+};
+
+struct ofp_queue_prop_min_rate {
+    uint16_t type;
+    uint16_t len;
+    uint8_t[4] pad;
+    uint16_t rate;
+    uint8_t[6] pad;
+};
+
+struct ofp_packet_queue {
+    uint32_t queue_id;
+    uint16_t len;
+    uint8_t[2] pad;
+    list(of_queue_prop_t) properties;
+};
+
+struct ofp_queue_get_config_request {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    of_port_no_t port;
+    uint8_t[4] pad;
+};
+
+struct ofp_queue_get_config_reply {
+    uint8_t version;
+    uint8_t type;
+    uint16_t length;
+    uint32_t xid;
+    of_port_no_t port;
+    uint8_t[4] pad;
+    list(of_packet_queue_t) queues;
+};