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

// In a realistic switch pipeline there are multiple reasons a given packet
// should be sent to the controller. The packet-in reason field is only 8 bits,
// so we use the metadata OXM to carry this information.

enum ofp_bsn_pktin_flag(wire_type=uint64_t, bitmask=True) {
    OFP_BSN_PKTIN_FLAG_PDU = 0x1,
    OFP_BSN_PKTIN_FLAG_NEW_HOST = 0x2,
    OFP_BSN_PKTIN_FLAG_STATION_MOVE = 0x4,
    OFP_BSN_PKTIN_FLAG_ARP = 0x8,
    OFP_BSN_PKTIN_FLAG_DHCP = 0x10,
    OFP_BSN_PKTIN_FLAG_L2_CPU = 0x20,
    OFP_BSN_PKTIN_FLAG_DEBUG = 0x40,
    OFP_BSN_PKTIN_FLAG_TTL_EXPIRED = 0x80,
    OFP_BSN_PKTIN_FLAG_L3_MISS = 0x100,
    OFP_BSN_PKTIN_FLAG_L3_CPU = 0x200,
    OFP_BSN_PKTIN_FLAG_INGRESS_ACL = 0x400,
    OFP_BSN_PKTIN_FLAG_SFLOW = 0x800,
    OFP_BSN_PKTIN_FLAG_ARP_CACHE = 0x1000,
    OFP_BSN_PKTIN_FLAG_ARP_TARGET = 0x2000,
    OFP_BSN_PKTIN_FLAG_IGMP = 0x4000,
    OFP_BSN_PKTIN_FLAG_PIM = 0x8000,
    OFP_BSN_PKTIN_FLAG_VXLAN_SIP_MISS = 0x10000,
    OFP_BSN_PKTIN_FLAG_MC_RESERVED = 0x20000,
    OFP_BSN_PKTIN_FLAG_ANALYTICS = 0x40000,
    OFP_BSN_PKTIN_FLAG_ICMPV6 = 0x80000,
    OFP_BSN_PKTIN_FLAG_INGRESS_ACL_LOCAL = 0x100000,
};
