openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

rx.h (34124B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * File:        rx.h
      8  * Purpose:     Packet Receive Reason Types shared between BCM and SOC layers
      9  */
     10 
     11 #ifndef   _SHR_RX_H_
     12 #define   _SHR_RX_H_
     13 
     14 #include <shared/types.h>
     15 #include <shared/bitop.h>
     16 
     17 /*
     18  * PKT RX Packet Reasons; reason CPU received the packet.
     19  * Notes: It is possible no reasons are set (directed to CPU from ARL
     20  *        for example), or multiple reasons may be set.
     21  */
     22 
     23 typedef enum _shr_rx_reason_e {
     24     _SHR_RX_INVALID                     = 0,
     25     _SHR_RX_ARP                         = 1,   /* ARP Packet                          */
     26     _SHR_RX_BPDU                        = 2,   /* BPDU Packet                         */
     27     _SHR_RX_BROADCAST                   = 3,   /* Broadcast packet                    */
     28     _SHR_RX_CLASS_BASED_MOVE            = 4,   /* Class-based move prevented          */
     29     _SHR_RX_CLASS_TAG_PACKETS           = 5,   /* Higig Header with PPD=1             */
     30     _SHR_RX_CONTROL                     = 6,   /* Control frame or reserved addr      */
     31     _SHR_RX_CPU_LEARN                   = 7,   /* CPU Learned (or VLAN not found      */
     32                                                /* on Strata devices)                  */
     33     _SHR_RX_DEST_LOOKUP_FAIL            = 8,   /* Destination lookup fail (or L3      */
     34                                                /* station move on Strata devices)     */
     35     _SHR_RX_DHCP                        = 9,   /* DHCP packets                        */
     36     _SHR_RX_DOS_ATTACK                  = 10,  /* DOS Attack Packet                   */
     37     _SHR_RX_E2E_HOL_IBP                 = 11,  /* E2E HOL or IBP Packet               */
     38     _SHR_RX_ENCAP_HIGIG_ERROR           = 12,  /* Non-HG packets received on an       */
     39                                                /* E-HG port                           */
     40     _SHR_RX_FILTER_MATCH                = 13,  /* Filter Match                        */
     41     _SHR_RX_GRE_CHECKSUM                = 14,  /* GRE checksum                        */
     42     _SHR_RX_GRE_SOURCE_ROUTE            = 15,  /* GRE source routing                  */
     43     _SHR_RX_HIGIG_CONTROL               = 16,  /* Higig Packet with Control Opcode    */
     44     _SHR_RX_HIGIG_HDR_ERROR             = 17,  /* Higig+ header errors                */
     45     _SHR_RX_ICMP_REDIRECT               = 18,  /* ICMP Recirect                       */
     46     _SHR_RX_IGMP                        = 19,  /* IGMP packet                         */
     47     _SHR_RX_INGRESS_FILTER              = 20,  /* Ingress Filter (VLAN membership)    */
     48     _SHR_RX_IP                          = 21,  /* IP packet                           */
     49     _SHR_RX_IPFIX_RATE_VIOLATION        = 22,  /* IPFIX flows exceed metering         */
     50     _SHR_RX_IP_MCAST_MISS               = 23,  /* IPMC miss                           */
     51     _SHR_RX_IP_OPTION_VERSION           = 24,  /* IP options present or IP ver != 4   */
     52     _SHR_RX_IPMC                        = 25,  /* Class D IP multicast packet         */
     53     _SHR_RX_IPMC_RSVD                   = 26,  /* IPMC Reserved Packet                */
     54     _SHR_RX_L2_CPU                      = 27,  /* L2_TABLE - copy to CPU (on 5690)    */
     55     _SHR_RX_L2_DEST_MISS                = 28,  /* L2 destination lookup failure       */
     56     _SHR_RX_L2_LEARN_LIMIT              = 29,  /* L2 Learn Limit                      */
     57     _SHR_RX_L2_MOVE                     = 30,  /* L2 Station Movement                 */
     58     _SHR_RX_L2_MTU_FAIL                 = 31,  /* L2 MTU check fail                   */
     59     _SHR_RX_L2_NON_UNICAST_MISS         = 32,  /* L2 Non-Unicast lookup miss          */
     60     _SHR_RX_L2_SOURCE_MISS              = 33,  /* L2 source lookup failure            */
     61     _SHR_RX_L3_ADDR_BIND_FAIL           = 34,  /* MAC to IP bind check failure        */
     62     _SHR_RX_L3_DEST_MISS                = 35,  /* L3 DIP Miss                         */
     63     _SHR_RX_L3_HEADER_ERROR             = 36,  /* L3 header - IP options,             */
     64     _SHR_RX_L3_MTU_FAIL                 = 37,  /* L3 MTU check fail                   */
     65     _SHR_RX_L3_SLOW_PATH                = 38,  /* L3 slow path processed pkt.         */
     66     _SHR_RX_L3_SOURCE_MISS              = 39,  /* L3 SIP Miss                         */
     67     _SHR_RX_L3_SOUCE_MOVE               = 40,  /* L3 Station Movement                 */
     68     _SHR_RX_MARTIAN_ADDR                = 41,  /* Pkt. with Martian address           */
     69     _SHR_RX_MCAST_IDX_ERROR             = 42,  /* Multicast index error               */
     70     _SHR_RX_MCAST_MISS                  = 43,  /* MC miss                             */
     71     _SHR_RX_MIM_SERVICE_ERROR           = 44,  /* MiM terminated unicast packets      */
     72                                                /* that do not have a valid I-SID      */
     73     _SHR_RX_MPLS_CTRL_WORD_ERROR        = 45,  /* MPLS Control Word type is not 0     */
     74     _SHR_RX_MPLS_ERROR                  = 46,  /* MPLS error                          */
     75     _SHR_RX_MPLS_INVALID_ACTION         = 47,  /* MPLS Invalid Action                 */
     76     _SHR_RX_MPLS_INVALID_PAYLOAD        = 48,  /* MPLS Invalid Payload                */
     77     _SHR_RX_MPLS_LABEL_MISS             = 49,  /* MPLS table miss                     */
     78     _SHR_RX_MPLS_SEQUENCE_NUMBER        = 50,  /* MPLS Sequence number                */
     79     _SHR_RX_MPLS_TTL                    = 51,  /* MPLS TTL                            */
     80     _SHR_RX_MULTICAST                   = 52,  /* Multicast packet                    */
     81     _SHR_RX_NHOP                        = 53,  /* Copy to CPU from NH Idx Tbl         */
     82     _SHR_RX_OAM_ERROR                   = 54,  /* OAM packets to CPU for error cases  */
     83     _SHR_RX_OAM_SLOW_PATH               = 55,  /* OAM packets to CPU - slowpath       */
     84                                                /* process                             */
     85     _SHR_RX_OAM_LMDM                    = 56,  /* OAM LMM/LMR, DMM/DMR packets to CPU */
     86     _SHR_RX_PARITY_ERROR                = 57,  /* Parity error on IP tables           */
     87     _SHR_RX_PROTOCOL                    = 58,  /* Protocol Packet                     */
     88     _SHR_RX_SAMPLE_DEST                 = 59,  /* Egress  sFlow sampled               */
     89     _SHR_RX_SAMPLE_SOURCE               = 60,  /* Ingress sFlow sampled               */
     90     _SHR_RX_SHARED_VLAN_MISMATCH        = 61,  /* Private VLAN Mismatch               */
     91     _SHR_RX_SOURCE_ROUTE                = 62,  /* Source routing bit set              */
     92     _SHR_RX_TIME_STAMP                  = 63,  /* Network time sync packet            */
     93     _SHR_RX_TTL                         = 64,  /* TTL <= 0 or TTL < IPMC threshold    */
     94     _SHR_RX_TTL1                        = 65,  /* L3UC or IPMC packet with TTL        */
     95                                                /* equal to 1                          */
     96     _SHR_RX_TUNNEL_ERROR                = 66,  /* Tunnel error trap                   */
     97     _SHR_RX_UDP_CHECKSUM                = 67,  /* UDP checksum                        */
     98     _SHR_RX_UNKNOWN_VLAN                = 68,  /* Unknown VLAN; VID = 0xfff;          */
     99                                                /* CPU Learn bit (on 5690 devices)     */
    100     _SHR_RX_URPF_FAIL                   = 69,  /* URPF Check Failed                   */
    101     _SHR_RX_VC_LABEL_MISS               = 70,  /* VPLS table miss                     */
    102     _SHR_RX_VLAN_FILTER_MATCH           = 71,  /* VLAN Filter Match                   */
    103     _SHR_RX_WLAN_CLIENT_ERROR           = 72,  /* ROC error packets to the CPU        */
    104     _SHR_RX_WLAN_SLOW_PATH              = 73,  /* WLAN packets slowpath to the CPU    */
    105     _SHR_RX_WLAN_DOT1X_DROP             = 74,  /* WLAN client is unauthenticated      */
    106     _SHR_RX_EXCEPTION_FLOOD             = 75,  /* Exception processing or flooding    */
    107     _SHR_RX_TIMESYNC                    = 76,  /* Time Sync protocol packet           */
    108     _SHR_RX_EAV_DATA                    = 77,  /* Ethernet AV data packet             */
    109     _SHR_RX_SAME_PORT_BRIDGE            = 78,  /* Hairpin or Same port                */
    110                                                /* switching/bridging                  */
    111     _SHR_RX_SPLIT_HORIZON               = 79,  /* Basic bridging or VPLS Split        */
    112                                                /* horizon                             */
    113     _SHR_RX_L4_ERROR                    = 80,  /* TCP/UDP header or port number       */
    114                                                /* errors                              */
    115     _SHR_RX_STP                         = 81,  /* STP Ingress or Egress checks        */
    116     _SHR_RX_EGRESS_FILTER_REDIRECT      = 82,  /* Vlan egress filter redirect         */
    117     _SHR_RX_FILTER_REDIRECT             = 83,  /* Field processor redirect            */
    118     _SHR_RX_LOOPBACK                    = 84,  /* Loopbacked                          */
    119     _SHR_RX_VLAN_TRANSLATE              = 85,  /* VLAN translation table missed when  */
    120                                                /* it is expected to hit               */
    121     _SHR_RX_MMRP                        = 86,  /* Packet of type MMRP                 */
    122     _SHR_RX_SRP                         = 87,  /* Packet of type SRP                  */
    123     _SHR_RX_TUNNEL_CONTROL              = 88,  /* Tunnel control packet               */
    124     _SHR_RX_L2_MARKED                   = 89,  /* L2 table marked                     */
    125     _SHR_RX_WLAN_SLOWPATH_KEEPALIVE     = 90,  /* WLAN slowpath to the CPU,           */
    126                                                /* otherwise dropped                   */                            
    127     _SHR_RX_STATION                     = 91,  /* My Station packet to CPU            */
    128     _SHR_RX_NIV                         = 92,  /* NIV packet                          */
    129     _SHR_RX_NIV_PRIO_DROP               = 93,  /* NIV packet, priority drop           */
    130     _SHR_RX_NIV_INTERFACE_MISS          = 94,  /* NIV packet, interface miss          */
    131     _SHR_RX_NIV_RPF_FAIL                = 95,  /* NIV packet, RPF failed              */
    132     _SHR_RX_NIV_TAG_INVALID             = 96,  /* NIV packet, invalid tag             */
    133     _SHR_RX_NIV_TAG_DROP                = 97,  /* NIV packet, tag drop                */
    134     _SHR_RX_NIV_UNTAG_DROP              = 98,  /* NIV packet, untagged drop           */
    135     _SHR_RX_TRILL                       = 99,  /* TRILL packet                        */
    136     _SHR_RX_TRILL_INVALID               = 100, /* TRILL packet, header error          */
    137     _SHR_RX_TRILL_MISS                  = 101, /* TRILL packet, lookup miss           */
    138     _SHR_RX_TRILL_RPF_FAIL              = 102, /* TRILL packet, RPF check failed      */
    139     _SHR_RX_TRILL_SLOWPATH              = 103, /* TRILL packet, slowpath to CPU       */
    140     _SHR_RX_TRILL_CORE_IS_IS            = 104, /* TRILL packet, Core IS-IS            */
    141     _SHR_RX_TRILL_TTL                   = 105, /* TRILL packet, TTL check failed      */
    142     _SHR_RX_BFD_SLOWPATH                = 106, /* The BFD packet is being fwd to the  */
    143                                                /* local uC for processing             */
    144     _SHR_RX_BFD                         = 107, /* BFD Error                           */
    145     _SHR_RX_MIRROR                      = 108, /* Mirror packet                       */
    146     _SHR_RX_REGEX_ACTION                = 109, /* Flow tracker                        */
    147     _SHR_RX_REGEX_MATCH                 = 110, /* Signature Match                     */
    148     _SHR_RX_FAILOVER_DROP               = 111, /* Protection drop data                */
    149     _SHR_RX_WLAN_TUNNEL_ERROR           = 112, /* WLAN shim header error to CPU       */
    150     _SHR_RX_CONGESTION_CNM_PROXY        = 113, /* Congestion CNM Proxy                */
    151     _SHR_RX_CONGESTION_CNM_PROXY_ERROR  = 114, /* Congestion CNM Proxy Error          */
    152     _SHR_RX_CONGESTION_CNM              = 115, /* Congestion CNM Internal Packet      */
    153     _SHR_RX_MPLS_UNKNOWN_ACH            = 116, /* MPLS Unknown ACH                    */
    154     _SHR_RX_MPLS_LOOKUPS_EXCEEDED       = 117, /* MPLS out of lookups                 */
    155     _SHR_RX_MPLS_RESERVED_ENTROPY_LABEL = 118, /* MPLS Entropy label in unallowed     */
    156                                                /* range                               */
    157     _SHR_RX_MPLS_ILLEGAL_RESERVED_LABEL = 119, /* MPLS illegal reserved label         */
    158     _SHR_RX_MPLS_ROUTER_ALERT_LABEL     = 120, /* MPLS alert label                    */
    159     _SHR_RX_NIV_PRUNE                   = 121, /* NIV access port pruning (dst = src) */
    160     _SHR_RX_VIRTUAL_PORT_PRUNE          = 122, /* SVP == DVP                          */
    161     _SHR_RX_NON_UNICAST_DROP            = 123, /* Explicit multicast packet drop      */
    162     _SHR_RX_TRILL_PACKET_PORT_MISMATCH  = 124, /* TRILL packet vs Rbridge port        */
    163                                                /* conflict                            */
    164     _SHR_RX_WLAN_CLIENT_MOVE            = 125, /* WLAN client moved                   */
    165     _SHR_RX_WLAN_SOURCE_PORT_MISS       = 126, /* WLAN SVP miss                       */
    166     _SHR_RX_WLAN_CLIENT_SOURCE_MISS     = 127, /* WLAN client database SA miss        */
    167     _SHR_RX_WLAN_CLIENT_DEST_MISS       = 128, /* WLAN client database DA miss        */
    168     _SHR_RX_WLAN_MTU                    = 129, /* WLAN MTU error                      */
    169     _SHR_RX_TRILL_NAME                  = 130, /* TRILL packet, Name check failed     */
    170     _SHR_RX_L2GRE_SIP_MISS              = 131, /* L2 GRE SIP miss                     */
    171     _SHR_RX_L2GRE_VPN_ID_MISS           = 132, /* L2 GRE VPN id miss                  */
    172     _SHR_RX_TIMESYNC_UNKNOWN_VERSION    = 133, /* Unknown version of IEEE1588         */
    173     _SHR_RX_BFD_ERROR                   = 134, /* BFD ERROR                           */
    174     _SHR_RX_BFD_UNKNOWN_VERSION         = 135, /* BFD UNKNOWN VERSION                 */
    175     _SHR_RX_BFD_INVALID_VERSION         = 136, /* BFD INVALID VERSION                 */
    176     _SHR_RX_BFD_LOOKUP_FAILURE          = 137, /* BFD LOOKUP FAILURE                  */
    177     _SHR_RX_BFD_INVALID_PACKET          = 138, /* BFD INVALID PACKET                  */
    178     _SHR_RX_VXLAN_SIP_MISS              = 139, /* Vxlan SIP miss                      */
    179     _SHR_RX_VXLAN_VPN_ID_MISS           = 140, /* Vxlan VPN id miss                   */
    180     _SHR_RX_FCOE_ZONE_CHECK_FAIL        = 141, /* Fcoe zone check failed              */
    181     _SHR_RX_IPMC_INTERFACE_MISMATCH     = 142, /* IPMC input interface check failed   */
    182     _SHR_RX_NAT                         = 143, /* NAT                                 */
    183     _SHR_RX_TCP_UDP_NAT_MISS            = 144, /* TCP/UDP packet NAT lookup miss      */
    184     _SHR_RX_ICMP_NAT_MISS               = 145, /* ICMP packet NAT lookup miss         */
    185     _SHR_RX_NAT_FRAGMENT                = 146, /* NAT lookup on fragmented packet     */
    186     _SHR_RX_NAT_MISS                    = 147, /* Non TCP/UDP/ICMP packet NAT lookup  */
    187                                                /* miss                                */
    188     _SHR_RX_UNKNOWN_SUBTENTING_PORT     = 148, /* UNKNOWN_SUBTENTING_PORT             */
    189     _SHR_RX_LLTAG_ABSENT_DROP           = 149, /* LLTAG_ABSENT                        */
    190     _SHR_RX_LLTAG_PRESENT_DROP          = 150, /* LLTAG_PRESENT                       */
    191     _SHR_RX_OAM_CCM_SLOWPATH            = 151, /* OAM CCM packet copied to CPU        */
    192     _SHR_RX_OAM_INCOMPLETE_OPCODE       = 152, /* OAM INCOMPLETE_OPCODE               */
    193     _SHR_RX_BHH_OAM_PACKET              = 153, /* BHH OAM Packet                      */
    194     _SHR_RX_RESERVED_0                  = 154, /* Broadcom Reserved                   */
    195     _SHR_RX_OAM_MPLS_LMDM               = 155, /* MPLS LM/DM (RFC 6374) packet        */
    196     _SHR_RX_SAT                         = 156, /* OAM SAT pkt                         */
    197     _SHR_RX_SAMPLE_SOURCE_FLEX          = 157, /* Flexible sampled packets to CPU     */
    198     _SHR_RX_FLEX_SFLOW                  = 158, /* Flex Sflow?                         */
    199     _SHR_RX_VXLT_MISS                   = 159, /* VLAN Translation miss packet        */
    200     _SHR_RX_TUNNEL_DECAP_ECN_ERROR      = 160, /* Tunnel decap ECN error              */
    201     _SHR_RX_TUNNEL_OBJECT_VALIDATION_FAIL = 161, /* Tunnel Object Validation Fail     */
    202     _SHR_RX_L3_CPU                      = 162, /* L3 Copy to CPU                      */
    203     _SHR_RX_TUNNEL_ADAPT_LOOKUP_MISS    = 163, /* Tunnel Adapt Lookup Miss Drop       */
    204     _SHR_RX_PACKET_FLOW_SELECT_MISS     = 164, /* Packet Flow Select Miss             */
    205     _SHR_RX_PROTECTION_DATA_DROP        = 165, /* Protection Data Drop                */
    206     _SHR_RX_PACKET_FLOW_SELECT          = 166, /* Packet Flow Select                  */
    207     _SHR_RX_OTHER_LOOKUP_MISS           = 167, /* Neither Source or Dest type of Lookup Miss */
    208     _SHR_RX_INVALID_TPID                = 168, /* Invalid TPID                        */
    209     _SHR_RX_MPLS_CONTROL_PACKET         = 169, /* MPLS Control Packet                 */
    210     _SHR_RX_TUNNEL_TTL_ERROR            = 170, /* Tunnel TTL Error                    */
    211     _SHR_RX_L2_HEADER_ERROR             = 171, /* L2 header                           */
    212     _SHR_RX_OTHER_LOOKUP_HIT            = 172, /* Neither Source or Dest type of Lookup Hit */
    213     _SHR_RX_L2_SRC_LOOKUP_MISS          = 173, /* L2 Source Lookup Miss */
    214     _SHR_RX_L2_SRC_LOOKUP_HIT           = 174, /* L2 Source Lookup Hit */
    215     _SHR_RX_L2_DST_LOOKUP_MISS          = 175, /* L2 Dest Lookup Miss */
    216     _SHR_RX_L2_DST_LOOKUP_HIT           = 176, /* L2 Dest Lookup Hit */
    217     _SHR_RX_L3_SRC_ROUTE_LOOKUP_MISS    = 177, /* L3 Source Route Lookup Miss */
    218     _SHR_RX_L3_SRC_HOST_LOOKUP_MISS     = 178, /* L3 Source Host Lookup Miss */
    219     _SHR_RX_L3_SRC_ROUTE_LOOKUP_HIT     = 179, /* L3 Source Route Lookup Hit */
    220     _SHR_RX_L3_SRC_HOST_LOOKUP_HIT      = 180, /* L3 Source Host Lookup Hit */
    221     _SHR_RX_L3_DST_ROUTE_LOOKUP_MISS    = 181, /* L3 Dest Route Lookup Miss */
    222     _SHR_RX_L3_DST_HOST_LOOKUP_MISS     = 182, /* L3 Dest Host Lookup Miss */
    223     _SHR_RX_L3_DST_ROUTE_LOOKUP_HIT     = 183, /* L3 Dest Route Lookup Hit */
    224     _SHR_RX_L3_DST_HOST_LOOKUP_HIT      = 184, /* L3 Dest Host Lookup Hit */
    225     _SHR_RX_VLAN_TRANSLATE1_LOOKUP1_MISS = 185, /* VLAN Translate1 Lookup1 Miss */
    226     _SHR_RX_VLAN_TRANSLATE1_LOOKUP2_MISS = 186, /* VLAN Translate1 Lookup2 Miss */
    227     _SHR_RX_MPLS_LOOKUP1_MISS            = 187, /* MPLS Lookup1 Miss */
    228     _SHR_RX_MPLS_LOOKUP2_MISS            = 188, /* MPLS Lookup2 Miss */
    229     _SHR_RX_L3_TUNNEL_LOOKUP_MISS        = 189, /* L3 Tunnel Lookup Miss */
    230     _SHR_RX_VLAN_TRANSLATE2_LOOKUP1_MISS = 190, /* VLAN Translate2 Lookup1 Miss */
    231     _SHR_RX_VLAN_TRANSLATE2_LOOKUP2_MISS = 191, /* VLAN Translate2 Lookup2 Miss */
    232     _SHR_RX_L2_STU_FAIL                 = 192, /* L2 STU check fail                   */
    233     _SHR_RX_SR_COUNTER_EXCEEDED         = 193, /* Seamless Redundancy(SR) -           */
    234                                                /* Counter Threshold Exceeded          */
    235     _SHR_RX_SR_COPY_TO_CPU_BIT0         = 194, /* Seamless Redundancy(SR) copy to CPU */
    236                                                /* SR custom reason code bit 0         */
    237     _SHR_RX_SR_COPY_TO_CPU_BIT1         = 195, /* SR custom reason code bit 1         */
    238     _SHR_RX_SR_COPY_TO_CPU_BIT2         = 196, /* SR custom reason code bit 2         */
    239     _SHR_RX_SR_COPY_TO_CPU_BIT3         = 197, /* SR custom reason code bit 3         */
    240     _SHR_RX_SR_COPY_TO_CPU_BIT4         = 198, /* SR custom reason code bit 4         */
    241     _SHR_RX_SR_COPY_TO_CPU_BIT5         = 199, /* SR custom reason code bit 5         */
    242     _SHR_RX_L3_HEADER_MISMATCH          = 200, /* L3 Header Mismatch */
    243     _SHR_RX_DLB_MONITOR                 = 201, /* DLB Monitor */
    244     _SHR_RX_ETRAP_MONITOR               = 202, /* ETRAP Monitor */
    245     _SHR_RX_INT_TURNAROUND              = 203, /* INT TurnAround */
    246     _SHR_RX_INT_HOP_LIMIT               = 204, /* INT Hop Limit */
    247     _SHR_RX_REASON_COUNT                = 205  /* MUST BE LAST  */
    248 } _shr_rx_reason_t;
    249 
    250 #define _SHR_RX_REASON_NAMES_INITIALIZER { \
    251     "Invalid",                  \
    252     "Arp",                      \
    253     "Bpdu",                     \
    254     "Broadcast",                \
    255     "ClassBasedMove",           \
    256     "ClassTagPackets",          \
    257     "Control",                  \
    258     "CpuLearn",                 \
    259     "DestLookupFail",           \
    260     "Dhcp",                     \
    261     "DosAttack",                \
    262     "E2eHolIbp",                \
    263     "EncapHiGigError",          \
    264     "FilterMatch",              \
    265     "GreChecksum",              \
    266     "GreSourceRoute",           \
    267     "HigigControl",             \
    268     "HigigHdrError",            \
    269     "IcmpRedirect",             \
    270     "Igmp",                     \
    271     "IngressFilter",            \
    272     "Ip",                       \
    273     "IpfixRateViolation",       \
    274     "IpMcastMiss",              \
    275     "IpOptionVersion",          \
    276     "Ipmc",                     \
    277     "IpmcRsvd",                 \
    278     "L2Cpu",                    \
    279     "L2DestMiss",               \
    280     "L2LearnLimit",             \
    281     "L2Move",                   \
    282     "L2MtuFail",                \
    283     "L2NonUnicastMiss",         \
    284     "L2SourceMiss",             \
    285     "L3AddrBindFail",           \
    286     "L3DestMiss",               \
    287     "L3HeaderError",            \
    288     "L3MtuFail",                \
    289     "L3Slowpath",               \
    290     "L3SourceMiss",             \
    291     "L3SourceMove",             \
    292     "MartianAddr",              \
    293     "McastIdxError",            \
    294     "McastMiss",                \
    295     "MimServiceError",          \
    296     "MplsCtrlWordError",        \
    297     "MplsError",                \
    298     "MplsInvalidAction",        \
    299     "MplsInvalidPayload",       \
    300     "MplsLabelMiss",            \
    301     "MplsSequenceNumber",       \
    302     "MplsTtl",                  \
    303     "Multicast",                \
    304     "Nhop",                     \
    305     "OamError",                 \
    306     "OamSlowPath",              \
    307     "OamLMDM",                  \
    308     "ParityError",              \
    309     "Protocol",                 \
    310     "SampleDest",               \
    311     "SampleSource",             \
    312     "SharedVlanMismatch",       \
    313     "SourceRoute",              \
    314     "TimeStamp",                \
    315     "Ttl",                      \
    316     "Ttl1",                     \
    317     "TunnelError",              \
    318     "UdpChecksum",              \
    319     "UnknownVlan",              \
    320     "UrpfFail",                 \
    321     "VcLabelMiss",              \
    322     "VlanFilterMatch",          \
    323     "WlanClientError",          \
    324     "WlanSlowPath",             \
    325     "WlanDot1xDrop",            \
    326     "ExceptionFlood",           \
    327     "Timesync",                 \
    328     "EavData",                  \
    329     "SamePortBridge",           \
    330     "SplitHorizon",             \
    331     "L4Error",                  \
    332     "Stp",                      \
    333     "EgressFilterRedirect",     \
    334     "FilterRedirect",           \
    335     "Loopback",                 \
    336     "VlanTranslate",            \
    337     "Mmrp",                     \
    338     "Srp",                      \
    339     "TunnelControl",            \
    340     "L2Marked",                 \
    341     "WlanSlowpathKeepalive",    \
    342     "Station",                  \
    343     "Niv",                      \
    344     "NivPrioDrop",              \
    345     "NivInterfaceMiss",         \
    346     "NivRpfFail",               \
    347     "NivTagInvalid",            \
    348     "NivTagDrop",               \
    349     "NivUntagDrop",             \
    350     "Trill",                    \
    351     "TrillInvalid",             \
    352     "TrillMiss",                \
    353     "TrillRpfFail",             \
    354     "TrillSlowpath",            \
    355     "TrillCoreIsIs",            \
    356     "TrillTtl",                 \
    357     "BfdSlowpath",              \
    358     "Bfd",                      \
    359     "Mirror",                   \
    360     "RegexAction",              \
    361     "RegexMatch",               \
    362     "FailoverDrop",             \
    363     "WlanTunnelError",          \
    364     "CongestionCnmProxy",       \
    365     "CongestionCnmProxyError",  \
    366     "CongestionCnm",            \
    367     "MplsUnknownAch",           \
    368     "MplsLookupsExceeded",      \
    369     "MplsReservedEntropyLabel", \
    370     "MplsIllegalReservedLabel", \
    371     "MplsRouterAlertLabel",     \
    372     "NivPrune",                 \
    373     "VirtualPortPrune",         \
    374     "NonUnicastDrop",           \
    375     "TrillPacketPortMismatch",  \
    376     "WlanClientMove",           \
    377     "WlanSourcePortMiss",       \
    378     "WlanClientSourceMiss",     \
    379     "WlanClientDestMiss",       \
    380     "WlanMtu",                  \
    381     "TrillName",                \
    382     "L2GreSipMiss",             \
    383     "L2GreVpnIdMiss",           \
    384     "TimesyncUnknownVersion",   \
    385     "BfdError",                 \
    386     "BfdUnknownVersion",        \
    387     "BfdInvalidVersion",        \
    388     "BfdLookupFailure",         \
    389     "BfdInvalidPacket",         \
    390     "VxlanSipMiss",             \
    391     "VxlanVpnIdMiss",           \
    392     "FcoeZoneCheckFail",        \
    393     "IpmcInterfaceMismatch",    \
    394     "Nat",                      \
    395     "TcpUdpNatMiss",            \
    396     "IcmpNatMiss",              \
    397     "NatFragment",              \
    398     "NatMiss",                  \
    399     "UnknownSubtentingPort",    \
    400     "LLTagAbsentDrop",          \
    401     "LLTagpresenDrop",          \
    402     "OAMCCMslowpath",           \
    403     "OAMIncompleteOpcode",      \
    404     "OAMCCMpacket",             \
    405     "Reserved0",                \
    406     "OAMMplsLmDM",              \
    407     "SAT",                      \
    408     "SampleSourceFlex",         \
    409     "FlexSflow",                \
    410     "VxltMiss",                 \
    411     "TunnelDecapEcnError",      \
    412     "TunnelObjectValidationFail",   \
    413     "L3Cpu",                    \
    414     "TunnelAdaptLookupMiss",    \
    415     "PacketFlowSelectMiss",     \
    416     "ProtectionDataDrop",       \
    417     "PacketFlowSelect",         \
    418     "OtherLookupMiss",          \
    419     "InvalidTpid",              \
    420     "MplsControlPacket",        \
    421     "TunnelTtlError",           \
    422     "L2HeaderError",            \
    423     "OtherLookupHit",           \
    424     "L2SrcLookupMiss",          \
    425     "L2SrcLookupHit",           \
    426     "L2DstLookupMiss",          \
    427     "L2DstLookupHit",           \
    428     "L3SrcRouteLookupMiss",     \
    429     "L3SrcHostLookupMiss",      \
    430     "L3SrcRouteLookupHit",      \
    431     "L3SrcHostLookupHit",       \
    432     "L3DstRouteLookupMiss",     \
    433     "L3DstHostLookupMiss",      \
    434     "L3DstRouteLookupHit",      \
    435     "L3DstHostLookupHit",       \
    436     "MplsLookup1Miss",          \
    437     "MplsLookup2Miss",          \
    438     "L3TunnelLookupMiss",       \
    439     "VlanTranslate1Lookup1Miss",\
    440     "VlanTranslate1Lookup2Miss",\
    441     "VlanTranslate2Lookup1Miss",\
    442     "VlanTranslate2Lookup2Miss",\
    443     "L2StuFail",                \
    444     "SrCounterExceeded",        \
    445     "SrCopyToCpuBit0",          \
    446     "SrCopyToCpuBit1",          \
    447     "SrCopyToCpuBit2",          \
    448     "SrCopyToCpuBit3",          \
    449     "SrCopyToCpuBit4",          \
    450     "SrCopyToCpuBit5",          \
    451     "L3HeaderMismatch",         \
    452     "DlbMonitor",               \
    453     "EtrapMonitor",             \
    454     "IntTurnAround",            \
    455     "IntHopLimit",              \
    456 }
    457 
    458 /*
    459  * Set of "reasons" (see _SHR_RX_*) why a packet came to the CPU.
    460  */
    461 typedef struct _shr_rx_reasons_s {
    462     SHR_BITDCL  pbits[_SHR_BITDCLSIZE(_SHR_RX_REASON_COUNT)];
    463 } _shr_rx_reasons_t;
    464 
    465 /*
    466  * Macro to check if a reason (_SHR_RX_*) is included in a
    467  * set of reasons (_shr_rx_reasons_t). Returns:
    468  *   zero     => reason is not included in the set
    469  *   non-zero => reason is included in the set
    470  */
    471 #define _SHR_RX_REASON_GET(_reasons, _reason) \
    472         SHR_BITGET(((_reasons).pbits), (_reason))
    473 
    474 /*
    475  * Macro to add a reason (_SHR_RX_*) to a set of
    476  * reasons (_shr_rx_reasons_t)
    477  */
    478 #define _SHR_RX_REASON_SET(_reasons, _reason) \
    479         SHR_BITSET(((_reasons).pbits), (_reason))
    480 
    481 /*
    482  * Macro to add all reasons (_SHR_RX_*) to a set of
    483  * reasons (_shr_rx_reasons_t)
    484  */
    485 #define _SHR_RX_REASON_SET_ALL(_reasons) \
    486         SHR_BITSET_RANGE(((_reasons).pbits), 0, _SHR_RX_REASON_COUNT)
    487 
    488 /*
    489  * Macro to clear a reason (_SHR_RX_*) from a set of
    490  * reasons (_shr_rx_reasons_t)
    491  */
    492 #define _SHR_RX_REASON_CLEAR(_reasons, _reason) \
    493         SHR_BITCLR(((_reasons).pbits), (_reason))
    494 
    495 /*
    496  * Macro to clear a set of reasons (_shr_rx_reasons_t).
    497  */
    498 #define _SHR_RX_REASON_CLEAR_ALL(_reasons) \
    499         SHR_BITCLR_RANGE(((_reasons).pbits), 0, _SHR_RX_REASON_COUNT)
    500 
    501 #define _SHR_RX_REASON_IS_NULL(_reasons) \
    502         SHR_BITNULL_RANGE(((_reasons).pbits), \
    503                           0, _SHR_RX_REASON_COUNT)
    504 #define _SHR_RX_REASON_ITER(_reasons, reason) \
    505     for(reason = _SHR_RX_INVALID; reason < (int)_SHR_RX_REASON_COUNT; reason++) \
    506         if(_SHR_RX_REASON_GET(_reasons, reason))
    507 
    508 #define _SHR_RX_REASON_COUNT(_reasons, _count) \
    509         SHR_BITCOUNT_RANGE(((_reasons).pbits), _count, \
    510                            0, _SHR_RX_REASON_COUNT)
    511 #define _SHR_RX_REASON_EQ(_reasons1, _reasons2) \
    512         SHR_BITEQ_RANGE(((_reasons1).pbits), ((_reasons2).pbits), \
    513                         0, _SHR_RX_REASON_COUNT)
    514 #define _SHR_RX_REASON_NEQ(_reasons1, _reasons2) \
    515         (!SHR_BITEQ_RANGE(((_reasons1).pbits), ((_reasons2).pbits), \
    516                           0, _SHR_RX_REASON_COUNT))
    517 #define _SHR_RX_REASON_AND(_reasons1, _reasons2) \
    518         SHR_BITAND_RANGE(((_reasons1).pbits), ((_reasons2).pbits), 0, \
    519                           _SHR_RX_REASON_COUNT, ((_reasons1).pbits))
    520 #define _SHR_RX_REASON_OR(_reasons1, _reasons2) \
    521         SHR_BITOR_RANGE(((_reasons1).pbits), ((_reasons2).pbits), 0, \
    522                          _SHR_RX_REASON_COUNT, ((_reasons1).pbits))
    523 #define _SHR_RX_REASON_XOR(_reasons1, _reasons2) \
    524         SHR_BITXOR_RANGE(((_reasons1).pbits), ((_reasons2).pbits), 0, \
    525                          _SHR_RX_REASON_COUNT, ((_reasons1).pbits))
    526 #define _SHR_RX_REASON_REMOVE(_reasons1, _reasons2) \
    527         SHR_BITREMOVE_RANGE(((_reasons1).pbits), ((_reasons2).pbits), 0, \
    528                              _SHR_RX_REASON_COUNT, ((_reasons1).pbits));
    529 #define _SHR_RX_REASON_NEGATE(_reasons1, _reasons2) \
    530         SHR_BITNEGATE_RANGE(((_reasons2).pbits), 0, \
    531                              _SHR_RX_REASON_COUNT, ((_reasons1).pbits));
    532 
    533 typedef enum _shr_rx_redirect_e { 
    534     _SHR_RX_REDIRECT_NORMAL = 0, 
    535     _SHR_RX_REDIRECT_HIGIG  = 1, 
    536     _SHR_RX_REDIRECT_TRUNCATED = 2,
    537     _SHR_RX_REDIRECT_MAX = _SHR_RX_REDIRECT_TRUNCATED
    538 } _shr_rx_redirect_e; 
    539 
    540 
    541 typedef enum _shr_rx_decap_tunnel_e {
    542     _SHR_RX_DECAP_NONE            = 0,  /* No tunnel Decap */
    543     _SHR_RX_DECAP_ACCESS_SVP      = 1,  /* Packet ingress on Access SVP (No decap) */
    544     _SHR_RX_DECAP_MIM             = 2,  /* Decap Mac-in-Mac tunnel */
    545     _SHR_RX_DECAP_L2GRE           = 3,  /* Decap L2GRE tunnel */
    546     _SHR_RX_DECAP_VXLAN           = 4,  /* Decap VXLAN tunnel */
    547     _SHR_RX_DECAP_AMT             = 5,  /* Decap AMT tunnel */
    548     _SHR_RX_DECAP_IP              = 6,  /* Decap IP tunnel */
    549     _SHR_RX_DECAP_TRILL           = 7,  /* Decap TRILL tunnel */
    550     _SHR_RX_DECAP_L2MPLS_1LABEL   = 8,  /* Decap MPLS 1 Label, L2 payload, no
    551                                            Control Word */
    552     _SHR_RX_DECAP_L2MPLS_2LABEL   = 9,  /* Decap MPLS 2 Label, L2 payload, no
    553                                            Control Word */
    554     _SHR_RX_DECAP_L2MPLS_1LABELCW = 10, /* Decap MPLS 1 Label, L2 payload, Control
    555                                            Word present */
    556     _SHR_RX_DECAP_L2MPLS_2LABELCW = 11, /* Decap MPLS 2 Label, L2 payload, Control
    557                                            Word present */
    558     _SHR_RX_DECAP_L3MPLS_1LABEL   = 12, /* Decap MPLS 1 Label, L3 payload, no
    559                                            Control Word present */
    560     _SHR_RX_DECAP_L3MPLS_2LABEL   = 13, /* Decap MPLS 2 Label, L3 payload, no
    561                                            Control Word present */
    562     _SHR_RX_DECAP_L3MPLS_1LABELCW = 14, /* Decap MPLS 1 Label, L3 payload, Control
    563                                            Word present */
    564     _SHR_RX_DECAP_L3MPLS_2LABELCW = 15, /* Decap MPLS 2 Label, L3 payload, Control
    565                                            Word present */
    566     _SHR_RX_DECAP_WTP2AC          = 16, /* Decap WTP2AC Tunnel */
    567     _SHR_RX_DECAP_AC2AC           = 17, /* Decap AC2AC Tunnel */
    568     _SHR_RX_DECAP_MPLS_1LABELCW   = 18, /* Decap MPLS 1 Label, Control
    569                                            Word present */
    570     _SHR_RX_DECAP_MPLS_2LABELCW   = 19, /* Decap MPLS 2 Label, Control
    571                                            Word present */
    572     _SHR_RX_DECAP_MPLS_1LABEL     = 20,  /* Decap MPLS 1 Label, no
    573                                            Control Word */
    574     _SHR_RX_DECAP_MPLS_2LABEL     = 21,  /* Decap MPLS 2 Label, no
    575                                            Control Word */
    576     _SHR_RX_DECAP_MPLS_3LABEL     = 22,  /* Decap MPLS 3 Label, no Control
    577                                             Word */
    578     _SHR_RX_DECAP_MPLS_3LABELCW   = 23,  /* Decap MPLS 3 Label, Control
    579                                             Word present */
    580     _SHR_RX_DECAP_MPLS_3LABEL_ENTROPY   = 25,  /* Decap MPLS 3 Label + entropy,
    581                                                  no Control Word */
    582     _SHR_RX_DECAP_MPLS_3LABEL_ENTROPYCW = 26,  /* Decap MPLS 3 Label + entropy,
    583                                                  Control Word present */
    584     _SHR_RX_DECAP_COUNT                = 27   /* Decap Tunnel Max */
    585 } _shr_rx_decap_tunnel_t;
    586 
    587 typedef enum _shr_rx_decap_hdr_e {
    588     _SHR_RX_DECAP_HDR_NONE         = 0,  /* No headers Decapped */
    589     _SHR_RX_DECAP_SYSTEM_HDR       = 1,  /* Decap System Header */
    590     _SHR_RX_DECAP_OUTER_L2_HDR     = 2,  /* Decap Outer L2 Header */
    591     _SHR_RX_DECAP_L3_L4_TUNNEL_HDR = 4,  /* Decap Outer L3/L4/TUNNEL Header */
    592     _SHR_RX_DECAP_INNER_L2_HDR     = 8,  /* Decap Inner L2 Header */
    593     _SHR_RX_DECAP_INNER_L3_L4_HDR  = 16, /* Decap Inner L3 and L4 Header */
    594     _SHR_RX_DECAP_HDR_MAX          = _SHR_RX_DECAP_INNER_L3_L4_HDR /* Max Value */
    595 } _shr_rx_decap_hdr_t;
    596 
    597 #endif /* _SHR_RX_H_ */