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

enum ofp_hello_elem_type {
    OFPHET_VERSIONBITMAP = 1,
};

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 {
    uint16_t type;
    uint16_t length;
    list(of_uint32_t) bitmaps;
};

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

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

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

struct of_experimenter {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint32_t experimenter;
    uint32_t subtype;
    of_octets_t data;
};

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

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

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

struct of_get_config_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t flags;
    uint16_t miss_send_len;
};

struct of_set_config {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t flags;
    uint16_t miss_send_len;
};

struct of_table_mod {
    uint8_t version;
    uint8_t type;
    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;
    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 of_features_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
};

struct of_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;
    pad(2);
    uint32_t capabilities;
    uint32_t reserved;
};

struct of_port_status {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint8_t reason;
    pad(7);
    of_port_desc_t desc;
};

struct of_port_mod {
    uint8_t version;
    uint8_t type;
    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 {
    uint16_t type;
    uint16_t length;
    list(of_oxm_t) oxm_list;
};

struct of_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 of_action_id {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_output {
    uint16_t type;
    uint16_t len;
    of_port_no_t port;
    uint16_t max_len;
    pad(6);
};

struct of_action_copy_ttl_out {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_copy_ttl_in {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_set_mpls_ttl {
    uint16_t type;
    uint16_t len;
    uint8_t mpls_ttl;
    pad(3);
};

struct of_action_dec_mpls_ttl {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_push_vlan {
    uint16_t type;
    uint16_t len;
    uint16_t ethertype;
    pad(2);
};

struct of_action_pop_vlan {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_push_mpls {
    uint16_t type;
    uint16_t len;
    uint16_t ethertype;
    pad(2);
};

struct of_action_pop_mpls {
    uint16_t type;
    uint16_t len;
    uint16_t ethertype;
    pad(2);
};

struct of_action_set_queue {
    uint16_t type;
    uint16_t len;
    uint32_t queue_id;
};

struct of_action_group {
    uint16_t type;
    uint16_t len;
    uint32_t group_id;
};

struct of_action_set_nw_ttl {
    uint16_t type;
    uint16_t len;
    uint8_t nw_ttl;
    pad(3);
};

struct of_action_dec_nw_ttl {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_set_field {
    uint16_t type;
    uint16_t len;
    of_octets_t field;
};

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

struct of_action_pop_pbb {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_action_push_pbb {
    uint16_t type;
    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 {
    uint16_t type;
    uint16_t len;
    uint8_t table_id;
    pad(3);
};

struct of_instruction_write_metadata {
    uint16_t type;
    uint16_t len;
    pad(4);
    uint64_t metadata;
    uint64_t metadata_mask;
};

struct of_instruction_write_actions {
    uint16_t type;
    uint16_t len;
    pad(4);
    list(of_action_t) actions;
};

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

struct of_instruction_clear_actions {
    uint16_t type;
    uint16_t len;
    pad(4);
};

struct of_instruction_meter {
    uint16_t type;
    uint16_t len;
    uint32_t meter_id;
};

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

struct of_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;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_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;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_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;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_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;
    pad(2);
    of_match_t match;
    list(of_instruction_t) instructions;
};

struct of_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;
    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 {
    uint8_t version;
    uint8_t type;
    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 {
    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;
    pad(6);
    list(of_action_t) actions;
    of_octets_t data;
};

struct of_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;
    pad(2);
    of_octets_t data; /* FIXME: Ensure total_len gets updated */
};

struct of_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 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 {
    uint16_t        type;
    uint16_t        len;
    uint32_t        rate;
    uint32_t        burst_size;
    pad(4);
};

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

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

struct of_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 of_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 of_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 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;
    pad(6);
    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_desc_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
};

struct of_desc_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    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 {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    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 {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
    list(of_flow_stats_entry_t) entries;
};

struct of_aggregate_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    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 {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
    uint64_t packet_count;
    uint64_t byte_count;
    uint32_t flow_count;
    pad(4);
};

struct of_table_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
};

struct of_table_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    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 {
    uint16_t         type;
    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 {
    uint16_t         type;
    uint16_t         length;
    list(of_instruction_t)   instruction_ids;
};

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

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

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

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

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

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

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

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

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

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

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

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

struct of_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 of_table_feature_prop_experimenter_miss {
//     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 {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
    of_port_no_t port_no;
    pad(4);
};

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

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

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

struct of_group_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
    uint32_t group_id;
    pad(4);
};

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

struct of_group_desc_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
};

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

struct of_group_features_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
};

struct of_group_features_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    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 {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
    uint32_t meter_id;
    pad(4);
};

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

struct of_meter_config_stats_request {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    uint16_t flags;
    pad(4);
    uint32_t meter_id;
    pad(4);
};

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

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

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

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

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

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

// FIXME stats added to get things working
struct of_port_desc_stats_reply {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    uint16_t stats_type;
    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_multipart_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 {
    uint16_t type;
    uint16_t len;
    pad(4);
    uint16_t rate;
    pad(6);
};

struct of_queue_prop_max_rate {
    uint16_t type;
    uint16_t len;
    pad(4);
    uint16_t rate;
    pad(6);
};

struct of_queue_prop_experimenter {
    uint16_t type;
    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 {
    uint8_t version;
    uint8_t type;
    uint16_t length;
    uint32_t xid;
    of_port_no_t port;
    pad(4);
};

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

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

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