patch 'app/testpmd: fix MTU verification' has been queued to stable release 21.11.2

Kevin Traynor ktraynor at redhat.com
Wed May 25 18:28:21 CEST 2022


Hi,

FYI, your patch has been queued to stable release 21.11.2

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 05/30/22. 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://github.com/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/caf428f0a08dfc30a815d486366901c063772354

Thanks.

Kevin

---
>From caf428f0a08dfc30a815d486366901c063772354 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong at huawei.com>
Date: Wed, 6 Apr 2022 16:45:37 +0800
Subject: [PATCH] app/testpmd: fix MTU verification

[ upstream commit f0b3966a5072bd0a6c7f7e8652aef793afa4f4d0 ]

The macro RTE_ETHER_MIN_LEN isn't the minimum value of MTU. But testpmd
used it when execute 'port config mtu 0 xx' cmd. This patch fixes it.

Fixes: 1bb4a528c41f ("ethdev: fix max Rx packet length")

Signed-off-by: Huisong Li <lihuisong at huawei.com>
Signed-off-by: Min Hu (Connor) <humin29 at huawei.com>
Acked-by: Ferruh Yigit <ferruh.yigit at xilinx.com>
---
 app/test-pmd/cmdline.c |  4 ---
 app/test-pmd/config.c  | 55 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 6f995905f6..0b5bece513 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -2046,8 +2046,4 @@ cmd_config_mtu_parsed(void *parsed_result,
 	struct cmd_config_mtu_result *res = parsed_result;
 
-	if (res->value < RTE_ETHER_MIN_LEN) {
-		fprintf(stderr, "mtu cannot be less than %d\n", RTE_ETHER_MIN_LEN);
-		return;
-	}
 	port_mtu_set(res->port_id, res->value);
 }
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 38f268423b..face2f805f 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -1254,4 +1254,55 @@ port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t reg_v)
 }
 
+static uint32_t
+eth_dev_get_overhead_len(uint32_t max_rx_pktlen, uint16_t max_mtu)
+{
+	uint32_t overhead_len;
+
+	if (max_mtu != UINT16_MAX && max_rx_pktlen > max_mtu)
+		overhead_len = max_rx_pktlen - max_mtu;
+	else
+		overhead_len = RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
+
+	return overhead_len;
+}
+
+static int
+eth_dev_validate_mtu(uint16_t port_id, uint16_t mtu)
+{
+	struct rte_eth_dev_info dev_info;
+	uint32_t overhead_len;
+	uint32_t frame_size;
+	int ret;
+
+	ret = rte_eth_dev_info_get(port_id, &dev_info);
+	if (ret != 0)
+		return ret;
+
+	if (mtu < dev_info.min_mtu) {
+		fprintf(stderr,
+			"MTU (%u) < device min MTU (%u) for port_id %u\n",
+			mtu, dev_info.min_mtu, port_id);
+		return -EINVAL;
+	}
+	if (mtu > dev_info.max_mtu) {
+		fprintf(stderr,
+			"MTU (%u) > device max MTU (%u) for port_id %u\n",
+			mtu, dev_info.max_mtu, port_id);
+		return -EINVAL;
+	}
+
+	overhead_len = eth_dev_get_overhead_len(dev_info.max_rx_pktlen,
+			dev_info.max_mtu);
+	frame_size = mtu + overhead_len;
+	if (frame_size > dev_info.max_rx_pktlen) {
+		fprintf(stderr,
+			"Frame size (%u) > device max frame size (%u) for port_id %u\n",
+			frame_size, dev_info.max_rx_pktlen, port_id);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 void
 port_mtu_set(portid_t port_id, uint16_t mtu)
@@ -1263,4 +1314,8 @@ port_mtu_set(portid_t port_id, uint16_t mtu)
 		return;
 
+	diag = eth_dev_validate_mtu(port_id, mtu);
+	if (diag != 0)
+		return;
+
 	if (port->need_reconfig == 0) {
 		diag = rte_eth_dev_set_mtu(port_id, mtu);
-- 
2.34.3

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-05-25 17:26:59.280555169 +0100
+++ 0029-app-testpmd-fix-MTU-verification.patch	2022-05-25 17:26:58.607828390 +0100
@@ -1 +1 @@
-From f0b3966a5072bd0a6c7f7e8652aef793afa4f4d0 Mon Sep 17 00:00:00 2001
+From caf428f0a08dfc30a815d486366901c063772354 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit f0b3966a5072bd0a6c7f7e8652aef793afa4f4d0 ]
+
@@ -10 +11,0 @@
-Cc: stable at dpdk.org
@@ -21 +22 @@
-index 6ffea8e21a..91e4090582 100644
+index 6f995905f6..0b5bece513 100644
@@ -24 +25 @@
-@@ -2051,8 +2051,4 @@ cmd_config_mtu_parsed(void *parsed_result,
+@@ -2046,8 +2046,4 @@ cmd_config_mtu_parsed(void *parsed_result,
@@ -34 +35 @@
-index bd689f9f86..1b1e738f83 100644
+index 38f268423b..face2f805f 100644
@@ -37 +38 @@
-@@ -1255,4 +1255,55 @@ port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t reg_v)
+@@ -1254,4 +1254,55 @@ port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t reg_v)
@@ -93 +94 @@
-@@ -1264,4 +1315,8 @@ port_mtu_set(portid_t port_id, uint16_t mtu)
+@@ -1263,4 +1314,8 @@ port_mtu_set(portid_t port_id, uint16_t mtu)



More information about the stable mailing list