net/softnic: map flow match to hash table
[dpdk.git] / drivers / net / sfc / sfc_ef10_rx_ev.h
index 774a789..868c755 100644 (file)
@@ -34,9 +34,15 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
        uint32_t l4_ptype = 0;
        uint64_t ol_flags = 0;
 
-       if (unlikely(EFX_TEST_QWORD_BIT(rx_ev, ESF_DZ_RX_PARSE_INCOMPLETE_LBN)))
+       if (unlikely(rx_ev.eq_u64[0] &
+               rte_cpu_to_le_64((1ull << ESF_DZ_RX_ECC_ERR_LBN) |
+                                (1ull << ESF_DZ_RX_ECRC_ERR_LBN) |
+                                (1ull << ESF_DZ_RX_PARSE_INCOMPLETE_LBN)))) {
+               /* Zero packet type is used as a marker to dicard bad packets */
                goto done;
+       }
 
+#if SFC_EF10_RX_EV_ENCAP_SUPPORT
        switch (EFX_QWORD_FIELD(rx_ev, ESF_EZ_RX_ENCAP_HDR)) {
        default:
                /* Unexpected encapsulation tag class */
@@ -58,6 +64,7 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
                tun_ptype = RTE_PTYPE_TUNNEL_NVGRE;
                break;
        }
+#endif
 
        if (tun_ptype == 0) {
                ip_csum_err_bit = ESF_DZ_RX_IPCKSUM_ERR_LBN;
@@ -115,6 +122,8 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
                if (tun_ptype == 0)
                        l2_ptype = RTE_PTYPE_L2_ETHER_ARP;
                break;
+       case ESE_DZ_L3_CLASS_UNKNOWN:
+               break;
        default:
                /* Unexpected Layer 3 class */
                SFC_ASSERT(false);
@@ -152,6 +161,8 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
                SFC_ASSERT(false);
        }
 
+       SFC_ASSERT(l2_ptype != 0);
+
 done:
        m->ol_flags = ol_flags & ol_mask;
        m->packet_type = tun_ptype | l2_ptype | l3_ptype | l4_ptype;