// Copyright 2017, 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 2017, 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 5
#version 6

struct of_port_stats_prop_experimenter_intel : of_port_stats_prop_experimenter {
    uint16_t type == 0xffff;
    uint16_t length;
    uint32_t experimenter == 0x0000aa01;
    uint32_t exp_type == 0x00000001;
    pad(4);
    
    uint64_t rx_1_to_64_packets;
    uint64_t rx_65_to_127_packets;
    uint64_t rx_128_to_255_packets;
    uint64_t rx_256_to_511_packets;
    uint64_t rx_512_to_1023_packets;
    uint64_t rx_1024_to_1522_packets;
    uint64_t rx_1523_to_max_packets;
             
    uint64_t tx_1_to_64_packets;
    uint64_t tx_65_to_127_packets;
    uint64_t tx_128_to_255_packets;
    uint64_t tx_256_to_511_packets;
    uint64_t tx_512_to_1023_packets;
    uint64_t tx_1024_to_1522_packets;
    uint64_t tx_1523_to_max_packets;
             
    uint64_t tx_multicast_packets;
    uint64_t rx_broadcast_packets;
    uint64_t tx_broadcast_packets;
    uint64_t rx_undersized_errors;
    uint64_t rx_oversize_errors;
    uint64_t rx_fragmented_errors;
    uint64_t rx_jabber_errors;
};