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

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. */
};

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

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