OVS current sets RTE_MBUF_F_TX_IPV[46] flags in early stages of the packet reception and keeps track of the IP packet type as the packet goes through OVS pipeline. When a packet leaves OVS and hits a DPDK driver, OVS may not request IP checksum offloading but leaves one of this packet type flag in ol_flags.
The DPDK api describes that RTE_MBUF_F_TX_IPV4 must be set when requesting some Tx offloads (like RTE_MBUF_F_TX_IPSUM, RTE_MBUF_F_TX_TCP_CKSUM, .., RTE_MBUF_F_TX_TCP_SEG). Even though setting RTE_MBUF_F_TX_IPV4 without requesting a Tx offload is undefined, this can confuse some drivers (like net/iavf) which then reads zero'd l2_len and l3_len and ends up dropping the packet. Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2231081 Fixes: 5d11c47d3ebe ("userspace: Enable IP checksum offloading by default.") Signed-off-by: David Marchand <[email protected]> Acked-by: Mike Pattrick <[email protected]> --- lib/netdev-dpdk.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 8f1361e21f..2f5a133184 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -2431,6 +2431,7 @@ netdev_dpdk_prep_hwol_packet(struct netdev_dpdk *dev, struct rte_mbuf *mbuf) if (!(mbuf->ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_L4_MASK | RTE_MBUF_F_TX_TCP_SEG))) { + mbuf->ol_flags &= ~(RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IPV6); return true; } -- 2.41.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
