From e43dc93803c4623840472c6109ef05e26286ec2f Mon Sep 17 00:00:00 2001 From: Huisong Li Date: Sat, 11 Nov 2023 12:59:43 +0800 Subject: [PATCH] app/testpmd: fix tunnel TSO configuration Currently, there are two conditions to set tunnel TSO, like "parse tunnel" and "outer IP checksum". If these conditions are not satisfied, testpmd should not change their configuration, like tx_offloads on port and per queue, and no need to request "reconfig device". Fixes: 597f9fafe13b ("app/testpmd: convert to new Tx offloads API") Cc: stable@dpdk.org Signed-off-by: Huisong Li Reviewed-by: Ferruh Yigit --- app/test-pmd/cmdline.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 2e3365557a4..a231d112b0b 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -5096,12 +5096,6 @@ cmd_tunnel_tso_set_parsed(void *parsed_result, res->port_id); return; } - check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa); - - ports[res->port_id].dev_conf.txmode.offloads |= - (all_tunnel_tso & dev_info.tx_offload_capa); - printf("TSO segment size for tunneled packets is %d\n", - ports[res->port_id].tunnel_tso_segsz); /* Below conditions are needed to make it work: * (1) tunnel TSO is supported by the NIC; @@ -5114,14 +5108,23 @@ cmd_tunnel_tso_set_parsed(void *parsed_result, * is not necessary for IPv6 tunneled pkts because there's no * checksum in IP header anymore. */ - - if (!ports[res->port_id].parse_tunnel) + if (!ports[res->port_id].parse_tunnel) { fprintf(stderr, - "Warning: csum parse_tunnel must be set so that tunneled packets are recognized\n"); + "Error: csum parse_tunnel must be set so that tunneled packets are recognized\n"); + return; + } if (!(ports[res->port_id].dev_conf.txmode.offloads & - RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM)) + RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM)) { fprintf(stderr, - "Warning: csum set outer-ip must be set to hw if outer L3 is IPv4; not necessary for IPv6\n"); + "Error: csum set outer-ip must be set to hw if outer L3 is IPv4; not necessary for IPv6\n"); + return; + } + + check_tunnel_tso_nic_support(res->port_id, dev_info.tx_offload_capa); + ports[res->port_id].dev_conf.txmode.offloads |= + (all_tunnel_tso & dev_info.tx_offload_capa); + printf("TSO segment size for tunneled packets is %d\n", + ports[res->port_id].tunnel_tso_segsz); } cmd_config_queue_tx_offloads(&ports[res->port_id]);