// Copyright (c) 2008 The Board of Trustees of The Leland Stanford Junior University
// Copyright (c) 2011, 2012 Open Networking Foundation
// Copyright (c) 2012, 2013 Big Switch Networks, Inc.
// This library was generated by the LoxiGen Compiler.
// See the file LICENSE.txt which should have been included in the source distribution

// Automatically generated by LOXI from template const.java
// Do not modify

package org.projectfloodlight.openflow.protocol;

import org.projectfloodlight.openflow.protocol.*;
import org.projectfloodlight.openflow.protocol.action.*;
import org.projectfloodlight.openflow.protocol.actionid.*;
import org.projectfloodlight.openflow.protocol.bsntlv.*;
import org.projectfloodlight.openflow.protocol.errormsg.*;
import org.projectfloodlight.openflow.protocol.meterband.*;
import org.projectfloodlight.openflow.protocol.instruction.*;
import org.projectfloodlight.openflow.protocol.instructionid.*;
import org.projectfloodlight.openflow.protocol.match.*;
import org.projectfloodlight.openflow.protocol.oxm.*;
import org.projectfloodlight.openflow.protocol.queueprop.*;
import org.projectfloodlight.openflow.types.*;
import org.projectfloodlight.openflow.util.*;
import org.projectfloodlight.openflow.exceptions.*;

public enum OFBsnPortCounter {
     BSN_PORT_COUNTER_RX_BYTES,
     BSN_PORT_COUNTER_RX_PACKETS_UNICAST,
     BSN_PORT_COUNTER_RX_PACKETS_BROADCAST,
     BSN_PORT_COUNTER_RX_PACKETS_MULTICAST,
     BSN_PORT_COUNTER_RX_DROPPED,
     BSN_PORT_COUNTER_RX_ERRORS,
     BSN_PORT_COUNTER_TX_BYTES,
     BSN_PORT_COUNTER_TX_PACKETS_UNICAST,
     BSN_PORT_COUNTER_TX_PACKETS_BROADCAST,
     BSN_PORT_COUNTER_TX_PACKETS_MULTICAST,
     BSN_PORT_COUNTER_TX_DROPPED,
     BSN_PORT_COUNTER_TX_ERRORS,
     BSN_PORT_COUNTER_RX_RUNTS,
     BSN_PORT_COUNTER_RX_GIANTS,
     BSN_PORT_COUNTER_RX_CRC_ERRORS,
     BSN_PORT_COUNTER_RX_ALIGNMENT_ERRORS,
     BSN_PORT_COUNTER_RX_SYMBOL_ERRORS,
     BSN_PORT_COUNTER_RX_PAUSE_INPUT,
     BSN_PORT_COUNTER_TX_COLLISIONS,
     BSN_PORT_COUNTER_TX_LATE_COLLISIONS,
     BSN_PORT_COUNTER_TX_DEFERRED,
     BSN_PORT_COUNTER_TX_PAUSE_OUTPUT,
     BSN_PORT_COUNTER_RX_PACKETS,
     BSN_PORT_COUNTER_TX_PACKETS,
     BSN_PORT_COUNTER_RX_LENGTH_ERRORS,
     BSN_PORT_COUNTER_RX_OVERFLOW_ERRORS,
     BSN_PORT_COUNTER_TX_CARRIER_ERRORS;
}
