are as follows: - app/testpmd: revert MAC update in checksum forwarding - net/bonding: fix bond4 drop valid MAC packets - net/bonding: fix slave device Rx/Tx offload configuration - app/testpmd: fix MAC header in csum forward engine - app/testpmd: update bond port configurations when add slave - app/testpmd: fix GENEVE parsing in checksum mode - net: add UDP/TCP checksum in mbuf segments - app/testpmd: add SW L4 checksum in multi-segments - app/testpmd: fix L4 checksum in multi-segments - net/bonding: fix mbuf fast free handling (cherry picked from commit e33f71a88757d130f19712e0efd64ab7623510fb)
155 lines
5.4 KiB
Diff
155 lines
5.4 KiB
Diff
From a31eaf3090f26f73fa3996487d9bde36418dbcd9 Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Tue, 15 Nov 2022 12:06:09 +0800
|
|
Subject: app/testpmd: fix MAC header in csum forward engine
|
|
|
|
[ upstream commit 008834b91ac9a9e4ea982e5d2a4526d1b90a8d18 ]
|
|
|
|
MLX5 SR-IOV Tx engine will not transmit Ethernet frame
|
|
if destination MAC address matched local port address. The frame ether
|
|
looped-back to Rx or dropped, depending on the port configuration.
|
|
|
|
Application running over MLX5 SR-IOV port cannot transmit packet
|
|
polled from Rx queue as is. The packet Ethernet destination address
|
|
must be changed.
|
|
|
|
Add new run-time configuration parameter to the `csum` forwarding
|
|
engine to control MAC addresses configuration:
|
|
|
|
testpmd> csum mac-swap on|off <port_id>
|
|
|
|
`mac-swap on` replace MAC addresses.
|
|
`mac-swap off` keep Ethernet header unchanged.
|
|
|
|
Fixes: 9b4ea7ae77fa ("app/testpmd: revert MAC update in checksum forwarding")
|
|
|
|
Signed-off-by: Gregory Etelson <getelson@nvidia.com>
|
|
Acked-by: Huisong Li <lihuisong@huawei.com>
|
|
---
|
|
app/test-pmd/cmdline.c | 50 +++++++++++++++++++++++++++++++++++++++++
|
|
app/test-pmd/csumonly.c | 6 +++++
|
|
app/test-pmd/testpmd.c | 5 +++--
|
|
app/test-pmd/testpmd.h | 3 ++-
|
|
4 files changed, 61 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
|
|
index 8d4a88bb85..9e0e725913 100644
|
|
--- a/app/test-pmd/cmdline.c
|
|
+++ b/app/test-pmd/cmdline.c
|
|
@@ -4836,6 +4836,55 @@ cmdline_parse_inst_t cmd_csum_tunnel = {
|
|
},
|
|
};
|
|
|
|
+struct cmd_csum_mac_swap_result {
|
|
+ cmdline_fixed_string_t csum;
|
|
+ cmdline_fixed_string_t parse;
|
|
+ cmdline_fixed_string_t onoff;
|
|
+ portid_t port_id;
|
|
+};
|
|
+
|
|
+static void
|
|
+cmd_csum_mac_swap_parsed(void *parsed_result,
|
|
+ __rte_unused struct cmdline *cl,
|
|
+ __rte_unused void *data)
|
|
+{
|
|
+ struct cmd_csum_mac_swap_result *res = parsed_result;
|
|
+
|
|
+ if (port_id_is_invalid(res->port_id, ENABLED_WARN))
|
|
+ return;
|
|
+ if (strcmp(res->onoff, "on") == 0)
|
|
+ ports[res->port_id].fwd_mac_swap = 1;
|
|
+ else
|
|
+ ports[res->port_id].fwd_mac_swap = 0;
|
|
+}
|
|
+
|
|
+static cmdline_parse_token_string_t cmd_csum_mac_swap_csum =
|
|
+ TOKEN_STRING_INITIALIZER(struct cmd_csum_mac_swap_result,
|
|
+ csum, "csum");
|
|
+static cmdline_parse_token_string_t cmd_csum_mac_swap_parse =
|
|
+ TOKEN_STRING_INITIALIZER(struct cmd_csum_mac_swap_result,
|
|
+ parse, "mac-swap");
|
|
+static cmdline_parse_token_string_t cmd_csum_mac_swap_onoff =
|
|
+ TOKEN_STRING_INITIALIZER(struct cmd_csum_mac_swap_result,
|
|
+ onoff, "on#off");
|
|
+static cmdline_parse_token_num_t cmd_csum_mac_swap_portid =
|
|
+ TOKEN_NUM_INITIALIZER(struct cmd_csum_mac_swap_result,
|
|
+ port_id, RTE_UINT16);
|
|
+
|
|
+static cmdline_parse_inst_t cmd_csum_mac_swap = {
|
|
+ .f = cmd_csum_mac_swap_parsed,
|
|
+ .data = NULL,
|
|
+ .help_str = "csum mac-swap on|off <port_id>: "
|
|
+ "Enable/Disable forward mac address swap",
|
|
+ .tokens = {
|
|
+ (void *)&cmd_csum_mac_swap_csum,
|
|
+ (void *)&cmd_csum_mac_swap_parse,
|
|
+ (void *)&cmd_csum_mac_swap_onoff,
|
|
+ (void *)&cmd_csum_mac_swap_portid,
|
|
+ NULL,
|
|
+ },
|
|
+};
|
|
+
|
|
/* *** ENABLE HARDWARE SEGMENTATION IN TX NON-TUNNELED PACKETS *** */
|
|
struct cmd_tso_set_result {
|
|
cmdline_fixed_string_t tso;
|
|
@@ -17699,6 +17748,7 @@ cmdline_parse_ctx_t main_ctx[] = {
|
|
(cmdline_parse_inst_t *)&cmd_csum_set,
|
|
(cmdline_parse_inst_t *)&cmd_csum_show,
|
|
(cmdline_parse_inst_t *)&cmd_csum_tunnel,
|
|
+ (cmdline_parse_inst_t *)&cmd_csum_mac_swap,
|
|
(cmdline_parse_inst_t *)&cmd_tso_set,
|
|
(cmdline_parse_inst_t *)&cmd_tso_show,
|
|
(cmdline_parse_inst_t *)&cmd_tunnel_tso_set,
|
|
diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
|
|
index 206968d37a..d8cb8c89aa 100644
|
|
--- a/app/test-pmd/csumonly.c
|
|
+++ b/app/test-pmd/csumonly.c
|
|
@@ -887,6 +887,12 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
|
|
* and inner headers */
|
|
|
|
eth_hdr = rte_pktmbuf_mtod(m, struct rte_ether_hdr *);
|
|
+ if (ports[fs->tx_port].fwd_mac_swap) {
|
|
+ rte_ether_addr_copy(&peer_eth_addrs[fs->peer_addr],
|
|
+ ð_hdr->dst_addr);
|
|
+ rte_ether_addr_copy(&ports[fs->tx_port].eth_addr,
|
|
+ ð_hdr->src_addr);
|
|
+ }
|
|
parse_ethernet(eth_hdr, &info);
|
|
l3_hdr = (char *)eth_hdr + info.l2_len;
|
|
|
|
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
|
|
index 2be92af9f8..ff9eabbcb7 100644
|
|
--- a/app/test-pmd/testpmd.c
|
|
+++ b/app/test-pmd/testpmd.c
|
|
@@ -4160,10 +4160,11 @@ init_port(void)
|
|
"rte_zmalloc(%d struct rte_port) failed\n",
|
|
RTE_MAX_ETHPORTS);
|
|
}
|
|
- for (i = 0; i < RTE_MAX_ETHPORTS; i++)
|
|
+ for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
|
|
+ ports[i].fwd_mac_swap = 1;
|
|
ports[i].xstats_info.allocated = false;
|
|
- for (i = 0; i < RTE_MAX_ETHPORTS; i++)
|
|
LIST_INIT(&ports[i].flow_tunnel_list);
|
|
+ }
|
|
/* Initialize ports NUMA structures */
|
|
memset(port_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
|
|
memset(rxring_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
|
|
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
|
|
index ab6642585e..442f97ce3d 100644
|
|
--- a/app/test-pmd/testpmd.h
|
|
+++ b/app/test-pmd/testpmd.h
|
|
@@ -247,7 +247,8 @@ struct rte_port {
|
|
struct rte_ether_addr *mc_addr_pool; /**< pool of multicast addrs */
|
|
uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */
|
|
uint8_t slave_flag : 1, /**< bonding slave port */
|
|
- bond_flag : 1; /**< port is bond device */
|
|
+ bond_flag : 1, /**< port is bond device */
|
|
+ fwd_mac_swap : 1; /**< swap packet MAC before forward */
|
|
struct port_flow *flow_list; /**< Associated flows. */
|
|
struct port_indirect_action *actions_list;
|
|
/**< Associated indirect actions. */
|
|
--
|
|
2.23.0
|
|
|