// 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.
//
// Also derived from the OpenFlow header files which have these copyrights:
// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
// Copyright (c) 2011, 2012 Open Networking Foundation

#version 1

enum macro_definitions {
    OFP_MAX_TABLE_NAME_LEN = 32,
    OFP_MAX_PORT_NAME_LEN = 16,

    OFP_TCP_PORT = 6633,
    OFP_SSL_PORT = 6633,

    OFP_ETH_ALEN = 6,

    OFP_DEFAULT_MISS_SEND_LEN = 128,

    OFP_VLAN_NONE = 0xffff,

    OFPFW_ICMP_TYPE = 0x40,
    OFPFW_ICMP_CODE = 0x80,

    OFP_DL_TYPE_ETH2_CUTOFF = 0x600,
    OFP_DL_TYPE_NOT_ETH_TYPE = 0x5ff,

    OFP_FLOW_PERMANENT = 0,

    OFP_DEFAULT_PRIORITY = 0x8000,

    DESC_STR_LEN = 256,
    SERIAL_NUM_LEN = 32,

    OFPQ_ALL = 0xffffffff,
    OFPQ_MIN_RATE_UNCFG = 0xffff,
};

enum ofp_type {
    OFPT_HELLO = 0,
    OFPT_ERROR = 1,
    OFPT_ECHO_REQUEST = 2,
    OFPT_ECHO_REPLY = 3,
    OFPT_VENDOR = 4,
    OFPT_FEATURES_REQUEST = 5,
    OFPT_FEATURES_REPLY = 6,
    OFPT_GET_CONFIG_REQUEST = 7,
    OFPT_GET_CONFIG_REPLY = 8,
    OFPT_SET_CONFIG = 9,
    OFPT_PACKET_IN = 10,
    OFPT_FLOW_REMOVED = 11,
    OFPT_PORT_STATUS = 12,
    OFPT_PACKET_OUT = 13,
    OFPT_FLOW_MOD = 14,
    OFPT_PORT_MOD = 15,
    OFPT_STATS_REQUEST = 16,
    OFPT_STATS_REPLY = 17,
    OFPT_BARRIER_REQUEST = 18,
    OFPT_BARRIER_REPLY = 19,
    OFPT_QUEUE_GET_CONFIG_REQUEST = 20,
    OFPT_QUEUE_GET_CONFIG_REPLY = 21,
};

enum ofp_port_config {
    OFPPC_PORT_DOWN = 0x1,
    OFPPC_NO_STP = 0x2,
    OFPPC_NO_RECV = 0x4,
    OFPPC_NO_RECV_STP = 0x8,
    OFPPC_NO_FLOOD = 0x10,
    OFPPC_NO_FWD = 0x20,
    OFPPC_NO_PACKET_IN = 0x40,
};

enum ofp_port_state {
    OFPPS_STP_LISTEN = 0,
    OFPPS_LINK_DOWN = 1,
    OFPPS_STP_LEARN = 0x100,
    OFPPS_STP_FORWARD = 0x200,
    OFPPS_STP_BLOCK = 0x300,
    OFPPS_STP_MASK = 0x300,
};

enum ofp_port {
    OFPP_MAX = 0xffffff00,
    OFPP_IN_PORT = 0xfffffff8,
    OFPP_TABLE = 0xfffffff9,
    OFPP_NORMAL = 0xfffffffa,
    OFPP_FLOOD = 0xfffffffb,
    OFPP_ALL = 0xfffffffc,
    OFPP_CONTROLLER = 0xfffffffd,
    OFPP_LOCAL = 0xfffffffe,
    OFPP_NONE = 0xffffffff,
};

enum ofp_port_features {
    OFPPF_10MB_HD = 0x1,
    OFPPF_10MB_FD = 0x2,
    OFPPF_100MB_HD = 0x4,
    OFPPF_100MB_FD = 0x8,
    OFPPF_1GB_HD = 0x10,
    OFPPF_1GB_FD = 0x20,
    OFPPF_10GB_FD = 0x40,
    OFPPF_COPPER = 0x80,
    OFPPF_FIBER = 0x100,
    OFPPF_AUTONEG = 0x200,
    OFPPF_PAUSE = 0x400,
    OFPPF_PAUSE_ASYM = 0x800,
};

enum ofp_queue_properties {
    OFPQT_NONE = 0,
    OFPQT_MIN_RATE = 1,
};

enum ofp_flow_wildcards {
    OFPFW_IN_PORT = 0x1,
    OFPFW_DL_VLAN = 0x2,
    OFPFW_DL_SRC = 0x4,
    OFPFW_NW_DST_BITS = 0x6,
    OFPFW_NW_SRC_BITS = 0x6,
    OFPFW_NW_SRC_SHIFT = 0x8,
    OFPFW_DL_DST = 0x8,
    OFPFW_NW_DST_SHIFT = 0xe,
    OFPFW_DL_TYPE = 0x10,
    OFPFW_NW_PROTO = 0x20,
    OFPFW_TP_SRC = 0x40,
    OFPFW_TP_DST = 0x80,
    OFPFW_NW_SRC_ALL = 0x2000,
    OFPFW_NW_SRC_MASK = 0x3f00,
    OFPFW_NW_DST_ALL = 0x80000,
    OFPFW_NW_DST_MASK = 0xfc000,
    OFPFW_DL_VLAN_PCP = 0x100000,
    OFPFW_NW_TOS = 0x200000,
    OFPFW_ALL = 0x3fffff,
};

enum ofp_action_type {
    OFPAT_OUTPUT = 0,
    OFPAT_SET_VLAN_VID = 1,
    OFPAT_SET_VLAN_PCP = 2,
    OFPAT_STRIP_VLAN = 3,
    OFPAT_SET_DL_SRC = 4,
    OFPAT_SET_DL_DST = 5,
    OFPAT_SET_NW_SRC = 6,
    OFPAT_SET_NW_DST = 7,
    OFPAT_SET_NW_TOS = 8,
    OFPAT_SET_TP_SRC = 9,
    OFPAT_SET_TP_DST = 10,
    OFPAT_ENQUEUE = 11,
    OFPAT_VENDOR = 0xffff,
};

enum ofp_capabilities {
    OFPC_FLOW_STATS = 0x1,
    OFPC_TABLE_STATS = 0x2,
    OFPC_PORT_STATS = 0x4,
    OFPC_STP = 0x8,
    OFPC_RESERVED = 0x10,
    OFPC_IP_REASM = 0x20,
    OFPC_QUEUE_STATS = 0x40,
    OFPC_ARP_MATCH_IP = 0x80,
};

enum ofp_config_flags {
    OFPC_FRAG_NORMAL = 0x0,
    OFPC_FRAG_DROP = 0x1,
    OFPC_FRAG_REASM = 0x2,
    OFPC_FRAG_MASK = 0x3,
};

enum ofp_flow_mod_command {
    OFPFC_ADD = 0,
    OFPFC_MODIFY = 1,
    OFPFC_MODIFY_STRICT = 2,
    OFPFC_DELETE = 3,
    OFPFC_DELETE_STRICT = 4,
};

enum ofp_flow_mod_flags {
    OFPFF_SEND_FLOW_REM = 0x1,
    OFPFF_CHECK_OVERLAP = 0x2,
    OFPFF_EMERG = 0x4,
};

enum ofp_stats_reply_flags {
    OFPSF_REPLY_MORE = 0x1,
};

enum ofp_stats_types {
    OFPST_DESC = 0,
    OFPST_FLOW = 1,
    OFPST_AGGREGATE = 2,
    OFPST_TABLE = 3,
    OFPST_PORT = 4,
    OFPST_QUEUE = 5,
    OFPST_VENDOR = 0xffff,
};

enum ofp_packet_in_reason {
    OFPR_NO_MATCH = 0,
    OFPR_ACTION = 1,
};

enum ofp_flow_removed_reason {
    OFPRR_IDLE_TIMEOUT = 0,
    OFPRR_HARD_TIMEOUT = 1,
    OFPRR_DELETE = 2,
};

enum ofp_port_reason {
    OFPPR_ADD = 0,
    OFPPR_DELETE = 1,
    OFPPR_MODIFY = 2,
};

enum ofp_error_type {
    OFPET_HELLO_FAILED = 0,
    OFPET_BAD_REQUEST = 1,
    OFPET_BAD_ACTION = 2,
    OFPET_FLOW_MOD_FAILED = 3,
    OFPET_PORT_MOD_FAILED = 4,
    OFPET_QUEUE_OP_FAILED = 5,
};

enum ofp_hello_failed_code {
    OFPHFC_INCOMPATIBLE = 0,
    OFPHFC_EPERM = 1,
};

enum ofp_bad_request_code {
    OFPBRC_BAD_VERSION = 0,
    OFPBRC_BAD_TYPE = 1,
    OFPBRC_BAD_STAT = 2,
    OFPBRC_BAD_VENDOR = 3,
    OFPBRC_BAD_SUBTYPE = 4,
    OFPBRC_EPERM = 5,
    OFPBRC_BAD_LEN = 6,
    OFPBRC_BUFFER_EMPTY = 7,
    OFPBRC_BUFFER_UNKNOWN = 8,
};

enum ofp_bad_action_code {
    OFPBAC_BAD_TYPE = 0,
    OFPBAC_BAD_LEN = 1,
    OFPBAC_BAD_VENDOR = 2,
    OFPBAC_BAD_VENDOR_TYPE = 3,
    OFPBAC_BAD_OUT_PORT = 4,
    OFPBAC_BAD_ARGUMENT = 5,
    OFPBAC_EPERM = 6,
    OFPBAC_TOO_MANY = 7,
    OFPBAC_BAD_QUEUE = 8,
};

enum ofp_flow_mod_failed_code {
    OFPFMFC_ALL_TABLES_FULL = 0,
    OFPFMFC_OVERLAP = 1,
    OFPFMFC_EPERM = 2,
    OFPFMFC_BAD_EMERG_TIMEOUT = 3,
    OFPFMFC_BAD_COMMAND = 4,
    OFPFMFC_UNSUPPORTED = 5,
};

enum ofp_port_mod_failed_code {
    OFPPMFC_BAD_PORT = 0,
    OFPPMFC_BAD_HW_ADDR = 1,
};

enum ofp_queue_op_failed_code {
    OFPQOFC_BAD_PORT = 0,
    OFPQOFC_BAD_QUEUE = 1,
    OFPQOFC_EPERM = 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_port_desc {
    of_port_no_t port_no;
    of_mac_addr_t hw_addr;
    of_port_name_t name;
    uint32_t config;
    uint32_t state;
    uint32_t curr;
    uint32_t advertised;
    uint32_t supported;
    uint32_t peer;
};

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 actions;
    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;
    of_mac_addr_t hw_addr;
    uint32_t config;
    uint32_t mask;
    uint32_t advertise;
    uint8_t[4] pad;
};

struct ofp_packet_in {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint32_t buffer_id;
    uint16_t total_len;
    of_port_no_t in_port;
    uint8_t reason;
    uint8_t pad;
    of_octets_t data;
};

struct ofp_action_output {
    uint16_t type;
    uint16_t len;
    of_port_no_t port;
    uint16_t max_len;
};

struct ofp_action_set_vlan_vid {
    uint16_t type;
    uint16_t len;
    uint16_t vlan_vid;
    uint8_t[2] pad;
};

struct ofp_action_strip_vlan {
    uint16_t type;
    uint16_t len;
    uint8_t[4] 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_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_set_nw_tos {
    uint16_t type;
    uint16_t len;
    uint8_t nw_tos;
    uint8_t[3] pad;
};

struct ofp_action_experimenter {
    uint16_t type;
    uint16_t len;
    uint32_t experimenter;
    of_octets_t data;
};

struct ofp_action_enqueue {
    uint16_t type;
    uint16_t len;
    of_port_no_t port;
    uint8_t[6] pad;
    uint32_t queue_id;
};

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;
    list(of_action_t) actions;
    of_octets_t data;
};

struct ofp_match_v1 {
    of_wc_bmap_t wildcards;
    of_port_no_t in_port;
    of_mac_addr_t eth_src;
    of_mac_addr_t eth_dst;
    uint16_t vlan_vid;
    uint8_t vlan_pcp;
    uint8_t[1] pad1;
    uint16_t eth_type;
    uint8_t ip_dscp;
    uint8_t ip_proto;
    uint8_t[2] pad2;
    uint32_t ipv4_src;
    uint32_t ipv4_dst;
    uint16_t tcp_src;
    uint16_t tcp_dst;
};

struct ofp_flow_add {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_match_t match;
    uint64_t cookie;
    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;
    uint16_t flags;
    list(of_action_t) actions;
};

struct ofp_flow_modify {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_match_t match;
    uint64_t cookie;
    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;
    uint16_t flags;
    list(of_action_t) actions;
};

struct ofp_flow_modify_strict {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_match_t match;
    uint64_t cookie;
    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;
    uint16_t flags;
    list(of_action_t) actions;
};

struct ofp_flow_delete {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_match_t match;
    uint64_t cookie;
    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;
    uint16_t flags;
    list(of_action_t) actions;
};

struct ofp_flow_delete_strict {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_match_t match;
    uint64_t cookie;
    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;
    uint16_t flags;
    list(of_action_t) actions;
};

struct ofp_flow_removed {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_match_t match;
    uint64_t cookie;
    uint16_t priority;
    uint8_t reason;
    uint8_t[1] pad;
    uint32_t duration_sec;
    uint32_t duration_nsec;
    uint16_t idle_timeout;
    uint8_t[2] pad2;
    uint64_t packet_count;
    uint64_t byte_count;
};

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, queue,
struct ofp_flow_stats_entry {
    uint16_t length;
    uint8_t table_id;
    uint8_t pad;
    of_match_t match;
    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;
    list(of_action_t) actions;
};

struct ofp_table_stats_entry {
    uint8_t table_id;
    uint8_t[3] pad;
    of_table_name_t name;
    of_wc_bmap_t wildcards;
    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[6] 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;
    uint8_t[2] pad;
    uint32_t queue_id;
    uint64_t tx_bytes;
    uint64_t tx_packets;
    uint64_t tx_errors;
};

// STATS request/reply:  Desc, flow, agg, table, port, queue

struct ofp_desc_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
};

struct ofp_desc_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    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;
    of_match_t match;
    uint8_t table_id;
    uint8_t pad;
    of_port_no_t out_port;
};

struct ofp_flow_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    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;
    of_match_t match;
    uint8_t table_id;
    uint8_t pad;
    of_port_no_t out_port;
};

struct ofp_aggregate_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    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;
};

struct ofp_table_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    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;
    of_port_no_t port_no;
    uint8_t[6] 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;
    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;
    of_port_no_t port_no;
    uint8_t[2] pad;
    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;
    list(of_queue_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;
    uint32_t experimenter;
    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;
    uint32_t experimenter;
    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[2] 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[6] pad;
    list(of_packet_queue_t) queues;
};
