// 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 4

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 = 0,

    OFP_FLOW_PERMANENT = 0,

    OFP_DEFAULT_PRIORITY = 0x8000,

    OFP_NO_BUFFER = 0xffffffff,

    DESC_STR_LEN = 256,
    SERIAL_NUM_LEN = 32,

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

enum ofp_port_no {
    OFPP_ANY = 0xffffffff,
};

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,
};

enum ofp_type {
    OFPT_HELLO = 0,
    OFPT_ERROR = 1,
    OFPT_ECHO_REQUEST = 2,
    OFPT_ECHO_REPLY = 3,
    OFPT_EXPERIMENTER = 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_GROUP_MOD = 15,
    OFPT_PORT_MOD = 16,
    OFPT_TABLE_MOD = 17,
    OFPT_MULTIPART_REQUEST = 18,
    OFPT_MULTIPART_REPLY = 19,
    OFPT_BARRIER_REQUEST = 20,
    OFPT_BARRIER_REPLY = 21,
    OFPT_QUEUE_GET_CONFIG_REQUEST = 22,
    OFPT_QUEUE_GET_CONFIG_REPLY = 23,
    OFPT_ROLE_REQUEST = 24,
    OFPT_ROLE_REPLY = 25,
    OFPT_GET_ASYNC_REQUEST = 26,
    OFPT_GET_ASYNC_REPLY = 27,
    OFPT_SET_ASYNC = 28,
    OFPT_METER_MOD = 29,
};

enum ofp_config_flags {
    OFPC_FRAG_NORMAL = 0,
    OFPC_FRAG_DROP = 1,
    OFPC_FRAG_REASM = 2,
    OFPC_FRAG_MASK = 3,
};

enum ofp_table_config {
    OFPTC_DEPRECATED_MASK = 0x3,
};

enum ofp_table {
    OFPTT_MAX = 0xfe,
    OFPTT_ALL = 0xff,
};

enum ofp_capabilities {
    OFPC_FLOW_STATS = 0x1,
    OFPC_TABLE_STATS = 0x2,
    OFPC_PORT_STATS = 0x4,
    OFPC_GROUP_STATS = 0x8,
    OFPC_IP_REASM = 0x20,
    OFPC_QUEUE_STATS = 0x40,
    OFPC_PORT_BLOCKED = 0x100,
};

enum ofp_port_config {
    OFPPC_PORT_DOWN = 0x1,
    OFPPC_NO_RECV = 0x4,
    OFPPC_NO_FWD = 0x20,
    OFPPC_NO_PACKET_IN = 0x40,
};

enum ofp_port_state {
    OFPPS_LINK_DOWN = 0x1,
    OFPPS_BLOCKED = 0x2,
    OFPPS_LIVE = 0x4,
};

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_40GB_FD = 0x80,
    OFPPF_100GB_FD = 0x100,
    OFPPF_1TB_FD = 0x200,
    OFPPF_OTHER = 0x400,
    OFPPF_COPPER = 0x800,
    OFPPF_FIBER = 0x1000,
    OFPPF_AUTONEG = 0x2000,
    OFPPF_PAUSE = 0x4000,
    OFPPF_PAUSE_ASYM = 0x8000,
};

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

enum ofp_match_type {
    OFPMT_STANDARD = 0,
    OFPMT_OXM = 1,
};

enum ofp_oxm_class {
    OFPXMC_NXM_0 = 0,
    OFPXMC_NXM_1 = 1,
    OFPXMC_OPENFLOW_BASIC = 0x8000,
    OFPXMC_EXPERIMENTER = 0xffff,
};

enum ofp_vlan_id {
    OFPVID_NONE = 0,
    OFPVID_PRESENT = 0x1000,
};

enum ofp_ipv6exthdr_flags {
    OFPIEH_NONEXT = 0x1,
    OFPIEH_ESP = 0x2,
    OFPIEH_AUTH = 0x4,
    OFPIEH_DEST = 0x8,
    OFPIEH_FRAG = 0x10,
    OFPIEH_ROUTER = 0x20,
    OFPIEH_HOP = 0x40,
    OFPIEH_UNREP = 0x80,
    OFPIEH_UNSEQ = 0x100,
};

enum ofp_action_type {
    OFPAT_OUTPUT = 0,
    OFPAT_COPY_TTL_OUT = 0xb,
    OFPAT_COPY_TTL_IN = 0xc,
    OFPAT_SET_MPLS_TTL = 0xf,
    OFPAT_DEC_MPLS_TTL = 0x10,
    OFPAT_PUSH_VLAN = 0x11,
    OFPAT_POP_VLAN = 0x12,
    OFPAT_PUSH_MPLS = 0x13,
    OFPAT_POP_MPLS = 0x14,
    OFPAT_SET_QUEUE = 0x15,
    OFPAT_GROUP = 0x16,
    OFPAT_SET_NW_TTL = 0x17,
    OFPAT_DEC_NW_TTL = 0x18,
    OFPAT_SET_FIELD = 0x19,
    OFPAT_PUSH_PBB = 0x1a,
    OFPAT_POP_PBB = 0x1b,
    OFPAT_EXPERIMENTER = 0xffff,
};

enum ofp_controller_max_len {
    OFPCML_MAX = 0xffe5,
    OFPCML_NO_BUFFER = 0xffff,
};

enum ofp_instruction_type {
    OFPIT_GOTO_TABLE = 0x1,
    OFPIT_WRITE_METADATA = 0x2,
    OFPIT_WRITE_ACTIONS = 0x3,
    OFPIT_APPLY_ACTIONS = 0x4,
    OFPIT_CLEAR_ACTIONS = 0x5,
    OFPIT_METER = 0x6,
    OFPIT_EXPERIMENTER = 0xffff,
};

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_RESET_COUNTS = 0x4,
    OFPFF_NO_PKT_COUNTS = 0x8,
    OFPFF_NO_BYT_COUNTS = 0x10,
};

enum ofp_group {
    OFPG_MAX = 0xffffff00,
    OFPG_ALL = 0xfffffffc,
    OFPG_ANY = 0xffffffff,
};

enum ofp_group_mod_command {
    OFPGC_ADD = 0,
    OFPGC_MODIFY = 1,
    OFPGC_DELETE = 2,
};

enum ofp_group_type {
    OFPGT_ALL = 0,
    OFPGT_SELECT = 1,
    OFPGT_INDIRECT = 2,
    OFPGT_FF = 3,
};

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

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

enum ofp_meter {
    OFPM_MAX = 0xffff0000,
    OFPM_SLOWPATH = 0xfffffffd,
    OFPM_CONTROLLER = 0xfffffffe,
    OFPM_ALL = 0xffffffff,
};

enum ofp_meter_band_type {
    OFPMBT_DROP = 0x1,
    OFPMBT_DSCP_REMARK = 0x2,
    OFPMBT_EXPERIMENTER = 0xffff,
};

enum ofp_meter_mod_command {
    OFPMC_ADD = 0,
    OFPMC_MODIFY = 1,
    OFPMC_DELETE = 2,
};

enum ofp_meter_flags {
    OFPMF_KBPS = 0x1,
    OFPMF_PKTPS = 0x2,
    OFPMF_BURST = 0x4,
    OFPMF_STATS = 0x8,
};

enum ofp_error_type {
    OFPET_HELLO_FAILED = 0,
    OFPET_BAD_REQUEST = 1,
    OFPET_BAD_ACTION = 2,
    OFPET_BAD_INSTRUCTION = 3,
    OFPET_BAD_MATCH = 4,
    OFPET_FLOW_MOD_FAILED = 5,
    OFPET_GROUP_MOD_FAILED = 6,
    OFPET_PORT_MOD_FAILED = 7,
    OFPET_TABLE_MOD_FAILED = 8,
    OFPET_QUEUE_OP_FAILED = 9,
    OFPET_SWITCH_CONFIG_FAILED = 10,
    OFPET_ROLE_REQUEST_FAILED = 11,
    OFPET_METER_MOD_FAILED = 12,
    OFPET_TABLE_FEATURES_FAILED = 13,
    OFPET_EXPERIMENTER = 0xffff,
};

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_MULTIPART = 2,
    OFPBRC_BAD_EXPERIMENTER = 3,
    OFPBRC_BAD_EXP_TYPE = 4,
    OFPBRC_EPERM = 5,
    OFPBRC_BAD_LEN = 6,
    OFPBRC_BUFFER_EMPTY = 7,
    OFPBRC_BUFFER_UNKNOWN = 8,
    OFPBRC_BAD_TABLE_ID = 9,
    OFPBRC_IS_SLAVE = 10,
    OFPBRC_BAD_PORT = 11,
    OFPBRC_BAD_PACKET = 12,
    OFPBRC_MULTIPART_BUFFER_OVERFLOW = 13,
};

enum ofp_bad_action_code {
    OFPBAC_BAD_TYPE = 0,
    OFPBAC_BAD_LEN = 1,
    OFPBAC_BAD_EXPERIMENTER = 2,
    OFPBAC_BAD_EXP_TYPE = 3,
    OFPBAC_BAD_OUT_PORT = 4,
    OFPBAC_BAD_ARGUMENT = 5,
    OFPBAC_EPERM = 6,
    OFPBAC_TOO_MANY = 7,
    OFPBAC_BAD_QUEUE = 8,
    OFPBAC_BAD_OUT_GROUP = 9,
    OFPBAC_MATCH_INCONSISTENT = 10,
    OFPBAC_UNSUPPORTED_ORDER = 11,
    OFPBAC_BAD_TAG = 12,
    OFPBAC_BAD_SET_TYPE = 13,
    OFPBAC_BAD_SET_LEN = 14,
    OFPBAC_BAD_SET_ARGUMENT = 15,
};

enum ofp_bad_instruction_code {
    OFPBIC_UNKNOWN_INST = 0,
    OFPBIC_UNSUP_INST = 1,
    OFPBIC_BAD_TABLE_ID = 2,
    OFPBIC_UNSUP_METADATA = 3,
    OFPBIC_UNSUP_METADATA_MASK = 4,
    OFPBIC_BAD_EXPERIMENTER = 5,
    OFPBIC_BAD_EXP_TYPE = 6,
    OFPBIC_BAD_LEN = 7,
    OFPBIC_EPERM = 8,
};

enum ofp_bad_match_code {
    OFPBMC_BAD_TYPE = 0,
    OFPBMC_BAD_LEN = 1,
    OFPBMC_BAD_TAG = 2,
    OFPBMC_BAD_DL_ADDR_MASK = 3,
    OFPBMC_BAD_NW_ADDR_MASK = 4,
    OFPBMC_BAD_WILDCARDS = 5,
    OFPBMC_BAD_FIELD = 6,
    OFPBMC_BAD_VALUE = 7,
    OFPBMC_BAD_MASK = 8,
    OFPBMC_BAD_PREREQ = 9,
    OFPBMC_DUP_FIELD = 10,
    OFPBMC_EPERM = 11,
};

enum ofp_flow_mod_failed_code {
    OFPFMFC_UNKNOWN = 0,
    OFPFMFC_TABLE_FULL = 1,
    OFPFMFC_BAD_TABLE_ID = 2,
    OFPFMFC_OVERLAP = 3,
    OFPFMFC_EPERM = 4,
    OFPFMFC_BAD_TIMEOUT = 5,
    OFPFMFC_BAD_COMMAND = 6,
    OFPFMFC_BAD_FLAGS = 7,
};

enum ofp_group_mod_failed_code {
    OFPGMFC_GROUP_EXISTS = 0,
    OFPGMFC_INVALID_GROUP = 1,
    OFPGMFC_WEIGHT_UNSUPPORTED = 2,
    OFPGMFC_OUT_OF_GROUPS = 3,
    OFPGMFC_OUT_OF_BUCKETS = 4,
    OFPGMFC_CHAINING_UNSUPPORTED = 5,
    OFPGMFC_WATCH_UNSUPPORTED = 6,
    OFPGMFC_LOOP = 7,
    OFPGMFC_UNKNOWN_GROUP = 8,
    OFPGMFC_CHAINED_GROUP = 9,
    OFPGMFC_BAD_TYPE = 10,
    OFPGMFC_BAD_COMMAND = 11,
    OFPGMFC_BAD_BUCKET = 12,
    OFPGMFC_BAD_WATCH = 13,
    OFPGMFC_EPERM = 14,
};

enum ofp_port_mod_failed_code {
    OFPPMFC_BAD_PORT = 0,
    OFPPMFC_BAD_HW_ADDR = 1,
    OFPPMFC_BAD_CONFIG = 2,
    OFPPMFC_BAD_ADVERTISE = 3,
    OFPPMFC_EPERM = 4,
};

enum ofp_table_mod_failed_code {
    OFPTMFC_BAD_TABLE = 0,
    OFPTMFC_BAD_CONFIG = 1,
    OFPTMFC_EPERM = 2,
};

enum ofp_queue_op_failed_code {
    OFPQOFC_BAD_PORT = 0,
    OFPQOFC_BAD_QUEUE = 1,
    OFPQOFC_EPERM = 2,
};

enum ofp_switch_config_failed_code {
    OFPSCFC_BAD_FLAGS = 0,
    OFPSCFC_BAD_LEN = 1,
    OFPSCFC_EPERM = 2,
};

enum ofp_role_request_failed_code {
    OFPRRFC_STALE = 0,
    OFPRRFC_UNSUP = 1,
    OFPRRFC_BAD_ROLE = 2,
};

enum ofp_meter_mod_failed_code {
    OFPMMFC_UNKNOWN = 0,
    OFPMMFC_METER_EXISTS = 1,
    OFPMMFC_INVALID_METER = 2,
    OFPMMFC_UNKNOWN_METER = 3,
    OFPMMFC_BAD_COMMAND = 4,
    OFPMMFC_BAD_FLAGS = 5,
    OFPMMFC_BAD_RATE = 6,
    OFPMMFC_BAD_BURST = 7,
    OFPMMFC_BAD_BAND = 8,
    OFPMMFC_BAD_BAND_VALUE = 9,
    OFPMMFC_OUT_OF_METERS = 10,
    OFPMMFC_OUT_OF_BANDS = 11,
};

enum ofp_table_features_failed_code {
    OFPTFFC_BAD_TABLE = 0,
    OFPTFFC_BAD_METADATA = 1,
    OFPTFFC_BAD_TYPE = 2,
    OFPTFFC_BAD_LEN = 3,
    OFPTFFC_BAD_ARGUMENT = 4,
    OFPTFFC_EPERM = 5,
};

enum ofp_multipart_types {
    OFPMP_DESC = 0,
    OFPMP_FLOW = 1,
    OFPMP_AGGREGATE = 2,
    OFPMP_TABLE = 3,
    OFPMP_PORT_STATS = 4,
    OFPMP_QUEUE = 5,
    OFPMP_GROUP = 6,
    OFPMP_GROUP_DESC = 7,
    OFPMP_GROUP_FEATURES = 8,
    OFPMP_METER = 9,
    OFPMP_METER_CONFIG = 10,
    OFPMP_METER_FEATURES = 11,
    OFPMP_TABLE_FEATURES = 12,
    OFPMP_PORT_DESC = 13,
    OFPMP_EXPERIMENTER = 0xffff,
};

enum ofp_multipart_request_flags {
    OFPMPF_REQ_MORE = 0x1,
};

enum ofp_multipart_reply_flags {
    OFPMPF_REPLY_MORE = 0x1,
};

enum ofp_table_feature_prop_type {
    OFPTFPT_INSTRUCTIONS = 0,
    OFPTFPT_INSTRUCTIONS_MISS = 1,
    OFPTFPT_NEXT_TABLES = 2,
    OFPTFPT_NEXT_TABLES_MISS = 3,
    OFPTFPT_WRITE_ACTIONS = 4,
    OFPTFPT_WRITE_ACTIONS_MISS = 5,
    OFPTFPT_APPLY_ACTIONS = 6,
    OFPTFPT_APPLY_ACTIONS_MISS = 7,
    OFPTFPT_MATCH = 8,
    OFPTFPT_WILDCARDS = 0xa,
    OFPTFPT_WRITE_SETFIELD = 0xc,
    OFPTFPT_WRITE_SETFIELD_MISS = 0xd,
    OFPTFPT_APPLY_SETFIELD = 0xe,
    OFPTFPT_APPLY_SETFIELD_MISS = 0xf,
    OFPTFPT_EXPERIMENTER = 0xfffe,
    OFPTFPT_EXPERIMENTER_MISS = 0xffff,
};

enum ofp_group_capabilities {
    OFPGFC_SELECT_WEIGHT = 0x1,
    OFPGFC_SELECT_LIVENESS = 0x2,
    OFPGFC_CHAINING = 0x4,
    OFPGFC_CHAINING_CHECKS = 0x8,
};

enum ofp_queue_properties {
    OFPQT_MIN_RATE = 0x1,
    OFPQT_MAX_RATE = 0x2,
    OFPQT_EXPERIMENTER = 0xffff,
};

enum ofp_controller_role {
    OFPCR_ROLE_NOCHANGE = 0,
    OFPCR_ROLE_EQUAL = 1,
    OFPCR_ROLE_MASTER = 2,
    OFPCR_ROLE_SLAVE = 3,
};

struct ofp_header {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
};

// Special structures used for managing scalar list elements
struct ofp_uint32 {
    uint32_t value;
};

// Special structures used for managing scalar list elements
struct ofp_uint8 {
    uint8_t value;
};

struct ofp_hello_elem {
    uint16_t type;
    uint16_t length;
};

struct ofp_hello_elem_versionbitmap {
    uint16_t type;
    uint16_t length;
    list(of_uint32_t) bitmaps;
};

struct ofp_hello {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    list(of_hello_elem_t) elements;
};

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 auxiliary_id;
    uint8_t[2] pad;
    uint32_t capabilities;
    uint32_t reserved;
};

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;
};

// FIXME Does this need to be v4?
struct ofp_match_v3 {
    uint16_t type;
    uint16_t length;
    list(of_oxm_t) oxm_list;
};

struct ofp_oxm_experimenter_header {
    uint32_t oxm_header;
    uint32_t experimenter;
    of_octets_t data;
};

// This looks like an action header, but is standalone.  See 
// ofp_table_features_prop_actions
struct ofp_action_id {
    uint16_t type;
    uint16_t len;
    uint8_t[4] pad;
};

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_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_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_set_field {
    uint16_t type;
    uint16_t len;
    of_octets_t field;
};

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

struct ofp_action_pop_pbb {
    uint16_t type;
    uint16_t len;
    uint8_t[4] pad;
};

struct ofp_action_push_pbb {
    uint16_t type;
    uint16_t len;
    uint16_t ethertype;
    uint8_t[2] pad;
};

struct ofp_action {
    uint16_t type;
    uint16_t len;
    uint8_t[4] pad;
};

struct ofp_instruction {
    uint16_t type;
    uint16_t len;
};

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_meter {
    uint16_t type;
    uint16_t len;
    uint32_t meter_id;
};

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_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_packet_in {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint32_t buffer_id;
    uint16_t total_len;
    uint8_t reason;
    uint8_t table_id;
    uint64_t cookie;
    of_match_t match;
    uint8_t[2] pad;
    of_octets_t data; /* FIXME: Ensure total_len gets updated */
};

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;
    uint16_t hard_timeout;
    uint64_t packet_count;
    uint64_t byte_count;
    of_match_t match;
};

struct ofp_meter_band {
    uint16_t        type;
    uint16_t        len;
//    uint32_t        rate;  // These are excluded b/c this is the header
//    uint32_t        burst_size;  // These are excluded b/c this is the header
};

struct ofp_meter_band_drop {
    uint16_t        type;
    uint16_t        len;
    uint32_t        rate;
    uint32_t        burst_size;
    uint8_t[4]      pad;
};

struct ofp_meter_band_dscp_remark {
    uint16_t        type;
    uint16_t        len;
    uint32_t        rate;
    uint32_t        burst_size;
    uint8_t         prec_level;
    uint8_t[3]      pad;
};

struct ofp_meter_band_experimenter {
    uint16_t        type;
    uint16_t        len;
    uint32_t        rate;
    uint32_t        burst_size;
    uint32_t        experimenter;
};

struct ofp_meter_mod {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t command;
    uint16_t flags;
    uint32_t meter_id;
    list(of_meter_band_t) meters;
};

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;
};

//struct ofp_error_experimenter_msg {
//    uint8_t version;
//    uint8_t type;
//    uint16_t length;
//    uint32_t xid;
//    uint16_t err_type;
//    uint16_t subtype;
//    uint32_t experimenter;
//    of_octets_t data;
//};

// STATS ENTRIES: flow, table, port, queue, group stats, group desc stats

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[3] pad;
    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;
    uint32_t duration_sec;
    uint32_t duration_nsec;
};

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;
    uint32_t duration_sec;
    uint32_t duration_nsec;
};

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] pad;
    uint64_t packet_count;
    uint64_t byte_count;
    uint32_t duration_sec;
    uint32_t duration_nsec;
    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, group_feat, 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;
};

// FIXME: These are padded to 8 byte align beyond the length indicated

struct ofp_table_feature_prop {
    uint16_t         type;
    uint16_t         length;
};

struct ofp_table_feature_prop_instructions {
    uint16_t         type;
    uint16_t         length;
    // FIXME Check if instruction_t is right for ids here
    list(of_instruction_t)   instruction_ids;
};

struct ofp_table_feature_prop_instructions_miss {
    uint16_t         type;
    uint16_t         length;
    list(of_instruction_t)   instruction_ids;
};

struct ofp_table_feature_prop_next_tables {
    uint16_t         type;
    uint16_t         length;
    list(of_uint8_t) next_table_ids;
};

struct ofp_table_feature_prop_next_tables_miss {
    uint16_t         type;
    uint16_t         length;
    list(of_uint8_t) next_table_ids;
};

struct ofp_table_feature_prop_write_actions {
    uint16_t         type;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct ofp_table_feature_prop_write_actions_miss {
    uint16_t         type;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct ofp_table_feature_prop_apply_actions {
    uint16_t         type;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct ofp_table_feature_prop_apply_actions_miss {
    uint16_t         type;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct ofp_table_feature_prop_match {
    uint16_t         type;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct ofp_table_feature_prop_wildcards {
    uint16_t         type;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct ofp_table_feature_prop_write_setfield {
    uint16_t         type;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct ofp_table_feature_prop_write_setfield_miss {
    uint16_t         type;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct ofp_table_feature_prop_apply_setfield {
    uint16_t         type;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct ofp_table_feature_prop_apply_setfield_miss {
    uint16_t         type;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct ofp_table_feature_prop_experimenter {
    uint16_t         type;
    uint16_t         length;
    uint32_t         experimenter;
    uint32_t         subtype;
    of_octets_t      experimenter_data;
};

// Not yet supported
// struct ofp_table_feature_prop_experimenter_miss {
//     uint16_t         type;
//     uint16_t         length;
//     uint32_t         experimenter;
//     uint32_t         subtype;
//     of_octets_t      experimenter_data;
// };

struct ofp_table_features {
    uint16_t length;
    uint8_t table_id;
    uint8_t[5] pad;
    of_table_name_t name;
    uint64_t metadata_match;
    uint64_t metadata_write;
    uint32_t config;
    uint32_t max_entries;
    list(of_table_feature_prop_t) properties;
};

struct ofp_meter_features {
    uint32_t    max_meter;
    uint32_t    band_types;
    uint32_t    capabilities;
    uint8_t     max_bands;
    uint8_t     max_color;
    uint8_t[2]     pad;
};

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_group_features_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_features_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 types;
    uint32_t capabilities;
    uint32_t max_groups_all;
    uint32_t max_groups_select;
    uint32_t max_groups_indirect;
    uint32_t max_groups_ff;
    uint32_t actions_all;
    uint32_t actions_select;
    uint32_t actions_indirect;
    uint32_t actions_ff;
};

struct ofp_meter_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 meter_id;
    uint8_t[4] pad;
};

struct ofp_meter_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_meter_stats_t) entries;
};

struct ofp_meter_config_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 meter_id;
    uint8_t[4] pad;
};

struct ofp_meter_config_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_meter_band_t) entries;
};

// FIXME stats added to get things working
struct ofp_meter_features_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;
};

// FIXME stats added to get things working
struct ofp_meter_features_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_meter_features_t features;
};

// FIXME stats added to get things working
struct ofp_table_features_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;
    list(of_table_features_t) entries;
};

// FIXME stats added to get things working
struct ofp_table_features_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_features_t) entries;
};

// FIXME stats added to get things working
struct ofp_port_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;
};

// FIXME stats added to get things working
struct ofp_port_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_port_desc_t) entries;
};

struct ofp_meter_band_stats {
    uint64_t        packet_band_count;
    uint64_t        byte_band_count;
};

struct ofp_meter_stats {
    uint32_t        meter_id;
    uint16_t        len;
    uint8_t[6]         pad;
    uint32_t        flow_count;
    uint64_t        packet_in_count;
    uint64_t        byte_in_count;
    uint32_t   duration_sec;
    uint32_t   duration_nsec;
    list(of_meter_band_stats_t) band_stats;
};

struct ofp_meter_config {
    uint16_t        length;
    uint16_t        flags;
    uint32_t        meter_id;
    list(of_meter_band_t) entries;
};

struct ofp_experimenter_multipart_header {
    uint32_t experimenter;
    uint32_t subtype;
};

// 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_queue_prop_max_rate {
    uint16_t type;
    uint16_t len;
    uint8_t[4] pad;
    uint16_t rate;
    uint8_t[6] pad;
};

struct ofp_queue_prop_experimenter {
    uint16_t type;
    uint16_t len;
    uint8_t[4] pad;
    uint32_t experimenter;
    uint8_t[4] pad;
    of_octets_t data;
};

struct ofp_packet_queue {
    uint32_t queue_id;
    of_port_no_t port;
    uint16_t len;
    uint8_t[6] 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;
};

struct ofp_role_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint32_t role;
    uint8_t[4] pad;
    uint64_t generation_id;
};

struct ofp_role_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_octets_t data;
};

////////////////////////////////////////////////////////////////
// FIXME understand async; where do bitmasks live?
// Determine bitmap type for masks below.
// DOCUMENT masks where uint32_t[0] is interest for equal/master
//   while uint32_t[1] is interest for slave
////////////////////////////////////////////////////////////////

struct ofp_async_get_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint32_t packet_in_mask_equal_master;
    uint32_t packet_in_mask_slave;
    uint32_t port_status_mask_equal_master;
    uint32_t port_status_mask_slave;
    uint32_t flow_removed_mask_equal_master;
    uint32_t flow_removed_mask_slave;
};

struct ofp_async_get_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint32_t packet_in_mask_equal_master;
    uint32_t packet_in_mask_slave;
    uint32_t port_status_mask_equal_master;
    uint32_t port_status_mask_slave;
    uint32_t flow_removed_mask_equal_master;
    uint32_t flow_removed_mask_slave;
};

struct ofp_async_set {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint32_t packet_in_mask_equal_master;
    uint32_t packet_in_mask_slave;
    uint32_t port_status_mask_equal_master;
    uint32_t port_status_mask_slave;
    uint32_t flow_removed_mask_equal_master;
    uint32_t flow_removed_mask_slave;
};
