From: Didier Pallard <didier.pall...@6wind.com> In tunnel case, L3 bad checksum is properly setting RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD while all other flags are set in inner part of offload flags, this can cause both L4 flags BAD and GOOD to be set in inner offloads when a tunnel packet is processed, changing these flags to RTE_MBUF_F_RX_L4_CKSUM_NONE instead of GOOD/BAD values. This in turn can cause upper layers to take incorrect decision on what to do with the packet.
Remove IP_CKSUM_GOOD flag on outer IP layer, since there is currently no way to indicate that this csum is good using DPDK offload flags. Fixes: 81f8804992c9 ("net/qede: enhance Rx CPU utilization") Fixes: 3d4bb4411683 ("net/qede: add fastpath support for VXLAN tunneling") CC: sta...@dpdk.org Signed-off-by: Edwin Brossette <edwin.brosse...@6wind.com> Signed-off-by: Didier Pallard <didier.pall...@6wind.com> Acked-by: Olivier Matz <olivier.m...@6wind.com> --- drivers/net/qede/qede_rxtx.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index 25e28fd9f61b..c764e3d83763 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -1617,9 +1617,9 @@ qede_recv_pkts_regular(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) "L4 csum failed, flags = 0x%x", parse_flag); rxq->rx_hw_errors++; - ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD; + ol_flags |= RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD; } else { - ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD; + ol_flags |= RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD; } if (unlikely(qede_check_tunn_csum_l3(parse_flag))) { @@ -1628,8 +1628,6 @@ qede_recv_pkts_regular(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) parse_flag); rxq->rx_hw_errors++; ol_flags |= RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD; - } else { - ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD; } flags = fp_cqe->tunnel_pars_flags.flags; @@ -1887,9 +1885,9 @@ qede_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) "L4 csum failed, flags = 0x%x", parse_flag); rxq->rx_hw_errors++; - ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD; + ol_flags |= RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD; } else { - ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD; + ol_flags |= RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD; } if (unlikely(qede_check_tunn_csum_l3(parse_flag))) { @@ -1898,8 +1896,6 @@ qede_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) parse_flag); rxq->rx_hw_errors++; ol_flags |= RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD; - } else { - ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD; } if (tpa_start_flg) -- 2.35.0.4.g44a5d4affccf