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