On 8/28/23 18:07, David Marchand wrote:
> 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;
>      }
>  

Thanks!  Applied and backported to 3.2.

Best regards, Ilya Maximets.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to