// Copyright 2013, Big Switch Networks, Inc.
//
// LoxiGen is licensed under the Eclipse Public License,
// version 1.0 (EPL), with the following special exception:
//
// LOXI Exception
//
// As a special exception to the terms of the EPL, you may
// distribute libraries generated by LoxiGen (LoxiGen Libraries)
// under the terms of your choice, provided that copyright and
// licensing notices generated by LoxiGen are not altered or removed
// from the LoxiGen Libraries and the notice provided below is (i)
// included in the LoxiGen Libraries, if distributed in source code
// form and (ii) included in any documentation for the LoxiGen
// Libraries, if distributed in binary form.
//
// Notice: "Copyright 2013, Big Switch Networks, Inc.
// This library was generated by the LoxiGen Compiler."
//
// You may not use this file except in compliance with the EPL or
// LOXI Exception. You may obtain a copy of the EPL at:
//
// http://www.eclipse.org/legal/epl-v10.html
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an "AS
// IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the EPL for the specific language
// governing permissions and limitations under the EPL.

#version 4
#version 5

struct of_bsn_tlv_port : of_bsn_tlv {
    uint16_t type == 0;
    uint16_t length;
    of_port_no_t value;
};

struct of_bsn_tlv_mac : of_bsn_tlv {
    uint16_t type == 1;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_rx_packets : of_bsn_tlv {
    uint16_t type == 2;
    uint16_t length;
    uint64_t value;
};

struct of_bsn_tlv_tx_packets : of_bsn_tlv {
    uint16_t type == 3;
    uint16_t length;
    uint64_t value;
};

struct of_bsn_tlv_ipv4 : of_bsn_tlv {
    uint16_t type == 4;
    uint16_t length;
    of_ipv4_t value;
};

struct of_bsn_tlv_idle_time : of_bsn_tlv {
    uint16_t type == 5;
    uint16_t length;
    uint64_t value; /* Milliseconds */
};

struct of_bsn_tlv_vlan_vid : of_bsn_tlv {
    uint16_t type == 6;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_idle_notification : of_bsn_tlv {
    uint16_t type == 7;
    uint16_t length;
};

struct of_bsn_tlv_idle_timeout : of_bsn_tlv {
    uint16_t type == 8;
    uint16_t length;
    uint32_t value; /* Milliseconds */
};

struct of_bsn_tlv_unicast_query_timeout : of_bsn_tlv {
    uint16_t type == 9;
    uint16_t length;
    uint32_t value; /* Milliseconds */
};

struct of_bsn_tlv_broadcast_query_timeout : of_bsn_tlv {
    uint16_t type == 10;
    uint16_t length;
    uint32_t value; /* Milliseconds */
};

struct of_bsn_tlv_request_packets : of_bsn_tlv {
    uint16_t type == 11;
    uint16_t length;
    uint64_t value;
};

struct of_bsn_tlv_reply_packets : of_bsn_tlv {
    uint16_t type == 12;
    uint16_t length;
    uint64_t value;
};

struct of_bsn_tlv_miss_packets : of_bsn_tlv {
    uint16_t type == 13;
    uint16_t length;
    uint64_t value;
};

struct of_bsn_tlv_circuit_id : of_bsn_tlv {
    uint16_t type == 14;
    uint16_t length;
    of_octets_t value;
};

struct of_bsn_tlv_udf_id : of_bsn_tlv {
    uint16_t type == 15;
    uint16_t length;
    uint16_t value;
};

enum ofp_bsn_udf_anchor(wire_type=uint16_t) {
    OFP_BSN_UDF_ANCHOR_PACKET_START = 0,
    OFP_BSN_UDF_ANCHOR_L3_HEADER_START = 1,
    OFP_BSN_UDF_ANCHOR_L4_HEADER_START = 2,
};

struct of_bsn_tlv_udf_anchor : of_bsn_tlv {
    uint16_t type == 16;
    uint16_t length;
    enum ofp_bsn_udf_anchor value;
};

struct of_bsn_tlv_udf_offset : of_bsn_tlv {
    uint16_t type == 17;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_udf_length : of_bsn_tlv {
    uint16_t type == 18;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_vrf : of_bsn_tlv {
    uint16_t type == 19;
    uint16_t length;
    uint32_t value;
};

struct of_bsn_tlv_queue_id : of_bsn_tlv {
    uint16_t type == 20;
    uint16_t length;
    uint32_t value;
};

struct of_bsn_tlv_queue_weight : of_bsn_tlv {
    uint16_t type == 21;
    uint16_t length;
    uint32_t value;
};

struct of_bsn_tlv_crc_enabled : of_bsn_tlv {
    uint16_t type == 22;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_external_ip : of_bsn_tlv {
    uint16_t type == 23;
    uint16_t length;
    of_ipv4_t value;
};

struct of_bsn_tlv_external_mac : of_bsn_tlv {
    uint16_t type == 24;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_external_netmask : of_bsn_tlv {
    uint16_t type == 25;
    uint16_t length;
    of_ipv4_t value;
};

struct of_bsn_tlv_external_gateway_ip : of_bsn_tlv {
    uint16_t type == 26;
    uint16_t length;
    of_ipv4_t value;
};

struct of_bsn_tlv_internal_mac : of_bsn_tlv {
    uint16_t type == 27;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_internal_gateway_mac : of_bsn_tlv {
    uint16_t type == 28;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_external_gateway_mac : of_bsn_tlv {
    uint16_t type == 29;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_sampling_rate : of_bsn_tlv {
    uint16_t type == 30;
    uint16_t length;
    uint32_t value;
};

struct of_bsn_tlv_header_size : of_bsn_tlv {
    uint16_t type == 31;
    uint16_t length;
    uint32_t value; /* bytes */
};

struct of_bsn_tlv_eth_src : of_bsn_tlv {
    uint16_t type == 32;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_eth_dst : of_bsn_tlv {
    uint16_t type == 33;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_ipv4_src : of_bsn_tlv {
    uint16_t type == 34;
    uint16_t length;
    of_ipv4_t value;
};

struct of_bsn_tlv_ipv4_dst : of_bsn_tlv {
    uint16_t type == 35;
    uint16_t length;
    of_ipv4_t value;
};

struct of_bsn_tlv_udp_src : of_bsn_tlv {
    uint16_t type == 36;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_udp_dst : of_bsn_tlv {
    uint16_t type == 37;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_sub_agent_id : of_bsn_tlv {
    uint16_t type == 38;
    uint16_t length;
    uint32_t value;
};

struct of_bsn_tlv_tx_bytes : of_bsn_tlv {
    uint16_t type == 39;
    uint16_t length;
    uint64_t value;
};

struct of_bsn_tlv_actor_system_priority: of_bsn_tlv {
    uint16_t type == 40;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_actor_system_mac: of_bsn_tlv {
    uint16_t type == 41;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_actor_port_priority: of_bsn_tlv {
    uint16_t type == 42;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_actor_port_num: of_bsn_tlv {
    uint16_t type == 43;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_actor_key: of_bsn_tlv {
    uint16_t type == 44;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_convergence_status: of_bsn_tlv {
    uint16_t type == 45;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_partner_system_priority: of_bsn_tlv {
    uint16_t type == 47;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_partner_system_mac: of_bsn_tlv {
    uint16_t type == 48;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_partner_port_priority: of_bsn_tlv {
    uint16_t type == 49;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_partner_port_num: of_bsn_tlv {
    uint16_t type == 50;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_partner_key: of_bsn_tlv {
    uint16_t type == 51;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_name : of_bsn_tlv {
    uint16_t type == 52;
    uint16_t length;
    of_octets_t value; /* UTF-8 encoded. Not null terminated. */
};

enum ofp_bsn_lacp_state(wire_type=uint8_t, bitmask=True) {
    OFP_BSN_LACP_STATE_ACTIVITY = 0x01,
    OFP_BSN_LACP_STATE_TIMEOUT = 0x02,
    OFP_BSN_LACP_STATE_AGGREGATION = 0x04,
    OFP_BSN_LACP_STATE_SYNCHRONIZATION = 0x08,
    OFP_BSN_LACP_STATE_COLLECTING = 0x10,
    OFP_BSN_LACP_STATE_DISTRIBUTING = 0x20,
    OFP_BSN_LACP_STATE_DEFAULTED = 0x40,
    OFP_BSN_LACP_STATE_EXPIRED = 0x80,
};

struct of_bsn_tlv_actor_state: of_bsn_tlv {
    uint16_t type == 53;
    uint16_t length;
    enum ofp_bsn_lacp_state value;
};

struct of_bsn_tlv_partner_state: of_bsn_tlv {
    uint16_t type == 54;
    uint16_t length;
    enum ofp_bsn_lacp_state value;
};

struct of_bsn_tlv_data : of_bsn_tlv {
    uint16_t type == 55;
    uint16_t length;
    of_octets_t value;
};

struct of_bsn_tlv_mac_mask : of_bsn_tlv {
    uint16_t type == 56;
    uint16_t length;
    of_mac_addr_t value;
};

struct of_bsn_tlv_priority : of_bsn_tlv {
    uint16_t type == 57;
    uint16_t length;
    uint32_t value;
};

struct of_bsn_tlv_interval : of_bsn_tlv {
    uint16_t type == 58;
    uint16_t length;
    uint32_t value; /* Milliseconds */
};

/* A reference to an entry in another gentable */
struct of_bsn_tlv_reference : of_bsn_tlv {
    uint16_t type == 59;
    uint16_t length;
    uint16_t table_id;
    list(of_bsn_tlv_t) key;
};

struct of_bsn_tlv_ipv4_netmask : of_bsn_tlv {
    uint16_t type == 60;
    uint16_t length;
    of_ipv4_t value;
};

struct of_bsn_tlv_mpls_label : of_bsn_tlv {
    uint16_t type == 61;
    uint16_t length;
    uint32_t value;
};

struct of_bsn_tlv_mpls_control_word : of_bsn_tlv {
    uint16_t type == 62;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_mpls_sequenced : of_bsn_tlv {
    uint16_t type == 63;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_bucket : of_bsn_tlv {
    uint16_t type == 64;
    uint16_t length;
    list(of_bsn_tlv_t) value;
};

struct of_bsn_tlv_tcp_src : of_bsn_tlv {
    uint16_t type == 65;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_tcp_dst : of_bsn_tlv {
    uint16_t type == 66;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_ip_proto : of_bsn_tlv {
    uint16_t type == 67;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_icmp_type : of_bsn_tlv {
    uint16_t type == 68;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_icmp_code : of_bsn_tlv {
    uint16_t type == 69;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_icmp_id : of_bsn_tlv {
    uint16_t type == 70;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_rx_bytes : of_bsn_tlv {
    uint16_t type == 71;
    uint16_t length;
    uint64_t value;
};

struct of_bsn_tlv_vlan_pcp : of_bsn_tlv {
    uint16_t type == 72;
    uint16_t length;
    uint8_t value;
};

struct of_bsn_tlv_strip_vlan_on_egress : of_bsn_tlv {
    uint16_t type == 73;
    uint16_t length;
};

struct of_bsn_tlv_set_loopback_mode: of_bsn_tlv {
    uint16_t type == 74;
    uint16_t length;
};

struct of_bsn_tlv_strip_mpls_l2_on_ingress : of_bsn_tlv {
    uint16_t type == 75;
    uint16_t length;
};

struct of_bsn_tlv_strip_mpls_l3_on_ingress : of_bsn_tlv {
    uint16_t type == 76;
    uint16_t length;
};

struct of_bsn_tlv_vlan_vid_mask : of_bsn_tlv {
    uint16_t type == 77;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_igmp_snooping : of_bsn_tlv {
    uint16_t type == 78;
    uint16_t length;
};

struct of_bsn_tlv_l2_multicast_lookup : of_bsn_tlv {
    uint16_t type == 79;
    uint16_t length;
};

struct of_bsn_tlv_generation_id : of_bsn_tlv {
    uint16_t type == 80;
    uint16_t length;
    uint64_t value;
};

enum ofp_bsn_anchor(wire_type=uint16_t) {
    OFP_BSN_ANCHOR_PACKET_START = 0,
    OFP_BSN_ANCHOR_L3_HEADER_START = 1,
    OFP_BSN_ANCHOR_L4_HEADER_START = 2,
    OFP_BSN_ANCHOR_L4_PAYLOAD_START = 3,
};

struct of_bsn_tlv_anchor : of_bsn_tlv {
    uint16_t type == 81;
    uint16_t length;
    enum ofp_bsn_anchor value;
};

struct of_bsn_tlv_offset : of_bsn_tlv {
    uint16_t type == 82;
    uint16_t length;
    uint16_t value;
};

struct of_bsn_tlv_negate : of_bsn_tlv {
    uint16_t type == 83;
    uint16_t length;
};

struct of_bsn_tlv_ipv6 : of_bsn_tlv {
    uint16_t type == 84;
    uint16_t length;
    of_ipv6_t value; 
};
