patch 'net/mlx5: zero UDP checksum over IPv4 in encapsulation' has been queued to stable release 22.11.4
Xueming Li
xuemingl at nvidia.com
Mon Dec 11 11:11:59 CET 2023
Hi,
FYI, your patch has been queued to stable release 22.11.4
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/13/23. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://git.dpdk.org/dpdk-stable/log/?h=22.11-staging
This queued commit can be viewed at:
https://git.dpdk.org/dpdk-stable/commit/?h=22.11-staging&id=07a861e472461649d1ec22ab82de602f6018b88d
Thanks.
Xueming Li <xuemingl at nvidia.com>
---
>From 07a861e472461649d1ec22ab82de602f6018b88d Mon Sep 17 00:00:00 2001
From: Eli Britstein <elibr at nvidia.com>
Date: Mon, 13 Nov 2023 09:29:41 +0200
Subject: [PATCH] net/mlx5: zero UDP checksum over IPv4 in encapsulation
Cc: Xueming Li <xuemingl at nvidia.com>
[ upstream commit e407221d58ffdfd9b7c80f8e4fff99f67cdbd6e9 ]
A zero UDP csum indicates it should not be validated by the receiver.
The HW may not calculate UDP csum after encap.
The cited commit made sure the UDP csum is zero for UDP over IPv6,
mistakenly not handling UDP over IPv4. Fix it.
Fixes: bf1d7d9a033a ("net/mlx5: zero out UDP checksum in encapsulation")
Signed-off-by: Eli Britstein <elibr at nvidia.com>
Acked-by: Suanming Mou <suanmingm at nvidia.com>
---
drivers/net/mlx5/mlx5_flow_dv.c | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index aa3a258ae7..5c2af50fe5 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -4454,6 +4454,7 @@ flow_dv_zero_encap_udp_csum(void *data, struct rte_flow_error *error)
{
struct rte_ether_hdr *eth = NULL;
struct rte_vlan_hdr *vlan = NULL;
+ struct rte_ipv4_hdr *ipv4 = NULL;
struct rte_ipv6_hdr *ipv6 = NULL;
struct rte_udp_hdr *udp = NULL;
char *next_hdr;
@@ -4470,24 +4471,27 @@ flow_dv_zero_encap_udp_csum(void *data, struct rte_flow_error *error)
next_hdr += sizeof(struct rte_vlan_hdr);
}
- /* HW calculates IPv4 csum. no need to proceed */
- if (proto == RTE_ETHER_TYPE_IPV4)
- return 0;
-
/* non IPv4/IPv6 header. not supported */
- if (proto != RTE_ETHER_TYPE_IPV6) {
+ if (proto != RTE_ETHER_TYPE_IPV4 && proto != RTE_ETHER_TYPE_IPV6) {
return rte_flow_error_set(error, ENOTSUP,
RTE_FLOW_ERROR_TYPE_ACTION,
NULL, "Cannot offload non IPv4/IPv6");
}
- ipv6 = (struct rte_ipv6_hdr *)next_hdr;
-
- /* ignore non UDP */
- if (ipv6->proto != IPPROTO_UDP)
- return 0;
+ if (proto == RTE_ETHER_TYPE_IPV4) {
+ ipv4 = (struct rte_ipv4_hdr *)next_hdr;
+ /* ignore non UDP */
+ if (ipv4->next_proto_id != IPPROTO_UDP)
+ return 0;
+ udp = (struct rte_udp_hdr *)(ipv4 + 1);
+ } else {
+ ipv6 = (struct rte_ipv6_hdr *)next_hdr;
+ /* ignore non UDP */
+ if (ipv6->proto != IPPROTO_UDP)
+ return 0;
+ udp = (struct rte_udp_hdr *)(ipv6 + 1);
+ }
- udp = (struct rte_udp_hdr *)(ipv6 + 1);
udp->dgram_cksum = 0;
return 0;
--
2.25.1
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2023-12-11 17:56:26.137553400 +0800
+++ 0094-net-mlx5-zero-UDP-checksum-over-IPv4-in-encapsulatio.patch 2023-12-11 17:56:23.207652300 +0800
@@ -1 +1 @@
-From e407221d58ffdfd9b7c80f8e4fff99f67cdbd6e9 Mon Sep 17 00:00:00 2001
+From 07a861e472461649d1ec22ab82de602f6018b88d Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl at nvidia.com>
+
+[ upstream commit e407221d58ffdfd9b7c80f8e4fff99f67cdbd6e9 ]
@@ -13 +15,0 @@
-Cc: stable at dpdk.org
@@ -22 +24 @@
-index 9753af2cb1..115d730317 100644
+index aa3a258ae7..5c2af50fe5 100644
@@ -25 +27 @@
-@@ -4713,6 +4713,7 @@ flow_dv_zero_encap_udp_csum(void *data, struct rte_flow_error *error)
+@@ -4454,6 +4454,7 @@ flow_dv_zero_encap_udp_csum(void *data, struct rte_flow_error *error)
@@ -33 +35 @@
-@@ -4729,24 +4730,27 @@ flow_dv_zero_encap_udp_csum(void *data, struct rte_flow_error *error)
+@@ -4470,24 +4471,27 @@ flow_dv_zero_encap_udp_csum(void *data, struct rte_flow_error *error)
More information about the stable
mailing list