// 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 OFPacketInReason {
     NO_MATCH,
     ACTION,
     INVALID_TTL,
     BSN_NEW_HOST,
     BSN_STATION_MOVE,
     BSN_BAD_VLAN,
     BSN_DESTINATION_LOOKUP_FAILURE,
     BSN_NO_ROUTE,
     BSN_ICMP_ECHO_REQUEST,
     BSN_DEST_NETWORK_UNREACHABLE,
     BSN_DEST_HOST_UNREACHABLE,
     BSN_DEST_PORT_UNREACHABLE,
     BSN_FRAGMENTATION_REQUIRED,
     BSN_ARP,
     BSN_DHCP,
     BSN_DEBUG,
     BSN_PACKET_OF_DEATH;
}
