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.

Setting RTE_MBUF_F_TX_IPV4 without RTE_MBUF_F_TX_IPSUM is not defined
in the DPDK api. 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 <david.march...@redhat.com>
---
Some note: 
- I submitted a fix on the DPDK side for net/iavf. But to be on the safe
  side, this OVS patch here is a proposal to avoid hitting bugs in some
  other drivers,

---
 lib/netdev-dpdk.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 8f1361e21f..92d10d1c55 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
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to