All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <arybchenko@solarflare.com>
To: Wei Dai <wei.dai@intel.com>, <wenzhuo.lu@intel.com>,
	<jingjing.wu@intel.com>
Cc: <dev@dpdk.org>
Subject: Re: [PATCH v2 1/2] app/testpmd: add commands to test new Rx offload API
Date: Tue, 13 Mar 2018 10:21:15 +0300	[thread overview]
Message-ID: <a2995d82-9db4-59dd-3cb9-677e14022009@solarflare.com> (raw)
In-Reply-To: <1520923325-40400-2-git-send-email-wei.dai@intel.com>

On 03/13/2018 09:42 AM, Wei Dai wrote:
> Add following testpmd run-time commands to support test of
> new Rx offload API:
> rx_offload get capability <port_id>
> rx_offload get configuration <port_id>
> rx_offload enable|disable per_port <offload> <port_id>
> rx_offload enable|disable per_queue <offload> <port_id> <queue_id>
>
> Above last 2 commands should be run when the port is stopped.
> And <offload> can be one of "vlan_strip", "ipv4_cksum", ...
>
> Signed-off-by: Wei Dai <wei.dai@intel.com>
> ---
>   app/test-pmd/cmdline.c | 424 +++++++++++++++++++++++++++++++++++++++++++++++++
>   app/test-pmd/testpmd.c |  15 +-
>   app/test-pmd/testpmd.h |   1 +
>   3 files changed, 438 insertions(+), 2 deletions(-)
>
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index d1dc1de..dfd0ca6 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -15996,6 +15996,426 @@ cmdline_parse_inst_t cmd_ptype_mapping_update = {
>   	},
>   };
>   
> +/* Get Rx offloads capability */
> +struct cmd_rx_offload_get_capa_result {
> +	cmdline_fixed_string_t rx_offload;
> +	cmdline_fixed_string_t get;
> +	cmdline_fixed_string_t capability;
> +	portid_t port_id;
> +};
> +
> +cmdline_parse_token_string_t cmd_rx_offload_get_capa_rx_offload =
> +	TOKEN_STRING_INITIALIZER
> +		(struct cmd_rx_offload_get_capa_result,
> +		 rx_offload, "rx_offload");
> +cmdline_parse_token_string_t cmd_rx_offload_get_capa_get =
> +	TOKEN_STRING_INITIALIZER
> +		(struct cmd_rx_offload_get_capa_result,
> +		 get, "get");
> +cmdline_parse_token_string_t cmd_rx_offload_get_capa_capability =
> +	TOKEN_STRING_INITIALIZER
> +		(struct cmd_rx_offload_get_capa_result,
> +		 capability, "capability");
> +cmdline_parse_token_num_t cmd_rx_offload_get_capa_port_id =
> +	TOKEN_NUM_INITIALIZER
> +		(struct cmd_rx_offload_get_capa_result,
> +		 port_id, UINT16);
> +
> +static void
> +print_rx_offloads(uint64_t offloads)
> +{
> +	uint64_t single_offload;
> +
> +	for (single_offload = DEV_RX_OFFLOAD_VLAN_STRIP;
> +	     single_offload <= DEV_RX_OFFLOAD_SECURITY;

It requires attention when a new offload is added.
Please, consider to use something like __builtin_ffsll(), print name of
the found bit, clear it and retry. It allows to avoid boundaries 
specification.

<snip>


> +static int
> +config_rx_offload(const char *name, uint64_t *offload, int on)
> +{
> +	uint64_t local = *offload;
> +
> +	if (!strcmp(name, "vlan_strip")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_VLAN_STRIP;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_VLAN_STRIP;
> +	} else if (!strcmp(name, "ipv4_cksum")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_IPV4_CKSUM;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_IPV4_CKSUM;
> +	} else if (!strcmp(name, "udp_cksum")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_UDP_CKSUM;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_UDP_CKSUM;
> +	} else if (!strcmp(name, "tcp_cksum")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_TCP_CKSUM;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_TCP_CKSUM;
> +	} else if (!strcmp(name, "tcp_lro")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_TCP_LRO;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_TCP_LRO;
> +	} else if (!strcmp(name, "qinq_strip")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_QINQ_STRIP;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_QINQ_STRIP;
> +	} else if (!strcmp(name, "outer_ipv4_cksum")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM;
> +	} else if (!strcmp(name, "macsec_strip")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_MACSEC_STRIP;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_MACSEC_STRIP;
> +	} else if (!strcmp(name, "header_split")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_HEADER_SPLIT;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_HEADER_SPLIT;
> +	} else if (!strcmp(name, "vlan_filter")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_VLAN_FILTER;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_VLAN_FILTER;
> +	} else if (!strcmp(name, "vlan_extend")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_VLAN_EXTEND;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_VLAN_EXTEND;
> +	} else if (!strcmp(name, "jumbo_frame")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_JUMBO_FRAME;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_JUMBO_FRAME;
> +	} else if (!strcmp(name, "crc_strip")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_CRC_STRIP;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_CRC_STRIP;
> +	} else if (!strcmp(name, "scatter")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_SCATTER;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_SCATTER;
> +	} else if (!strcmp(name, "timestamp")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_TIMESTAMP;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_TIMESTAMP;
> +	} else if (!strcmp(name, "security")) {
> +		if (on)
> +			local |= DEV_RX_OFFLOAD_SECURITY;
> +		else
> +			local &= ~DEV_RX_OFFLOAD_SECURITY;
> +	} else
> +		return -1;

I was going to suggest rte_eth_dev_rx_offload_name(), strcasecmp() and loop.
It is possible to iterate on all U64 bits or add a way to get all 
offload bits from rte_ethdev.
However it still requires list of offloads in the help below. So, it is 
not easy to get rig of
offloads list completely. Just an idea. Up to you.

<snip>

> +cmdline_parse_inst_t cmd_config_per_port_rx_offload = {
> +	.f = cmd_config_per_port_rx_offload_parsed,
> +	.data = NULL,
> +	.help_str = "rx_offload enable|disable per_port vlan_strip|ipv4_cksum|"
> +		    "udp_cksum|tcp_cksum|tcp_lro|qinq_strip|outer_ipv4_cksum|"
> +		    "macsec_strip|header_split|vlan_filter|vlan_extend|"
> +		    "jumbo_frame|crc_strip|scatter|timestamp|security "
> +		    "<port_id>",
>

<snip>

  reply	other threads:[~2018-03-13  7:21 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-12  8:15 [PATCH 0/2] app/testpmd: add new commands to test new Tx/Rx offload API Wei Dai
2018-03-12  8:15 ` [PATCH 1/2] app/testpmd: add commands to test new Rx " Wei Dai
2018-03-12  8:42   ` Andrew Rybchenko
2018-03-13  1:06     ` Dai, Wei
2018-03-12  8:15 ` [PATCH 2/2] app/testpmd: add commands to test new Tx " Wei Dai
2018-03-13  6:42 ` [PATCH v2 0/2] app/testpmd: add new commands to test new Tx/Rx " Wei Dai
2018-03-13  6:42   ` [PATCH v2 1/2] app/testpmd: add commands to test new Rx " Wei Dai
2018-03-13  7:21     ` Andrew Rybchenko [this message]
2018-03-13  9:30       ` Ananyev, Konstantin
2018-03-17 13:45         ` Dai, Wei
2018-03-14 19:40     ` Wu, Jingjing
2018-03-17 13:49       ` Dai, Wei
2018-03-13  6:42   ` [PATCH v2 2/2] app/testpmd: add commands to test new Tx " Wei Dai
2018-03-17 13:31   ` [PATCH v3 0/3] app/testpmd: add new commands to test new Tx/Rx " Wei Dai
2018-03-17 13:31     ` [PATCH v3 1/3] ethdev: add enum type for loop on Rx/Tx offloads Wei Dai
2018-03-17 13:31     ` [PATCH v3 2/3] app/testpmd: add commands to test new Rx offload API Wei Dai
2018-03-17 13:31     ` [PATCH v3 3/3] app/testpmd: add commands to test new Tx " Wei Dai
2018-03-19 12:33     ` [PATCH v4 0/3] app/testpmd: add new commands to test new Tx/Rx offload Wei Dai
2018-03-19 12:33       ` [PATCH v4 1/3] ethdev: add enum type for loop on Rx/Tx offloads Wei Dai
2018-03-19 12:33       ` [PATCH v4 2/3] app/testpmd: add commands to test new Rx offload API Wei Dai
2018-03-19 12:33       ` [PATCH v4 3/3] pp/testpmd: add commands to test new Tx " Wei Dai
2018-03-19 12:40     ` [PATCH v4 0/3] app/testpmd: add new commands to test new Tx/Rx offload Wei Dai
2018-03-19 12:40       ` [PATCH v4 1/3] ethdev: add enum type for loop on Rx/Tx offloads Wei Dai
2018-03-19 14:05         ` Zhang, Qi Z
2018-03-20  1:52           ` Dai, Wei
2018-03-19 12:40       ` [PATCH v4 2/3] app/testpmd: add commands to test new Rx offload API Wei Dai
2018-03-19 12:40       ` [PATCH v4 3/3] app/testpmd: add commands to test new Tx " Wei Dai
2018-03-20  3:09       ` [PATCH v5 0/2] app/testpmd: add new commands to test new Tx/Rx offloads Wei Dai
2018-03-20  3:09         ` [PATCH v5 1/2] app/testpmd: add commands to test new Rx offload API Wei Dai
2018-03-20  3:09         ` [PATCH v5 2/2] app/testpmd: add commands to test new Tx " Wei Dai
2018-03-22  8:00         ` [PATCH v6 0/2] app/testpmd: add new commands to test new Tx/Rx offloads Wei Dai
2018-03-22  8:00           ` [PATCH v6 1/2] app/testpmd: add commands to test new Rx offload API Wei Dai
2018-03-30  8:40             ` Wu, Jingjing
2018-03-22  8:00           ` [PATCH v6 2/2] app/testpmd: add commands to test new Tx " Wei Dai
2018-03-30 23:05             ` Wu, Jingjing
2018-04-03  8:57           ` [PATCH v7 0/2] app/testpmd: add new commands to test new Tx/Rx offloads Wei Dai
2018-04-03  8:57             ` [PATCH v7 1/2] app/testpmd: add commands to test new Rx offload API Wei Dai
2018-04-03  8:57             ` [PATCH v7 2/2] app/testpmd: add commands to test new Tx " Wei Dai
2018-04-12 17:53             ` [PATCH v7 0/2] app/testpmd: add new commands to test new Tx/Rx offloads Ferruh Yigit
2018-05-08 13:30             ` Dai, Wei
2018-05-08 15:33               ` Ferruh Yigit
2018-05-09 12:13             ` [PATCH v8] app/testpmd: add commands to test new offload API Wei Dai
2018-05-11  0:00               ` Ferruh Yigit
2018-05-11  0:10                 ` Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a2995d82-9db4-59dd-3cb9-677e14022009@solarflare.com \
    --to=arybchenko@solarflare.com \
    --cc=dev@dpdk.org \
    --cc=jingjing.wu@intel.com \
    --cc=wei.dai@intel.com \
    --cc=wenzhuo.lu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.