// 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 = 6653,
    OFP_SSL_PORT = 6653,

    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(wire_type=uint32_t, complete=False) {
    OFPP_ANY = 0xffffffff,
};

enum ofp_port(wire_type=uint32_t) {
    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(wire_type=uint8_t) {
    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_STATS_REQUEST = 18,
    OFPT_STATS_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(wire_type=uint16_t, bitmask=True) {
    OFPC_FRAG_NORMAL = 0,
    OFPC_FRAG_DROP = 1,
    OFPC_FRAG_REASM = 2,
    OFPC_FRAG_MASK = 3,
};

enum ofp_table_config(wire_type=uint32_t, bitmask=True) {
    OFPTC_DEPRECATED_MASK = 0x3,
};

enum ofp_table(wire_type=uint8_t, complete=False) {
    OFPTT_MAX = 0xfe,
    OFPTT_ALL = 0xff,
};

enum ofp_capabilities(wire_type=uint32_t, bitmask=True) {
    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(wire_type=uint32_t, bitmask=True) {
    OFPPC_PORT_DOWN = 0x1,
    OFPPC_NO_RECV = 0x4,
    OFPPC_NO_FWD = 0x20,
    OFPPC_NO_PACKET_IN = 0x40,
};

enum ofp_port_state(wire_type=uint32_t, bitmask=True) {
    OFPPS_LINK_DOWN = 0x1,
    OFPPS_BLOCKED = 0x2,
    OFPPS_LIVE = 0x4,
};

enum ofp_port_features(wire_type=uint32_t, bitmask=True) {
    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(wire_type=uint8_t) {
    OFPPR_ADD = 0,
    OFPPR_DELETE = 1,
    OFPPR_MODIFY = 2,
};

enum ofp_match_type(wire_type=uint16_t) {
    OFPMT_STANDARD = 0,
    OFPMT_OXM = 1,
};

enum ofp_oxm_class(wire_type=uint16_t) {
    OFPXMC_NXM_0 = 0,
    OFPXMC_NXM_1 = 1,
    OFPXMC_OPENFLOW_BASIC = 0x8000,
    OFPXMC_EXPERIMENTER = 0xffff,
};

enum ofp_vlan_id(wire_type=uint16_t) {
    OFPVID_NONE = 0,
    OFPVID_PRESENT = 0x1000,
};

// FIXME: OF spec specified this as '9' bits, implicitly adding
// to full byte
enum ofp_ipv6exthdr_flags(wire_type=uint16_t, bitmask=True) {
    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(wire_type=uint16_t) {
    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(wire_type=uint16_t, complete=False) {
    OFPCML_MAX = 0xffe5,
    OFPCML_NO_BUFFER = 0xffff,
};

enum ofp_instruction_type(wire_type=uint16_t, bitmask=True) {
    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(wire_type=uint8_t) {
    OFPFC_ADD = 0,
    OFPFC_MODIFY = 1,
    OFPFC_MODIFY_STRICT = 2,
    OFPFC_DELETE = 3,
    OFPFC_DELETE_STRICT = 4,
};

enum ofp_flow_mod_flags(wire_type=uint16_t, bitmask=True) {
    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(wire_type=uint32_t, complete=False) {
    OFPG_MAX = 0xffffff00,
    OFPG_ALL = 0xfffffffc,
    OFPG_ANY = 0xffffffff,
};

enum ofp_group_mod_command(wire_type=uint16_t) {
    OFPGC_ADD = 0,
    OFPGC_MODIFY = 1,
    OFPGC_DELETE = 2,
};

enum ofp_group_type(wire_type=uint8_t) {
    OFPGT_ALL = 0,
    OFPGT_SELECT = 1,
    OFPGT_INDIRECT = 2,
    OFPGT_FF = 3,
};

enum ofp_packet_in_reason(wire_type=uint8_t) {
    OFPR_NO_MATCH = 0,
    OFPR_ACTION = 1,
    OFPR_INVALID_TTL = 2,
};

enum ofp_flow_removed_reason(wire_type=uint8_t) {
    OFPRR_IDLE_TIMEOUT = 0,
    OFPRR_HARD_TIMEOUT = 1,
    OFPRR_DELETE = 2,
    OFPRR_GROUP_DELETE = 3,
};

enum ofp_meter(wire_type=uint32_t, complete=False) {
    OFPM_MAX = 0xffff0000,
    OFPM_SLOWPATH = 0xfffffffd,
    OFPM_CONTROLLER = 0xfffffffe,
    OFPM_ALL = 0xffffffff,
};

enum ofp_meter_band_type(wire_type=uint16_t) {
    OFPMBT_DROP = 0x1,
    OFPMBT_DSCP_REMARK = 0x2,
    OFPMBT_EXPERIMENTER = 0xffff,
};

enum ofp_meter_mod_command(wire_type=uint16_t) {
    OFPMC_ADD = 0,
    OFPMC_MODIFY = 1,
    OFPMC_DELETE = 2,
};

enum ofp_meter_flags(wire_type=uint16_t, bitmask=True) {
    OFPMF_KBPS = 0x1,
    OFPMF_PKTPS = 0x2,
    OFPMF_BURST = 0x4,
    OFPMF_STATS = 0x8,
};

enum ofp_error_type(wire_type=uint16_t) {
    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(wire_type=uint16_t) {
    OFPHFC_INCOMPATIBLE = 0,
    OFPHFC_EPERM = 1,
};

enum ofp_bad_request_code(wire_type=uint16_t) {
    OFPBRC_BAD_VERSION = 0,
    OFPBRC_BAD_TYPE = 1,
    OFPBRC_BAD_STAT = 2,
    OFPBRC_BAD_EXPERIMENTER = 3,
    OFPBRC_BAD_EXPERIMENTER_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(wire_type=uint16_t) {
    OFPBAC_BAD_TYPE = 0,
    OFPBAC_BAD_LEN = 1,
    OFPBAC_BAD_EXPERIMENTER = 2,
    OFPBAC_BAD_EXPERIMENTER_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(wire_type=uint16_t) {
    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_EXPERIMENTER_TYPE = 6,
    OFPBIC_BAD_LEN = 7,
    OFPBIC_EPERM = 8,
};

enum ofp_bad_match_code(wire_type=uint16_t) {
    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(wire_type=uint16_t) {
    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(wire_type=uint16_t) {
    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(wire_type=uint16_t) {
    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(wire_type=uint16_t) {
    OFPTMFC_BAD_TABLE = 0,
    OFPTMFC_BAD_CONFIG = 1,
    OFPTMFC_EPERM = 2,
};

enum ofp_queue_op_failed_code(wire_type=uint16_t) {
    OFPQOFC_BAD_PORT = 0,
    OFPQOFC_BAD_QUEUE = 1,
    OFPQOFC_EPERM = 2,
};

enum ofp_switch_config_failed_code(wire_type=uint16_t) {
    OFPSCFC_BAD_FLAGS = 0,
    OFPSCFC_BAD_LEN = 1,
    OFPSCFC_EPERM = 2,
};

enum ofp_role_request_failed_code(wire_type=uint16_t){
    OFPRRFC_STALE = 0,
    OFPRRFC_UNSUP = 1,
    OFPRRFC_BAD_ROLE = 2,
};

enum ofp_meter_mod_failed_code(wire_type=uint16_t) {
    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(wire_type=uint16_t) {
    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_stats_type(wire_type=uint16_t) {
    OFPST_DESC = 0,
    OFPST_FLOW = 1,
    OFPST_AGGREGATE = 2,
    OFPST_TABLE = 3,
    OFPST_PORT = 4,
    OFPST_QUEUE = 5,
    OFPST_GROUP = 6,
    OFPST_GROUP_DESC = 7,
    OFPST_GROUP_FEATURES = 8,
    OFPST_METER = 9,
    OFPST_METER_CONFIG = 10,
    OFPST_METER_FEATURES = 11,
    OFPST_TABLE_FEATURES = 12,
    OFPST_PORT_DESC = 13,
    OFPST_EXPERIMENTER = 0xffff,
};

enum ofp_stats_request_flags(wire_type=uint16_t, bitmask=True) {
    OFPSF_REQ_MORE = 0x1,
};

enum ofp_stats_reply_flags(wire_type=uint16_t, bitmask=True) {
    OFPSF_REPLY_MORE = 0x1,
};

enum ofp_table_feature_prop_type(wire_type=uint16_t) {
    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(wire_type=uint32_t, bitmask=True) {
    OFPGFC_SELECT_WEIGHT = 0x1,
    OFPGFC_SELECT_LIVENESS = 0x2,
    OFPGFC_CHAINING = 0x4,
    OFPGFC_CHAINING_CHECKS = 0x8,
};

enum ofp_queue_properties(wire_type=uint16_t) {
    OFPQT_MIN_RATE = 0x1,
    OFPQT_MAX_RATE = 0x2,
    OFPQT_EXPERIMENTER = 0xffff,
};

enum ofp_controller_role(wire_type=uint32_t) {
    OFPCR_ROLE_NOCHANGE = 0,
    OFPCR_ROLE_EQUAL = 1,
    OFPCR_ROLE_MASTER = 2,
    OFPCR_ROLE_SLAVE = 3,
};

enum ofp_hello_elem_type(wire_type=uint16_t) {
    OFPHET_VERSIONBITMAP = 1,
};

/* XXX rename to of_message */
struct of_header {
    uint8_t version;
    uint8_t type == ?;
    uint16_t length;
    uint32_t xid;
};

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

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

struct of_hello_elem {
    uint16_t type == ?;
    uint16_t length;
};

struct of_hello_elem_versionbitmap : of_hello_elem {
    uint16_t type == 1;
    uint16_t length;
    list(of_uint32_t) bitmaps;
};

struct of_hello : of_header {
    uint8_t version;
    uint8_t type == 0;
    uint16_t length;
    uint32_t xid;
    list(of_hello_elem_t) elements;
};

struct of_echo_request : of_header {
    uint8_t version;
    uint8_t type == 2;
    uint16_t length;
    uint32_t xid;
    of_octets_t data;
};

struct of_echo_reply : of_header {
    uint8_t version;
    uint8_t type == 3;
    uint16_t length;
    uint32_t xid;
    of_octets_t data;
};

struct of_experimenter : of_header {
    uint8_t version;
    uint8_t type == 4;
    uint16_t length;
    uint32_t xid;
    uint32_t experimenter == ?;
    uint32_t subtype;
    of_octets_t data;
};

struct of_barrier_request : of_header {
    uint8_t version;
    uint8_t type == 20;
    uint16_t length;
    uint32_t xid;
};

struct of_barrier_reply : of_header {
    uint8_t version;
    uint8_t type == 21;
    uint16_t length;
    uint32_t xid;
};

struct of_get_config_request : of_header {
    uint8_t version;
    uint8_t type == 7;
    uint16_t length;
    uint32_t xid;
};

struct of_get_config_reply : of_header {
    uint8_t version;
    uint8_t type == 8;
    uint16_t length;
    uint32_t xid;
    uint16_t flags;
    uint16_t miss_send_len;
};

struct of_set_config : of_header {
    uint8_t version;
    uint8_t type == 9;
    uint16_t length;
    uint32_t xid;
    uint16_t flags;
    uint16_t miss_send_len;
};

struct of_table_mod : of_header {
    uint8_t version;
    uint8_t type == 17;
    uint16_t length;
    uint32_t xid;
    uint8_t table_id;
    pad(3);
    uint32_t config;
};

struct of_port_desc {
    of_port_no_t port_no;
    pad(4);
    of_mac_addr_t hw_addr;
    pad(2);
    of_port_name_t name;
    enum ofp_port_config config;
    enum ofp_port_state state;
    enum ofp_port_features curr;
    enum ofp_port_features advertised;
    enum ofp_port_features supported;
    enum ofp_port_features peer;
    uint32_t curr_speed;
    uint32_t max_speed;
};

struct of_features_request : of_header {
    uint8_t version;
    uint8_t type == 5;
    uint16_t length;
    uint32_t xid;
};

struct of_features_reply : of_header {
    uint8_t version;
    uint8_t type == 6;
    uint16_t length;
    uint32_t xid;
    uint64_t datapath_id;
    uint32_t n_buffers;
    uint8_t n_tables;
    uint8_t auxiliary_id;
    pad(2);
    enum ofp_capabilities capabilities;
    uint32_t reserved;
};

struct of_port_status : of_header {
    uint8_t version;
    uint8_t type == 12;
    uint16_t length;
    uint32_t xid;
    enum ofp_port_reason reason;
    pad(7);
    of_port_desc_t desc;
};

struct of_port_mod : of_header {
    uint8_t version;
    uint8_t type == 16;
    uint16_t length;
    uint32_t xid;
    of_port_no_t port_no;
    pad(4);
    of_mac_addr_t hw_addr;
    pad(2);
    uint32_t config;
    uint32_t mask;
    uint32_t advertise;
    pad(4);
};

// FIXME Does this need to be v4?
struct of_match_v3(align=8) {
    uint16_t type == 1;
    uint16_t length;
    list(of_oxm_t) oxm_list;
};

// This looks like an action header, but is standalone.  See 
// ofp_table_features_prop_actions
struct of_action_id {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_output : of_action {
    uint16_t type == 0;
    uint16_t len;
    of_port_no_t port;
    uint16_t max_len;
    pad(6);
};

struct of_action_copy_ttl_out : of_action {
    uint16_t type == 11;
    uint16_t len;
    pad(4);
};

struct of_action_copy_ttl_in : of_action {
    uint16_t type == 12;
    uint16_t len;
    pad(4);
};

struct of_action_set_mpls_ttl : of_action {
    uint16_t type == 15;
    uint16_t len;
    uint8_t mpls_ttl;
    pad(3);
};

struct of_action_dec_mpls_ttl : of_action {
    uint16_t type == 16;
    uint16_t len;
    pad(4);
};

struct of_action_push_vlan : of_action {
    uint16_t type == 17;
    uint16_t len;
    uint16_t ethertype;
    pad(2);
};

struct of_action_pop_vlan : of_action {
    uint16_t type == 18;
    uint16_t len;
    pad(4);
};

struct of_action_push_mpls : of_action {
    uint16_t type == 19;
    uint16_t len;
    uint16_t ethertype;
    pad(2);
};

struct of_action_pop_mpls : of_action {
    uint16_t type == 20;
    uint16_t len;
    uint16_t ethertype;
    pad(2);
};

struct of_action_set_queue : of_action {
    uint16_t type == 21;
    uint16_t len;
    uint32_t queue_id;
};

struct of_action_group : of_action {
    uint16_t type == 22;
    uint16_t len;
    uint32_t group_id;
};

struct of_action_set_nw_ttl : of_action {
    uint16_t type == 23;
    uint16_t len;
    uint8_t nw_ttl;
    pad(3);
};

struct of_action_dec_nw_ttl : of_action {
    uint16_t type == 24;
    uint16_t len;
    pad(4);
};

struct of_action_set_field : of_action {
    uint16_t type == 25;
    uint16_t len;
    of_oxm_t field;
};

struct of_action_experimenter : of_action {
    uint16_t type == 65535;
    uint16_t len;
    uint32_t experimenter == ?;
    of_octets_t data;
};

struct of_action_pop_pbb : of_action {
    uint16_t type == 27;
    uint16_t len;
    pad(4);
};

struct of_action_push_pbb : of_action {
    uint16_t type == 26;
    uint16_t len;
    uint16_t ethertype;
    pad(2);
};

struct of_action {
    uint16_t type == ?;
    uint16_t len;
    pad(4);
};

struct of_instruction {
    uint16_t type == ?;
    uint16_t len;
};

struct of_instruction_goto_table : of_instruction {
    uint16_t type == 1;
    uint16_t len;
    uint8_t table_id;
    pad(3);
};

struct of_instruction_write_metadata : of_instruction {
    uint16_t type == 2;
    uint16_t len;
    pad(4);
    uint64_t metadata;
    uint64_t metadata_mask;
};

struct of_instruction_write_actions : of_instruction {
    uint16_t type == 3;
    uint16_t len;
    pad(4);
    list(of_action_t) actions;
};

struct of_instruction_apply_actions : of_instruction {
    uint16_t type == 4;
    uint16_t len;
    pad(4);
    list(of_action_t) actions;
};

struct of_instruction_clear_actions : of_instruction {
    uint16_t type == 5;
    uint16_t len;
    pad(4);
};

struct of_instruction_meter : of_instruction {
    uint16_t type == 6;
    uint16_t len;
    uint32_t meter_id;
};

struct of_instruction_experimenter : of_instruction {
    uint16_t type == 65535;
    uint16_t len;
    uint32_t experimenter == ?;
    of_octets_t data;
};

struct of_flow_mod : of_header {
    uint8_t version;
    uint8_t type == 14;
    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;
    enum ofp_flow_mod_flags flags;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_flow_add : of_flow_mod {
    uint8_t version;
    uint8_t type == 14;
    uint16_t length;
    uint32_t xid;
    uint64_t cookie;
    uint64_t cookie_mask;
    uint8_t table_id;
    of_fm_cmd_t _command == 0;
    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;
    enum ofp_flow_mod_flags flags;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_flow_modify : of_flow_mod {
    uint8_t version;
    uint8_t type == 14;
    uint16_t length;
    uint32_t xid;
    uint64_t cookie;
    uint64_t cookie_mask;
    uint8_t table_id;
    of_fm_cmd_t _command == 1;
    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;
    enum ofp_flow_mod_flags flags;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_flow_modify_strict : of_flow_mod {
    uint8_t version;
    uint8_t type == 14;
    uint16_t length;
    uint32_t xid;
    uint64_t cookie;
    uint64_t cookie_mask;
    uint8_t table_id;
    of_fm_cmd_t _command == 2;
    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;
    enum ofp_flow_mod_flags flags;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_flow_delete : of_flow_mod {
    uint8_t version;
    uint8_t type == 14;
    uint16_t length;
    uint32_t xid;
    uint64_t cookie;
    uint64_t cookie_mask;
    uint8_t table_id;
    of_fm_cmd_t _command == 3;
    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;
    enum ofp_flow_mod_flags flags;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_flow_delete_strict : of_flow_mod {
    uint8_t version;
    uint8_t type == 14;
    uint16_t length;
    uint32_t xid;
    uint64_t cookie;
    uint64_t cookie_mask;
    uint8_t table_id;
    of_fm_cmd_t _command == 4;
    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;
    enum ofp_flow_mod_flags flags;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_bucket {
    uint16_t len;
    uint16_t weight;
    of_port_no_t watch_port;
    uint32_t watch_group;
    pad(4);
    list(of_action_t) actions;
};

struct of_group_mod : of_header {
    uint8_t version;
    uint8_t type == 15;
    uint16_t length;
    uint32_t xid;
    uint16_t command;
    uint8_t group_type;
    pad(1);
    uint32_t group_id;
    list(of_bucket_t) buckets;
};

struct of_packet_out : of_header {
    uint8_t version;
    uint8_t type == 13;
    uint16_t length;
    uint32_t xid;
    uint32_t buffer_id;
    of_port_no_t in_port;
    uint16_t actions_len;
    pad(6);
    list(of_action_t) actions;
    of_octets_t data;
};

struct of_packet_in : of_header {
    uint8_t version;
    uint8_t type == 10;
    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;
    pad(2);
    of_octets_t data; /* FIXME: Ensure total_len gets updated */
};

struct of_flow_removed : of_header {
    uint8_t version;
    uint8_t type == 11;
    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 of_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 of_meter_band_drop : of_meter_band {
    uint16_t        type == 1;
    uint16_t        len;
    uint32_t        rate;
    uint32_t        burst_size;
    pad(4);
};

struct of_meter_band_dscp_remark : of_meter_band {
    uint16_t        type == 2;
    uint16_t        len;
    uint32_t        rate;
    uint32_t        burst_size;
    uint8_t         prec_level;
    pad(3);
};

struct of_meter_band_experimenter : of_meter_band {
    uint16_t        type == 65535;
    uint16_t        len;
    uint32_t        rate;
    uint32_t        burst_size;
    uint32_t        experimenter;
};

struct of_meter_mod : of_header {
    uint8_t version;
    uint8_t type == 29;
    uint16_t length;
    uint32_t xid;
    uint16_t command;
    uint16_t flags;
    uint32_t meter_id;
    list(of_meter_band_t) meters;
};

struct of_error_msg : of_header {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == ?;
};

struct of_hello_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 0;
    enum ofp_hello_failed_code code;
    of_octets_t data;
};

struct of_bad_request_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 1;
    enum ofp_bad_request_code code;
    of_octets_t data;
};

struct of_bad_action_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 2;
    enum ofp_bad_action_code code;
    of_octets_t data;
};

struct of_bad_instruction_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 3;
    enum ofp_bad_instruction_code code;
    of_octets_t data;
};

struct of_bad_match_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 4;
    enum ofp_bad_match_code code;
    of_octets_t data;
};

struct of_flow_mod_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 5;
    enum ofp_flow_mod_failed_code code;
    of_octets_t data;
};

struct of_group_mod_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 6;
    enum ofp_group_mod_failed_code code;
    of_octets_t data;
};

struct of_port_mod_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 7;
    enum ofp_port_mod_failed_code code;
    of_octets_t data;
};

struct of_table_mod_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 8;
    enum ofp_table_mod_failed_code code;
    of_octets_t data;
};

struct of_queue_op_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 9;
    enum ofp_queue_op_failed_code code;
    of_octets_t data;
};

struct of_switch_config_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 10;
    enum ofp_switch_config_failed_code code;
    of_octets_t data;
};

struct of_role_request_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 11;
    enum ofp_role_request_failed_code code;
    of_octets_t data;
};

struct of_meter_mod_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 12;
    enum ofp_meter_mod_failed_code code;
    of_octets_t data;
};

struct of_table_features_failed_error_msg : of_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 13;
    enum ofp_table_features_failed_code code;
    of_octets_t data;
};

struct of_experimenter_error_msg {
    uint8_t version;
    uint8_t type == 1;
    uint16_t length;
    uint32_t xid;
    uint16_t err_type == 0xffff;
    uint16_t subtype;
    uint32_t experimenter;
    of_octets_t data;
};

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

struct of_flow_stats_entry {
    uint16_t length;
    uint8_t table_id;
    pad(1);
    uint32_t duration_sec;
    uint32_t duration_nsec;
    uint16_t priority;
    uint16_t idle_timeout;
    uint16_t hard_timeout;
    uint16_t flags;
    pad(4);
    uint64_t cookie;
    uint64_t packet_count;
    uint64_t byte_count;
    of_match_t match;
    list(of_instruction_t) instructions;
};


struct of_table_stats_entry {
    uint8_t table_id;
    pad(3);
    uint32_t active_count;
    uint64_t lookup_count;
    uint64_t matched_count;
};

struct of_port_stats_entry {
    of_port_no_t port_no;
    pad(4);
    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 of_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 of_bucket_counter {
    uint64_t packet_count;
    uint64_t byte_count;
};

struct of_group_stats_entry {
    uint16_t length;
    pad(2);
    uint32_t group_id;
    uint32_t ref_count;
    pad(4);
    uint64_t packet_count;
    uint64_t byte_count;
    uint32_t duration_sec;
    uint32_t duration_nsec;
    list(of_bucket_counter_t) bucket_stats;
};

struct of_group_desc_stats_entry {
    uint16_t length;
    uint8_t type;
    pad(1);
    uint32_t group_id;
    list(of_bucket_t) buckets;
};

// STATS: 
//  Desc, flow, agg, table, port, queue, group, group_desc, group_feat, experi

struct of_stats_request : of_header {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == ?;
    uint16_t flags;
    pad(4);
};

struct of_stats_reply : of_header {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == ?;
    uint16_t flags;
    pad(4);
};

struct of_desc_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 0;
    uint16_t flags;
    pad(4);
};

struct of_desc_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 0;
    uint16_t flags;
    pad(4);
    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 of_flow_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 1;
    uint16_t flags;
    pad(4);
    uint8_t table_id;
    pad(3);
    of_port_no_t out_port;
    uint32_t out_group;
    pad(4);
    uint64_t cookie;
    uint64_t cookie_mask;
    of_match_t match;
};

struct of_flow_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 1;
    uint16_t flags;
    pad(4);
    list(of_flow_stats_entry_t) entries;
};

struct of_aggregate_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 2;
    uint16_t flags;
    pad(4);
    uint8_t table_id;
    pad(3);
    of_port_no_t out_port;
    uint32_t out_group;
    pad(4);
    uint64_t cookie;
    uint64_t cookie_mask;
    of_match_t match;
};

struct of_aggregate_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 2;
    uint16_t flags;
    pad(4);
    uint64_t packet_count;
    uint64_t byte_count;
    uint32_t flow_count;
    pad(4);
};

struct of_table_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 3;
    uint16_t flags;
    pad(4);
};

struct of_table_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 3;
    uint16_t flags;
    pad(4);
    list(of_table_stats_entry_t) entries;
};

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

struct of_table_feature_prop {
    uint16_t         type;
    uint16_t         length;
};

struct of_table_feature_prop_instructions : of_table_feature_prop {
    uint16_t         type == 0;
    uint16_t         length;
    // FIXME Check if instruction_t is right for ids here
    list(of_instruction_t)   instruction_ids;
};

struct of_table_feature_prop_instructions_miss : of_table_feature_prop {
    uint16_t         type == 1;
    uint16_t         length;
    list(of_instruction_t)   instruction_ids;
};

struct of_table_feature_prop_next_tables : of_table_feature_prop {
    uint16_t         type == 2;
    uint16_t         length;
    list(of_uint8_t) next_table_ids;
};

struct of_table_feature_prop_next_tables_miss : of_table_feature_prop {
    uint16_t         type == 3;
    uint16_t         length;
    list(of_uint8_t) next_table_ids;
};

struct of_table_feature_prop_write_actions : of_table_feature_prop {
    uint16_t         type == 4;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct of_table_feature_prop_write_actions_miss : of_table_feature_prop {
    uint16_t         type == 5;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct of_table_feature_prop_apply_actions : of_table_feature_prop {
    uint16_t         type == 6;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct of_table_feature_prop_apply_actions_miss : of_table_feature_prop {
    uint16_t         type == 7;
    uint16_t         length;
    list(of_action_id_t) action_ids;
};

struct of_table_feature_prop_match : of_table_feature_prop {
    uint16_t         type == 8;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct of_table_feature_prop_wildcards : of_table_feature_prop {
    uint16_t         type == 10;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct of_table_feature_prop_write_setfield : of_table_feature_prop {
    uint16_t         type == 12;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct of_table_feature_prop_write_setfield_miss : of_table_feature_prop {
    uint16_t         type == 13;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct of_table_feature_prop_apply_setfield : of_table_feature_prop {
    uint16_t         type == 14;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct of_table_feature_prop_apply_setfield_miss : of_table_feature_prop {
    uint16_t         type == 15;
    uint16_t         length;
    list(of_uint32_t) oxm_ids;
};

struct of_table_feature_prop_experimenter : of_table_feature_prop {
    uint16_t         type == 65535;
    uint16_t         length;
    uint32_t         experimenter;
    uint32_t         subtype;
    of_octets_t      experimenter_data;
};

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

struct of_table_features {
    uint16_t length;
    uint8_t table_id;
    pad(5);
    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 of_meter_features {
    uint32_t    max_meter;
    uint32_t    band_types;
    uint32_t    capabilities;
    uint8_t     max_bands;
    uint8_t     max_color;
    pad(2);
};

struct of_port_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 4;
    uint16_t flags;
    pad(4);
    of_port_no_t port_no;
    pad(4);
};

struct of_port_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 4;
    uint16_t flags;
    pad(4);
    list(of_port_stats_entry_t) entries;
};

struct of_queue_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 5;
    uint16_t flags;
    pad(4);
    of_port_no_t port_no;
    uint32_t queue_id;
};

struct of_queue_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 5;
    uint16_t flags;
    pad(4);
    list(of_queue_stats_entry_t) entries;
};

struct of_group_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 6;
    uint16_t flags;
    pad(4);
    uint32_t group_id;
    pad(4);
};

struct of_group_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 6;
    uint16_t flags;
    pad(4);
    list(of_group_stats_entry_t) entries;
};

struct of_group_desc_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 7;
    uint16_t flags;
    pad(4);
};

struct of_group_desc_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 7;
    uint16_t flags;
    pad(4);
    list(of_group_desc_stats_entry_t) entries;
};

struct of_group_features_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 8;
    uint16_t flags;
    pad(4);
};

struct of_group_features_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 8;
    uint16_t flags;
    pad(4);
    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 of_meter_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 9;
    uint16_t flags;
    pad(4);
    uint32_t meter_id;
    pad(4);
};

struct of_meter_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 9;
    uint16_t flags;
    pad(4);
    list(of_meter_stats_t) entries;
};

struct of_meter_config_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 10;
    uint16_t flags;
    pad(4);
    uint32_t meter_id;
    pad(4);
};

struct of_meter_config_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 10;
    uint16_t flags;
    pad(4);
    list(of_meter_band_t) entries;
};

// FIXME stats added to get things working
struct of_meter_features_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 11;
    uint16_t flags;
    pad(4);
};

// FIXME stats added to get things working
struct of_meter_features_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 11;
    uint16_t flags;
    pad(4);
    of_meter_features_t features;
};

// FIXME stats added to get things working
struct of_table_features_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 12;
    uint16_t flags;
    pad(4);
    list(of_table_features_t) entries;
};

// FIXME stats added to get things working
struct of_table_features_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 12;
    uint16_t flags;
    pad(4);
    list(of_table_features_t) entries;
};

// FIXME stats added to get things working
struct of_port_desc_stats_request : of_stats_request {
    uint8_t version;
    uint8_t type == 18;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 13;
    uint16_t flags;
    pad(4);
};

// FIXME stats added to get things working
struct of_port_desc_stats_reply : of_stats_reply {
    uint8_t version;
    uint8_t type == 19;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type == 13;
    uint16_t flags;
    pad(4);
    list(of_port_desc_t) entries;
};

struct of_meter_band_stats {
    uint64_t        packet_band_count;
    uint64_t        byte_band_count;
};

struct of_meter_stats {
    uint32_t        meter_id;
    uint16_t        len;
    pad(6);
    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 of_meter_config {
    uint16_t        length;
    uint16_t        flags;
    uint32_t        meter_id;
    list(of_meter_band_t) entries;
};

struct of_experimenter_stats_header {
    uint32_t experimenter == ?;
    uint32_t subtype;
};

// END OF STATS OBJECTS

struct of_queue_prop {
    uint16_t type == ?;
    uint16_t len;
    pad(4);
};

struct of_queue_prop_min_rate : of_queue_prop {
    uint16_t type == 1;
    uint16_t len;
    pad(4);
    uint16_t rate;
    pad(6);
};

struct of_queue_prop_max_rate : of_queue_prop {
    uint16_t type == 2;
    uint16_t len;
    pad(4);
    uint16_t rate;
    pad(6);
};

struct of_queue_prop_experimenter : of_queue_prop {
    uint16_t type == 65535;
    uint16_t len;
    pad(4);
    uint32_t experimenter == ?;
    pad(4);
    of_octets_t data;
};

struct of_packet_queue {
    uint32_t queue_id;
    of_port_no_t port;
    uint16_t len;
    pad(6);
    list(of_queue_prop_t) properties;
};

struct of_queue_get_config_request : of_header {
    uint8_t version;
    uint8_t type == 22;
    uint16_t length;
    uint32_t xid;
    of_port_no_t port;
    pad(4);
};

struct of_queue_get_config_reply : of_header {
    uint8_t version;
    uint8_t type == 23;
    uint16_t length;
    uint32_t xid;
    of_port_no_t port;
    pad(4);
    list(of_packet_queue_t) queues;
};

struct of_role_request : of_header {
    uint8_t version;
    uint8_t type == 24;
    uint16_t length;
    uint32_t xid;
    uint32_t role;
    pad(4);
    uint64_t generation_id;
};

struct of_role_reply : of_header {
    uint8_t version;
    uint8_t type == 25;
    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 of_async_get_request : of_header {
    uint8_t version;
    uint8_t type == 26;
    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 of_async_get_reply : of_header {
    uint8_t version;
    uint8_t type == 27;
    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 of_async_set : of_header {
    uint8_t version;
    uint8_t type == 28;
    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;
};
