app/testpmd: support config all offload

Message ID 20231023022939.33231-1-fengchengwen@huawei.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series app/testpmd: support config all offload |

Checks

Context Check Description
ci/loongarch-compilation success Compilation OK
ci/checkpatch success coding style OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/github-robot: build success github build: passed
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-compile-arm64-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS

Commit Message

fengchengwen Oct. 23, 2023, 2:29 a.m. UTC
  Extend supports all offload configuration in following commands:
1. port config 0 rx_offload all on/off
2. port config 0 tx_offload all on/off
3. port 0 rxq 0 rx_offload all on/off
4. port 0 txq 0 tx_offload all on/off

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 app/test-pmd/cmdline.c                      | 112 +++++++++++---------
 doc/guides/testpmd_app_ug/testpmd_funcs.rst |   8 +-
 2 files changed, 68 insertions(+), 52 deletions(-)
  

Comments

fengchengwen Oct. 23, 2023, 2:37 a.m. UTC | #1
Add cc to testpmd's maintainer due tools failed to add.

On 2023/10/23 10:29, Chengwen Feng wrote:
> Extend supports all offload configuration in following commands:
> 1. port config 0 rx_offload all on/off
> 2. port config 0 tx_offload all on/off
> 3. port 0 rxq 0 rx_offload all on/off
> 4. port 0 txq 0 tx_offload all on/off
> 
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>  app/test-pmd/cmdline.c                      | 112 +++++++++++---------
>  doc/guides/testpmd_app_ug/testpmd_funcs.rst |   8 +-
>  2 files changed, 68 insertions(+), 52 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 679ca47b94..35f5e4bbc0 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -763,7 +763,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>  			"port config (port_id) udp_tunnel_port add|rm vxlan|geneve|ecpri (udp_port)\n\n"
>  			"    Add/remove UDP tunnel port for tunneling offload\n\n"
>  
> -			"port config <port_id> rx_offload vlan_strip|"
> +			"port config <port_id> rx_offload all|vlan_strip|"
>  			"ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
>  			"outer_ipv4_cksum|macsec_strip|"
>  			"vlan_filter|vlan_extend|scatter|"
> @@ -771,7 +771,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>  			"     Enable or disable a per port Rx offloading"
>  			" on all Rx queues of a port\n\n"
>  
> -			"port (port_id) rxq (queue_id) rx_offload vlan_strip|"
> +			"port (port_id) rxq (queue_id) rx_offload all|vlan_strip|"
>  			"ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
>  			"outer_ipv4_cksum|macsec_strip|"
>  			"vlan_filter|vlan_extend|scatter|"
> @@ -779,7 +779,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>  			"    Enable or disable a per queue Rx offloading"
>  			" only on a specific Rx queue\n\n"
>  
> -			"port config (port_id) tx_offload vlan_insert|"
> +			"port config (port_id) tx_offload all|vlan_insert|"
>  			"ipv4_cksum|udp_cksum|tcp_cksum|sctp_cksum|tcp_tso|"
>  			"udp_tso|outer_ipv4_cksum|qinq_insert|vxlan_tnl_tso|"
>  			"gre_tnl_tso|ipip_tnl_tso|geneve_tnl_tso|"
> @@ -788,7 +788,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>  			"    Enable or disable a per port Tx offloading"
>  			" on all Tx queues of a port\n\n"
>  
> -			"port (port_id) txq (queue_id) tx_offload vlan_insert|"
> +			"port (port_id) txq (queue_id) tx_offload all|vlan_insert|"
>  			"ipv4_cksum|udp_cksum|tcp_cksum|sctp_cksum|tcp_tso|"
>  			"udp_tso|outer_ipv4_cksum|qinq_insert|vxlan_tnl_tso|"
>  			"gre_tnl_tso|ipip_tnl_tso|geneve_tnl_tso|macsec_insert"
> @@ -11112,7 +11112,7 @@ static cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_rx_off
>  static cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_offload =
>  	TOKEN_STRING_INITIALIZER
>  		(struct cmd_config_per_port_rx_offload_result,
> -		 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
> +		 offload, "all#vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
>  			   "qinq_strip#outer_ipv4_cksum#macsec_strip#"
>  			   "vlan_filter#vlan_extend#"
>  			   "scatter#buffer_split#timestamp#security#"
> @@ -11155,8 +11155,8 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
>  	portid_t port_id = res->port_id;
>  	struct rte_eth_dev_info dev_info;
>  	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
>  	uint16_t nb_rx_queues;
> +	uint64_t offload;
>  	int q;
>  	int ret;
>  
> @@ -11167,25 +11167,29 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
>  		return;
>  	}
>  
> -	single_offload = search_rx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> -	}
> -
>  	ret = eth_dev_info_get_print_err(port_id, &dev_info);
>  	if (ret != 0)
>  		return;
>  
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.rx_offload_capa;
> +	} else {
> +		offload = search_rx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
> +	}
> +
>  	nb_rx_queues = dev_info.nb_rx_queues;
>  	if (!strcmp(res->on_off, "on")) {
> -		port->dev_conf.rxmode.offloads |= single_offload;
> +		port->dev_conf.rxmode.offloads |= offload;
>  		for (q = 0; q < nb_rx_queues; q++)
> -			port->rxq[q].conf.offloads |= single_offload;
> +			port->rxq[q].conf.offloads |= offload;
>  	} else {
> -		port->dev_conf.rxmode.offloads &= ~single_offload;
> +		port->dev_conf.rxmode.offloads &= ~offload;
>  		for (q = 0; q < nb_rx_queues; q++)
> -			port->rxq[q].conf.offloads &= ~single_offload;
> +			port->rxq[q].conf.offloads &= ~offload;
>  	}
>  
>  	cmd_reconfig_device_queue(port_id, 1, 1);
> @@ -11194,7 +11198,7 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
>  static cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
>  	.f = cmd_config_per_port_rx_offload_parsed,
>  	.data = NULL,
> -	.help_str = "port config <port_id> rx_offload vlan_strip|ipv4_cksum|"
> +	.help_str = "port config <port_id> rx_offload all|vlan_strip|ipv4_cksum|"
>  		    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
>  		    "macsec_strip|vlan_filter|vlan_extend|"
>  		    "scatter|buffer_split|timestamp|security|"
> @@ -11244,7 +11248,7 @@ static cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_rxoff
>  static cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_offload =
>  	TOKEN_STRING_INITIALIZER
>  		(struct cmd_config_per_queue_rx_offload_result,
> -		 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
> +		 offload, "all#vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
>  			   "qinq_strip#outer_ipv4_cksum#macsec_strip#"
>  			   "vlan_filter#vlan_extend#"
>  			   "scatter#buffer_split#timestamp#security#keep_crc");
> @@ -11263,7 +11267,7 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
>  	portid_t port_id = res->port_id;
>  	uint16_t queue_id = res->queue_id;
>  	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
> +	uint64_t offload;
>  	int ret;
>  
>  	if (port->port_status != RTE_PORT_STOPPED) {
> @@ -11284,16 +11288,20 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
>  		return;
>  	}
>  
> -	single_offload = search_rx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.rx_queue_offload_capa;
> +	} else {
> +		offload = search_rx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
>  	}
>  
>  	if (!strcmp(res->on_off, "on"))
> -		port->rxq[queue_id].conf.offloads |= single_offload;
> +		port->rxq[queue_id].conf.offloads |= offload;
>  	else
> -		port->rxq[queue_id].conf.offloads &= ~single_offload;
> +		port->rxq[queue_id].conf.offloads &= ~offload;
>  
>  	cmd_reconfig_device_queue(port_id, 1, 1);
>  }
> @@ -11302,7 +11310,7 @@ static cmdline_parse_inst_t cmd_config_per_queue_rx_offload = {
>  	.f = cmd_config_per_queue_rx_offload_parsed,
>  	.data = NULL,
>  	.help_str = "port <port_id> rxq <queue_id> rx_offload "
> -		    "vlan_strip|ipv4_cksum|"
> +		    "all|vlan_strip|ipv4_cksum|"
>  		    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
>  		    "macsec_strip|vlan_filter|vlan_extend|"
>  		    "scatter|buffer_split|timestamp|security|"
> @@ -11531,7 +11539,7 @@ static cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_tx_off
>  static cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_offload =
>  	TOKEN_STRING_INITIALIZER
>  		(struct cmd_config_per_port_tx_offload_result,
> -		 offload, "vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
> +		 offload, "all#vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
>  			  "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
>  			  "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
>  			  "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
> @@ -11578,8 +11586,8 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
>  	portid_t port_id = res->port_id;
>  	struct rte_eth_dev_info dev_info;
>  	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
>  	uint16_t nb_tx_queues;
> +	uint64_t offload;
>  	int q;
>  	int ret;
>  
> @@ -11590,25 +11598,29 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
>  		return;
>  	}
>  
> -	single_offload = search_tx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> -	}
> -
>  	ret = eth_dev_info_get_print_err(port_id, &dev_info);
>  	if (ret != 0)
>  		return;
>  
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.tx_offload_capa;
> +	} else {
> +		offload = search_tx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
> +	}
> +
>  	nb_tx_queues = dev_info.nb_tx_queues;
>  	if (!strcmp(res->on_off, "on")) {
> -		port->dev_conf.txmode.offloads |= single_offload;
> +		port->dev_conf.txmode.offloads |= offload;
>  		for (q = 0; q < nb_tx_queues; q++)
> -			port->txq[q].conf.offloads |= single_offload;
> +			port->txq[q].conf.offloads |= offload;
>  	} else {
> -		port->dev_conf.txmode.offloads &= ~single_offload;
> +		port->dev_conf.txmode.offloads &= ~offload;
>  		for (q = 0; q < nb_tx_queues; q++)
> -			port->txq[q].conf.offloads &= ~single_offload;
> +			port->txq[q].conf.offloads &= ~offload;
>  	}
>  
>  	cmd_reconfig_device_queue(port_id, 1, 1);
> @@ -11618,7 +11630,7 @@ static cmdline_parse_inst_t cmd_config_per_port_tx_offload = {
>  	.f = cmd_config_per_port_tx_offload_parsed,
>  	.data = NULL,
>  	.help_str = "port config <port_id> tx_offload "
> -		    "vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
> +		    "all|vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
>  		    "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
>  		    "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
>  		    "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
> @@ -11669,7 +11681,7 @@ static cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_txoff
>  static cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_offload =
>  	TOKEN_STRING_INITIALIZER
>  		(struct cmd_config_per_queue_tx_offload_result,
> -		 offload, "vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
> +		 offload, "all#vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
>  			  "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
>  			  "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
>  			  "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
> @@ -11689,7 +11701,7 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
>  	portid_t port_id = res->port_id;
>  	uint16_t queue_id = res->queue_id;
>  	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
> +	uint64_t offload;
>  	int ret;
>  
>  	if (port->port_status != RTE_PORT_STOPPED) {
> @@ -11710,16 +11722,20 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
>  		return;
>  	}
>  
> -	single_offload = search_tx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.tx_queue_offload_capa;
> +	} else {
> +		offload = search_tx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
>  	}
>  
>  	if (!strcmp(res->on_off, "on"))
> -		port->txq[queue_id].conf.offloads |= single_offload;
> +		port->txq[queue_id].conf.offloads |= offload;
>  	else
> -		port->txq[queue_id].conf.offloads &= ~single_offload;
> +		port->txq[queue_id].conf.offloads &= ~offload;
>  
>  	cmd_reconfig_device_queue(port_id, 1, 1);
>  }
> @@ -11728,7 +11744,7 @@ static cmdline_parse_inst_t cmd_config_per_queue_tx_offload = {
>  	.f = cmd_config_per_queue_tx_offload_parsed,
>  	.data = NULL,
>  	.help_str = "port <port_id> txq <queue_id> tx_offload "
> -		    "vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
> +		    "all|vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
>  		    "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
>  		    "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
>  		    "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> index ff73d65a32..3d242c8534 100644
> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> @@ -1575,7 +1575,7 @@ Enable or disable a per port Rx offloading on all Rx queues of a port::
>     testpmd> port config (port_id) rx_offload (offloading) on|off
>  
>  * ``offloading``: can be any of these offloading capability:
> -                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
> +                  all, vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
>                    qinq_strip, outer_ipv4_cksum, macsec_strip,
>                    vlan_filter, vlan_extend, scatter, timestamp, security,
>                    keep_crc, rss_hash
> @@ -1590,7 +1590,7 @@ Enable or disable a per queue Rx offloading only on a specific Rx queue::
>     testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
>  
>  * ``offloading``: can be any of these offloading capability:
> -                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
> +                  all, vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
>                    qinq_strip, outer_ipv4_cksum, macsec_strip,
>                    vlan_filter, vlan_extend, scatter, timestamp, security,
>                    keep_crc
> @@ -1605,7 +1605,7 @@ Enable or disable a per port Tx offloading on all Tx queues of a port::
>     testpmd> port config (port_id) tx_offload (offloading) on|off
>  
>  * ``offloading``: can be any of these offloading capability:
> -                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
> +                  all, vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
>                    sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
>                    qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
>                    ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
> @@ -1621,7 +1621,7 @@ Enable or disable a per queue Tx offloading only on a specific Tx queue::
>     testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
>  
>  * ``offloading``: can be any of these offloading capability:
> -                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
> +                  all, vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
>                    sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
>                    qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
>                    ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
>
  
lihuisong (C) Oct. 24, 2023, 2:45 a.m. UTC | #2
It is more better if support config these offloads for all ports using 
one command.
Some driver may select their Rx/Tx function.
If user want to run many ports in an app, they may not specify any port 
to start, like "dpdk-testpmd -l 10-18 -- -i".
In this case, it will be very helpful to modify their Rx/Tx functions 
for all ports.

lgtm for this,
Acked-by: Huisong Li <lihuisong@huawei.com>


在 2023/10/23 10:29, Chengwen Feng 写道:
> Extend supports all offload configuration in following commands:
> 1. port config 0 rx_offload all on/off
> 2. port config 0 tx_offload all on/off
> 3. port 0 rxq 0 rx_offload all on/off
> 4. port 0 txq 0 tx_offload all on/off
>
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>   app/test-pmd/cmdline.c                      | 112 +++++++++++---------
>   doc/guides/testpmd_app_ug/testpmd_funcs.rst |   8 +-
>   2 files changed, 68 insertions(+), 52 deletions(-)
>
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 679ca47b94..35f5e4bbc0 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -763,7 +763,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>   			"port config (port_id) udp_tunnel_port add|rm vxlan|geneve|ecpri (udp_port)\n\n"
>   			"    Add/remove UDP tunnel port for tunneling offload\n\n"
>   
> -			"port config <port_id> rx_offload vlan_strip|"
> +			"port config <port_id> rx_offload all|vlan_strip|"
>   			"ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
>   			"outer_ipv4_cksum|macsec_strip|"
>   			"vlan_filter|vlan_extend|scatter|"
> @@ -771,7 +771,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>   			"     Enable or disable a per port Rx offloading"
>   			" on all Rx queues of a port\n\n"
>   
> -			"port (port_id) rxq (queue_id) rx_offload vlan_strip|"
> +			"port (port_id) rxq (queue_id) rx_offload all|vlan_strip|"
>   			"ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
>   			"outer_ipv4_cksum|macsec_strip|"
>   			"vlan_filter|vlan_extend|scatter|"
> @@ -779,7 +779,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>   			"    Enable or disable a per queue Rx offloading"
>   			" only on a specific Rx queue\n\n"
>   
> -			"port config (port_id) tx_offload vlan_insert|"
> +			"port config (port_id) tx_offload all|vlan_insert|"
>   			"ipv4_cksum|udp_cksum|tcp_cksum|sctp_cksum|tcp_tso|"
>   			"udp_tso|outer_ipv4_cksum|qinq_insert|vxlan_tnl_tso|"
>   			"gre_tnl_tso|ipip_tnl_tso|geneve_tnl_tso|"
> @@ -788,7 +788,7 @@ static void cmd_help_long_parsed(void *parsed_result,
>   			"    Enable or disable a per port Tx offloading"
>   			" on all Tx queues of a port\n\n"
>   
> -			"port (port_id) txq (queue_id) tx_offload vlan_insert|"
> +			"port (port_id) txq (queue_id) tx_offload all|vlan_insert|"
>   			"ipv4_cksum|udp_cksum|tcp_cksum|sctp_cksum|tcp_tso|"
>   			"udp_tso|outer_ipv4_cksum|qinq_insert|vxlan_tnl_tso|"
>   			"gre_tnl_tso|ipip_tnl_tso|geneve_tnl_tso|macsec_insert"
> @@ -11112,7 +11112,7 @@ static cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_rx_off
>   static cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_offload =
>   	TOKEN_STRING_INITIALIZER
>   		(struct cmd_config_per_port_rx_offload_result,
> -		 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
> +		 offload, "all#vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
>   			   "qinq_strip#outer_ipv4_cksum#macsec_strip#"
>   			   "vlan_filter#vlan_extend#"
>   			   "scatter#buffer_split#timestamp#security#"
> @@ -11155,8 +11155,8 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
>   	portid_t port_id = res->port_id;
>   	struct rte_eth_dev_info dev_info;
>   	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
>   	uint16_t nb_rx_queues;
> +	uint64_t offload;
>   	int q;
>   	int ret;
>   
> @@ -11167,25 +11167,29 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
>   		return;
>   	}
>   
> -	single_offload = search_rx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> -	}
> -
>   	ret = eth_dev_info_get_print_err(port_id, &dev_info);
>   	if (ret != 0)
>   		return;
>   
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.rx_offload_capa;
> +	} else {
> +		offload = search_rx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
> +	}
> +
>   	nb_rx_queues = dev_info.nb_rx_queues;
>   	if (!strcmp(res->on_off, "on")) {
> -		port->dev_conf.rxmode.offloads |= single_offload;
> +		port->dev_conf.rxmode.offloads |= offload;
>   		for (q = 0; q < nb_rx_queues; q++)
> -			port->rxq[q].conf.offloads |= single_offload;
> +			port->rxq[q].conf.offloads |= offload;
>   	} else {
> -		port->dev_conf.rxmode.offloads &= ~single_offload;
> +		port->dev_conf.rxmode.offloads &= ~offload;
>   		for (q = 0; q < nb_rx_queues; q++)
> -			port->rxq[q].conf.offloads &= ~single_offload;
> +			port->rxq[q].conf.offloads &= ~offload;
>   	}
>   
>   	cmd_reconfig_device_queue(port_id, 1, 1);
> @@ -11194,7 +11198,7 @@ cmd_config_per_port_rx_offload_parsed(void *parsed_result,
>   static cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
>   	.f = cmd_config_per_port_rx_offload_parsed,
>   	.data = NULL,
> -	.help_str = "port config <port_id> rx_offload vlan_strip|ipv4_cksum|"
> +	.help_str = "port config <port_id> rx_offload all|vlan_strip|ipv4_cksum|"
>   		    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
>   		    "macsec_strip|vlan_filter|vlan_extend|"
>   		    "scatter|buffer_split|timestamp|security|"
> @@ -11244,7 +11248,7 @@ static cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_rxoff
>   static cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_offload =
>   	TOKEN_STRING_INITIALIZER
>   		(struct cmd_config_per_queue_rx_offload_result,
> -		 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
> +		 offload, "all#vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
>   			   "qinq_strip#outer_ipv4_cksum#macsec_strip#"
>   			   "vlan_filter#vlan_extend#"
>   			   "scatter#buffer_split#timestamp#security#keep_crc");
> @@ -11263,7 +11267,7 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
>   	portid_t port_id = res->port_id;
>   	uint16_t queue_id = res->queue_id;
>   	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
> +	uint64_t offload;
>   	int ret;
>   
>   	if (port->port_status != RTE_PORT_STOPPED) {
> @@ -11284,16 +11288,20 @@ cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
>   		return;
>   	}
>   
> -	single_offload = search_rx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.rx_queue_offload_capa;
> +	} else {
> +		offload = search_rx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
>   	}
>   
>   	if (!strcmp(res->on_off, "on"))
> -		port->rxq[queue_id].conf.offloads |= single_offload;
> +		port->rxq[queue_id].conf.offloads |= offload;
>   	else
> -		port->rxq[queue_id].conf.offloads &= ~single_offload;
> +		port->rxq[queue_id].conf.offloads &= ~offload;
>   
>   	cmd_reconfig_device_queue(port_id, 1, 1);
>   }
> @@ -11302,7 +11310,7 @@ static cmdline_parse_inst_t cmd_config_per_queue_rx_offload = {
>   	.f = cmd_config_per_queue_rx_offload_parsed,
>   	.data = NULL,
>   	.help_str = "port <port_id> rxq <queue_id> rx_offload "
> -		    "vlan_strip|ipv4_cksum|"
> +		    "all|vlan_strip|ipv4_cksum|"
>   		    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
>   		    "macsec_strip|vlan_filter|vlan_extend|"
>   		    "scatter|buffer_split|timestamp|security|"
> @@ -11531,7 +11539,7 @@ static cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_tx_off
>   static cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_offload =
>   	TOKEN_STRING_INITIALIZER
>   		(struct cmd_config_per_port_tx_offload_result,
> -		 offload, "vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
> +		 offload, "all#vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
>   			  "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
>   			  "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
>   			  "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
> @@ -11578,8 +11586,8 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
>   	portid_t port_id = res->port_id;
>   	struct rte_eth_dev_info dev_info;
>   	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
>   	uint16_t nb_tx_queues;
> +	uint64_t offload;
>   	int q;
>   	int ret;
>   
> @@ -11590,25 +11598,29 @@ cmd_config_per_port_tx_offload_parsed(void *parsed_result,
>   		return;
>   	}
>   
> -	single_offload = search_tx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> -	}
> -
>   	ret = eth_dev_info_get_print_err(port_id, &dev_info);
>   	if (ret != 0)
>   		return;
>   
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.tx_offload_capa;
> +	} else {
> +		offload = search_tx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
> +	}
> +
>   	nb_tx_queues = dev_info.nb_tx_queues;
>   	if (!strcmp(res->on_off, "on")) {
> -		port->dev_conf.txmode.offloads |= single_offload;
> +		port->dev_conf.txmode.offloads |= offload;
>   		for (q = 0; q < nb_tx_queues; q++)
> -			port->txq[q].conf.offloads |= single_offload;
> +			port->txq[q].conf.offloads |= offload;
>   	} else {
> -		port->dev_conf.txmode.offloads &= ~single_offload;
> +		port->dev_conf.txmode.offloads &= ~offload;
>   		for (q = 0; q < nb_tx_queues; q++)
> -			port->txq[q].conf.offloads &= ~single_offload;
> +			port->txq[q].conf.offloads &= ~offload;
>   	}
>   
>   	cmd_reconfig_device_queue(port_id, 1, 1);
> @@ -11618,7 +11630,7 @@ static cmdline_parse_inst_t cmd_config_per_port_tx_offload = {
>   	.f = cmd_config_per_port_tx_offload_parsed,
>   	.data = NULL,
>   	.help_str = "port config <port_id> tx_offload "
> -		    "vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
> +		    "all|vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
>   		    "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
>   		    "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
>   		    "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
> @@ -11669,7 +11681,7 @@ static cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_txoff
>   static cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_offload =
>   	TOKEN_STRING_INITIALIZER
>   		(struct cmd_config_per_queue_tx_offload_result,
> -		 offload, "vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
> +		 offload, "all#vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
>   			  "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
>   			  "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
>   			  "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
> @@ -11689,7 +11701,7 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
>   	portid_t port_id = res->port_id;
>   	uint16_t queue_id = res->queue_id;
>   	struct rte_port *port = &ports[port_id];
> -	uint64_t single_offload;
> +	uint64_t offload;
>   	int ret;
>   
>   	if (port->port_status != RTE_PORT_STOPPED) {
> @@ -11710,16 +11722,20 @@ cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
>   		return;
>   	}
>   
> -	single_offload = search_tx_offload(res->offload);
> -	if (single_offload == 0) {
> -		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> -		return;
> +	if (!strcmp(res->offload, "all")) {
> +		offload = dev_info.tx_queue_offload_capa;
> +	} else {
> +		offload = search_tx_offload(res->offload);
> +		if (offload == 0) {
> +			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
> +			return;
> +		}
>   	}
>   
>   	if (!strcmp(res->on_off, "on"))
> -		port->txq[queue_id].conf.offloads |= single_offload;
> +		port->txq[queue_id].conf.offloads |= offload;
>   	else
> -		port->txq[queue_id].conf.offloads &= ~single_offload;
> +		port->txq[queue_id].conf.offloads &= ~offload;
>   
>   	cmd_reconfig_device_queue(port_id, 1, 1);
>   }
> @@ -11728,7 +11744,7 @@ static cmdline_parse_inst_t cmd_config_per_queue_tx_offload = {
>   	.f = cmd_config_per_queue_tx_offload_parsed,
>   	.data = NULL,
>   	.help_str = "port <port_id> txq <queue_id> tx_offload "
> -		    "vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
> +		    "all|vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
>   		    "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
>   		    "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
>   		    "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> index ff73d65a32..3d242c8534 100644
> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> @@ -1575,7 +1575,7 @@ Enable or disable a per port Rx offloading on all Rx queues of a port::
>      testpmd> port config (port_id) rx_offload (offloading) on|off
>   
>   * ``offloading``: can be any of these offloading capability:
> -                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
> +                  all, vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
>                     qinq_strip, outer_ipv4_cksum, macsec_strip,
>                     vlan_filter, vlan_extend, scatter, timestamp, security,
>                     keep_crc, rss_hash
> @@ -1590,7 +1590,7 @@ Enable or disable a per queue Rx offloading only on a specific Rx queue::
>      testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
>   
>   * ``offloading``: can be any of these offloading capability:
> -                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
> +                  all, vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
>                     qinq_strip, outer_ipv4_cksum, macsec_strip,
>                     vlan_filter, vlan_extend, scatter, timestamp, security,
>                     keep_crc
> @@ -1605,7 +1605,7 @@ Enable or disable a per port Tx offloading on all Tx queues of a port::
>      testpmd> port config (port_id) tx_offload (offloading) on|off
>   
>   * ``offloading``: can be any of these offloading capability:
> -                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
> +                  all, vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
>                     sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
>                     qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
>                     ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
> @@ -1621,7 +1621,7 @@ Enable or disable a per queue Tx offloading only on a specific Tx queue::
>      testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
>   
>   * ``offloading``: can be any of these offloading capability:
> -                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
> +                  all, vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
>                     sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
>                     qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
>                     ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
  
Ferruh Yigit Oct. 31, 2023, 4:57 p.m. UTC | #3
On 10/24/2023 3:45 AM, lihuisong (C) wrote:

...

> 
> 在 2023/10/23 10:29, Chengwen Feng 写道:
>> Extend supports all offload configuration in following commands:
>> 1. port config 0 rx_offload all on/off
>> 2. port config 0 tx_offload all on/off
>> 3. port 0 rxq 0 rx_offload all on/off
>> 4. port 0 txq 0 tx_offload all on/off
>>
>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>
>
> lgtm for this,
> Acked-by: Huisong Li <lihuisong@huawei.com>
>

Reviewed-by: Ferruh Yigit <ferruh.yigit@amd.com>

Applied to dpdk-next-net/main, thanks.
  

Patch

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 679ca47b94..35f5e4bbc0 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -763,7 +763,7 @@  static void cmd_help_long_parsed(void *parsed_result,
 			"port config (port_id) udp_tunnel_port add|rm vxlan|geneve|ecpri (udp_port)\n\n"
 			"    Add/remove UDP tunnel port for tunneling offload\n\n"
 
-			"port config <port_id> rx_offload vlan_strip|"
+			"port config <port_id> rx_offload all|vlan_strip|"
 			"ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
 			"outer_ipv4_cksum|macsec_strip|"
 			"vlan_filter|vlan_extend|scatter|"
@@ -771,7 +771,7 @@  static void cmd_help_long_parsed(void *parsed_result,
 			"     Enable or disable a per port Rx offloading"
 			" on all Rx queues of a port\n\n"
 
-			"port (port_id) rxq (queue_id) rx_offload vlan_strip|"
+			"port (port_id) rxq (queue_id) rx_offload all|vlan_strip|"
 			"ipv4_cksum|udp_cksum|tcp_cksum|tcp_lro|qinq_strip|"
 			"outer_ipv4_cksum|macsec_strip|"
 			"vlan_filter|vlan_extend|scatter|"
@@ -779,7 +779,7 @@  static void cmd_help_long_parsed(void *parsed_result,
 			"    Enable or disable a per queue Rx offloading"
 			" only on a specific Rx queue\n\n"
 
-			"port config (port_id) tx_offload vlan_insert|"
+			"port config (port_id) tx_offload all|vlan_insert|"
 			"ipv4_cksum|udp_cksum|tcp_cksum|sctp_cksum|tcp_tso|"
 			"udp_tso|outer_ipv4_cksum|qinq_insert|vxlan_tnl_tso|"
 			"gre_tnl_tso|ipip_tnl_tso|geneve_tnl_tso|"
@@ -788,7 +788,7 @@  static void cmd_help_long_parsed(void *parsed_result,
 			"    Enable or disable a per port Tx offloading"
 			" on all Tx queues of a port\n\n"
 
-			"port (port_id) txq (queue_id) tx_offload vlan_insert|"
+			"port (port_id) txq (queue_id) tx_offload all|vlan_insert|"
 			"ipv4_cksum|udp_cksum|tcp_cksum|sctp_cksum|tcp_tso|"
 			"udp_tso|outer_ipv4_cksum|qinq_insert|vxlan_tnl_tso|"
 			"gre_tnl_tso|ipip_tnl_tso|geneve_tnl_tso|macsec_insert"
@@ -11112,7 +11112,7 @@  static cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_rx_off
 static cmdline_parse_token_string_t cmd_config_per_port_rx_offload_result_offload =
 	TOKEN_STRING_INITIALIZER
 		(struct cmd_config_per_port_rx_offload_result,
-		 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
+		 offload, "all#vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
 			   "qinq_strip#outer_ipv4_cksum#macsec_strip#"
 			   "vlan_filter#vlan_extend#"
 			   "scatter#buffer_split#timestamp#security#"
@@ -11155,8 +11155,8 @@  cmd_config_per_port_rx_offload_parsed(void *parsed_result,
 	portid_t port_id = res->port_id;
 	struct rte_eth_dev_info dev_info;
 	struct rte_port *port = &ports[port_id];
-	uint64_t single_offload;
 	uint16_t nb_rx_queues;
+	uint64_t offload;
 	int q;
 	int ret;
 
@@ -11167,25 +11167,29 @@  cmd_config_per_port_rx_offload_parsed(void *parsed_result,
 		return;
 	}
 
-	single_offload = search_rx_offload(res->offload);
-	if (single_offload == 0) {
-		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
-		return;
-	}
-
 	ret = eth_dev_info_get_print_err(port_id, &dev_info);
 	if (ret != 0)
 		return;
 
+	if (!strcmp(res->offload, "all")) {
+		offload = dev_info.rx_offload_capa;
+	} else {
+		offload = search_rx_offload(res->offload);
+		if (offload == 0) {
+			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
+			return;
+		}
+	}
+
 	nb_rx_queues = dev_info.nb_rx_queues;
 	if (!strcmp(res->on_off, "on")) {
-		port->dev_conf.rxmode.offloads |= single_offload;
+		port->dev_conf.rxmode.offloads |= offload;
 		for (q = 0; q < nb_rx_queues; q++)
-			port->rxq[q].conf.offloads |= single_offload;
+			port->rxq[q].conf.offloads |= offload;
 	} else {
-		port->dev_conf.rxmode.offloads &= ~single_offload;
+		port->dev_conf.rxmode.offloads &= ~offload;
 		for (q = 0; q < nb_rx_queues; q++)
-			port->rxq[q].conf.offloads &= ~single_offload;
+			port->rxq[q].conf.offloads &= ~offload;
 	}
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
@@ -11194,7 +11198,7 @@  cmd_config_per_port_rx_offload_parsed(void *parsed_result,
 static cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
 	.f = cmd_config_per_port_rx_offload_parsed,
 	.data = NULL,
-	.help_str = "port config <port_id> rx_offload vlan_strip|ipv4_cksum|"
+	.help_str = "port config <port_id> rx_offload all|vlan_strip|ipv4_cksum|"
 		    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
 		    "macsec_strip|vlan_filter|vlan_extend|"
 		    "scatter|buffer_split|timestamp|security|"
@@ -11244,7 +11248,7 @@  static cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_rxoff
 static cmdline_parse_token_string_t cmd_config_per_queue_rx_offload_result_offload =
 	TOKEN_STRING_INITIALIZER
 		(struct cmd_config_per_queue_rx_offload_result,
-		 offload, "vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
+		 offload, "all#vlan_strip#ipv4_cksum#udp_cksum#tcp_cksum#tcp_lro#"
 			   "qinq_strip#outer_ipv4_cksum#macsec_strip#"
 			   "vlan_filter#vlan_extend#"
 			   "scatter#buffer_split#timestamp#security#keep_crc");
@@ -11263,7 +11267,7 @@  cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
 	portid_t port_id = res->port_id;
 	uint16_t queue_id = res->queue_id;
 	struct rte_port *port = &ports[port_id];
-	uint64_t single_offload;
+	uint64_t offload;
 	int ret;
 
 	if (port->port_status != RTE_PORT_STOPPED) {
@@ -11284,16 +11288,20 @@  cmd_config_per_queue_rx_offload_parsed(void *parsed_result,
 		return;
 	}
 
-	single_offload = search_rx_offload(res->offload);
-	if (single_offload == 0) {
-		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
-		return;
+	if (!strcmp(res->offload, "all")) {
+		offload = dev_info.rx_queue_offload_capa;
+	} else {
+		offload = search_rx_offload(res->offload);
+		if (offload == 0) {
+			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
+			return;
+		}
 	}
 
 	if (!strcmp(res->on_off, "on"))
-		port->rxq[queue_id].conf.offloads |= single_offload;
+		port->rxq[queue_id].conf.offloads |= offload;
 	else
-		port->rxq[queue_id].conf.offloads &= ~single_offload;
+		port->rxq[queue_id].conf.offloads &= ~offload;
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
 }
@@ -11302,7 +11310,7 @@  static cmdline_parse_inst_t cmd_config_per_queue_rx_offload = {
 	.f = cmd_config_per_queue_rx_offload_parsed,
 	.data = NULL,
 	.help_str = "port <port_id> rxq <queue_id> rx_offload "
-		    "vlan_strip|ipv4_cksum|"
+		    "all|vlan_strip|ipv4_cksum|"
 		    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
 		    "macsec_strip|vlan_filter|vlan_extend|"
 		    "scatter|buffer_split|timestamp|security|"
@@ -11531,7 +11539,7 @@  static cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_tx_off
 static cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_offload =
 	TOKEN_STRING_INITIALIZER
 		(struct cmd_config_per_port_tx_offload_result,
-		 offload, "vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
+		 offload, "all#vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
 			  "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
 			  "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
 			  "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
@@ -11578,8 +11586,8 @@  cmd_config_per_port_tx_offload_parsed(void *parsed_result,
 	portid_t port_id = res->port_id;
 	struct rte_eth_dev_info dev_info;
 	struct rte_port *port = &ports[port_id];
-	uint64_t single_offload;
 	uint16_t nb_tx_queues;
+	uint64_t offload;
 	int q;
 	int ret;
 
@@ -11590,25 +11598,29 @@  cmd_config_per_port_tx_offload_parsed(void *parsed_result,
 		return;
 	}
 
-	single_offload = search_tx_offload(res->offload);
-	if (single_offload == 0) {
-		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
-		return;
-	}
-
 	ret = eth_dev_info_get_print_err(port_id, &dev_info);
 	if (ret != 0)
 		return;
 
+	if (!strcmp(res->offload, "all")) {
+		offload = dev_info.tx_offload_capa;
+	} else {
+		offload = search_tx_offload(res->offload);
+		if (offload == 0) {
+			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
+			return;
+		}
+	}
+
 	nb_tx_queues = dev_info.nb_tx_queues;
 	if (!strcmp(res->on_off, "on")) {
-		port->dev_conf.txmode.offloads |= single_offload;
+		port->dev_conf.txmode.offloads |= offload;
 		for (q = 0; q < nb_tx_queues; q++)
-			port->txq[q].conf.offloads |= single_offload;
+			port->txq[q].conf.offloads |= offload;
 	} else {
-		port->dev_conf.txmode.offloads &= ~single_offload;
+		port->dev_conf.txmode.offloads &= ~offload;
 		for (q = 0; q < nb_tx_queues; q++)
-			port->txq[q].conf.offloads &= ~single_offload;
+			port->txq[q].conf.offloads &= ~offload;
 	}
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
@@ -11618,7 +11630,7 @@  static cmdline_parse_inst_t cmd_config_per_port_tx_offload = {
 	.f = cmd_config_per_port_tx_offload_parsed,
 	.data = NULL,
 	.help_str = "port config <port_id> tx_offload "
-		    "vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
+		    "all|vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
 		    "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
 		    "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
 		    "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
@@ -11669,7 +11681,7 @@  static cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_txoff
 static cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_offload =
 	TOKEN_STRING_INITIALIZER
 		(struct cmd_config_per_queue_tx_offload_result,
-		 offload, "vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
+		 offload, "all#vlan_insert#ipv4_cksum#udp_cksum#tcp_cksum#"
 			  "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#"
 			  "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#"
 			  "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#"
@@ -11689,7 +11701,7 @@  cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
 	portid_t port_id = res->port_id;
 	uint16_t queue_id = res->queue_id;
 	struct rte_port *port = &ports[port_id];
-	uint64_t single_offload;
+	uint64_t offload;
 	int ret;
 
 	if (port->port_status != RTE_PORT_STOPPED) {
@@ -11710,16 +11722,20 @@  cmd_config_per_queue_tx_offload_parsed(void *parsed_result,
 		return;
 	}
 
-	single_offload = search_tx_offload(res->offload);
-	if (single_offload == 0) {
-		fprintf(stderr, "Unknown offload name: %s\n", res->offload);
-		return;
+	if (!strcmp(res->offload, "all")) {
+		offload = dev_info.tx_queue_offload_capa;
+	} else {
+		offload = search_tx_offload(res->offload);
+		if (offload == 0) {
+			fprintf(stderr, "Unknown offload name: %s\n", res->offload);
+			return;
+		}
 	}
 
 	if (!strcmp(res->on_off, "on"))
-		port->txq[queue_id].conf.offloads |= single_offload;
+		port->txq[queue_id].conf.offloads |= offload;
 	else
-		port->txq[queue_id].conf.offloads &= ~single_offload;
+		port->txq[queue_id].conf.offloads &= ~offload;
 
 	cmd_reconfig_device_queue(port_id, 1, 1);
 }
@@ -11728,7 +11744,7 @@  static cmdline_parse_inst_t cmd_config_per_queue_tx_offload = {
 	.f = cmd_config_per_queue_tx_offload_parsed,
 	.data = NULL,
 	.help_str = "port <port_id> txq <queue_id> tx_offload "
-		    "vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
+		    "all|vlan_insert|ipv4_cksum|udp_cksum|tcp_cksum|"
 		    "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|"
 		    "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|"
 		    "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|"
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index ff73d65a32..3d242c8534 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -1575,7 +1575,7 @@  Enable or disable a per port Rx offloading on all Rx queues of a port::
    testpmd> port config (port_id) rx_offload (offloading) on|off
 
 * ``offloading``: can be any of these offloading capability:
-                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
+                  all, vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
                   qinq_strip, outer_ipv4_cksum, macsec_strip,
                   vlan_filter, vlan_extend, scatter, timestamp, security,
                   keep_crc, rss_hash
@@ -1590,7 +1590,7 @@  Enable or disable a per queue Rx offloading only on a specific Rx queue::
    testpmd> port (port_id) rxq (queue_id) rx_offload (offloading) on|off
 
 * ``offloading``: can be any of these offloading capability:
-                  vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
+                  all, vlan_strip, ipv4_cksum, udp_cksum, tcp_cksum, tcp_lro,
                   qinq_strip, outer_ipv4_cksum, macsec_strip,
                   vlan_filter, vlan_extend, scatter, timestamp, security,
                   keep_crc
@@ -1605,7 +1605,7 @@  Enable or disable a per port Tx offloading on all Tx queues of a port::
    testpmd> port config (port_id) tx_offload (offloading) on|off
 
 * ``offloading``: can be any of these offloading capability:
-                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
+                  all, vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
                   sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
                   qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
                   ipip_tnl_tso, geneve_tnl_tso, macsec_insert,
@@ -1621,7 +1621,7 @@  Enable or disable a per queue Tx offloading only on a specific Tx queue::
    testpmd> port (port_id) txq (queue_id) tx_offload (offloading) on|off
 
 * ``offloading``: can be any of these offloading capability:
-                  vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
+                  all, vlan_insert, ipv4_cksum, udp_cksum, tcp_cksum,
                   sctp_cksum, tcp_tso, udp_tso, outer_ipv4_cksum,
                   qinq_insert, vxlan_tnl_tso, gre_tnl_tso,
                   ipip_tnl_tso, geneve_tnl_tso, macsec_insert,