All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
To: Viacheslav Ovsiienko <viacheslavo@nvidia.com>, dev@dpdk.org
Cc: rasland@nvidia.com, matan@nvidia.com, shahafs@nvidia.com,
	orika@nvidia.com, getelson@nvidia.com, thomas@monjalon.net
Subject: Re: [dpdk-dev] [PATCH v2 1/5] ethdev: update modify field flow action
Date: Mon, 11 Oct 2021 12:54:50 +0300	[thread overview]
Message-ID: <57fd8c07-a807-bf3c-10c0-e560b5089685@oktetlabs.ru> (raw)
In-Reply-To: <20211010234547.1495-2-viacheslavo@nvidia.com>

On 10/11/21 2:45 AM, Viacheslav Ovsiienko wrote:
> The generic modify field flow action introduced in [1] has
> some issues related to the immediate source operand:
> 
>   - immediate source can be presented either as an unsigned
>     64-bit integer or pointer to data pattern in memory.
>     There was no explicit pointer field defined in the union.
> 
>   - the byte ordering for 64-bit integer was not specified.
>     Many fields have shorter lengths and byte ordering
>     is crucial.
> 
>   - how the bit offset is applied to the immediate source
>     field was not defined and documented.
> 
>   - 64-bit integer size is not enough to provide IPv6
>     addresses.
> 
> In order to cover the issues and exclude any ambiguities
> the following is done:
> 
>   - introduce the explicit pointer field
>     in rte_flow_action_modify_data structure
> 
>   - replace the 64-bit unsigned integer with 16-byte array
> 
>   - update the modify field flow action documentation
> 
> [1] commit 73b68f4c54a0 ("ethdev: introduce generic modify flow action")
> 
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
> ---
>  doc/guides/prog_guide/rte_flow.rst     | 16 ++++++++++++++++
>  doc/guides/rel_notes/release_21_11.rst |  9 +++++++++
>  lib/ethdev/rte_flow.h                  | 17 ++++++++++++++---
>  3 files changed, 39 insertions(+), 3 deletions(-)
> 
> diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
> index 2b42d5ec8c..1ceecb399f 100644
> --- a/doc/guides/prog_guide/rte_flow.rst
> +++ b/doc/guides/prog_guide/rte_flow.rst
> @@ -2835,6 +2835,22 @@ a packet to any other part of it.
>  ``value`` sets an immediate value to be used as a source or points to a
>  location of the value in memory. It is used instead of ``level`` and ``offset``
>  for ``RTE_FLOW_FIELD_VALUE`` and ``RTE_FLOW_FIELD_POINTER`` respectively.
> +The data in memory should be presented exactly in the same byte order and
> +length as in the relevant flow item, i.e. data for field with type
> +RTE_FLOW_FIELD_MAC_DST should follow the conventions of dst field
> +in rte_flow_item_eth structure, with type RTE_FLOW_FIELD_IPV6_SRC -
> +rte_flow_item_ipv6 conventions, and so on. If the field size is large than

large -> larger

> +16 bytes the pattern can be provided as pointer only.

RTE_FLOW_FIELD_MAC_DST, dst, rte_flow_item_eth, RTE_FLOW_FIELD_IPV6_SRC,
rte_flow_item_ipv6 should be ``x``.

> +
> +The bitfield extracted from the memory being applied as second operation
> +parameter is defined by action width and by the destination field offset.
> +Application should provide the data in immediate value memory (either as
> +buffer or by pointer) exactly as item field without any applied explicit offset,
> +and destination packet field (with specified width and bit offset) will be
> +replaced by immediate source bits from the same bit offset. For example,
> +to replace the third byte of MAC address with value 0x85, application should
> +specify destination width as 8, destination width as 16, and provide immediate

destination width twice above

> +value as sequence of bytes {xxx, xxx, 0x85, xxx, xxx, xxx}.
>  
>  .. _table_rte_flow_action_modify_field:

pvalue should be added in the "destination/source field
definition".

dst and src members documentation should be improved to
highlight the difference. Destination cannot be "immediate" and
"pointer". In fact, "pointer" is a kind of "immediate". May be
it is better to use "constant value" instead of "immediate".

>  
> diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
> index dfc2cbdeed..41a087d7c1 100644
> --- a/doc/guides/rel_notes/release_21_11.rst
> +++ b/doc/guides/rel_notes/release_21_11.rst
> @@ -187,6 +187,13 @@ API Changes
>    the crypto/security operation. This field will be used to communicate
>    events such as soft expiry with IPsec in lookaside mode.
>  
> +* ethdev: ``rte_flow_action_modify_data`` structure udpdated, immediate data

udpdated -> updated

> +  array is extended, data pointer field is explicitly added to union, the
> +  action behavior is defined in more strict fashion and documentation updated.
> +  The immediate value behavior has been changed, the entire immediate field
> +  should be provided, and offset for immediate source bitfield is assigned
> +  from destination one.
> +
>  
>  ABI Changes
>  -----------
> @@ -222,6 +229,8 @@ ABI Changes
>    ``rte_security_ipsec_xform`` to allow applications to configure SA soft
>    and hard expiry limits. Limits can be either in number of packets or bytes.
>  
> +* ethdev: ``rte_flow_action_modify_data`` structure udpdated.

udpdated -> updated
I'm not sure that it makes sense to duplicate ABI changes if
API is changed.

> +
>  
>  Known Issues
>  ------------
> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> index 7b1ed7f110..953924d42b 100644
> --- a/lib/ethdev/rte_flow.h
> +++ b/lib/ethdev/rte_flow.h
> @@ -3204,6 +3204,9 @@ enum rte_flow_field_id {
>  };
>  
>  /**
> + * @warning
> + * @b EXPERIMENTAL: this structure may change without prior notice
> + *

Isn't a separate fix to add missing experimental header?

>   * Field description for MODIFY_FIELD action.
>   */

"Another packet field" in the next paragraph I read as
a field of another packet which sounds confusing.
I guess it is "Another field of the packet" in fact.
I think it would be nice to clarify as well.

>  struct rte_flow_action_modify_data {
> @@ -3217,10 +3220,18 @@ struct rte_flow_action_modify_data {
>  			uint32_t offset;
>  		};
>  		/**
> -		 * Immediate value for RTE_FLOW_FIELD_VALUE or
> -		 * memory address for RTE_FLOW_FIELD_POINTER.
> +		 * Immediate value for RTE_FLOW_FIELD_VALUE, presented in the
> +		 * same byte order and length as in relevant rte_flow_item_xxx.
> +		 * The immediate source bitfield offset is inherited from
> +		 * the destination's one.
>  		 */
> -		uint64_t value;
> +		uint8_t value[16];
> +		/*

It should be a Doxygen style comment.

> +		 * Memory address for RTE_FLOW_FIELD_POINTER, memory layout
> +		 * should be the same as for relevant field in the
> +		 * rte_flow_item_xxx structure.
> +		 */
> +		void *pvalue;
>  	};
>  };
>  
> 


  parent reply	other threads:[~2021-10-11  9:54 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-10 14:16 [dpdk-dev] [RFC 1/3] ethdev: update modify field flow action Viacheslav Ovsiienko
2021-09-10 14:16 ` [dpdk-dev] [RFC 2/3] app/testpmd: update modify field flow action support Viacheslav Ovsiienko
2021-09-10 14:16 ` [dpdk-dev] [RFC 3/3] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
2021-10-01 19:52 ` [dpdk-dev] [PATCH 0/3] ethdev: update modify field flow action Viacheslav Ovsiienko
2021-10-01 19:52   ` [dpdk-dev] [PATCH 1/3] " Viacheslav Ovsiienko
2021-10-04  9:38     ` Ori Kam
2021-10-01 19:52   ` [dpdk-dev] [PATCH 2/3] app/testpmd: update modify field flow action support Viacheslav Ovsiienko
2021-10-01 19:52   ` [dpdk-dev] [PATCH 3/3] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
2021-10-10 23:45 ` [dpdk-dev] [PATCH v2 0/5] ethdev: update modify field flow action Viacheslav Ovsiienko
2021-10-10 23:45   ` [dpdk-dev] [PATCH v2 1/5] " Viacheslav Ovsiienko
2021-10-11  7:19     ` Ori Kam
2021-10-11  9:54     ` Andrew Rybchenko [this message]
2021-10-10 23:45   ` [dpdk-dev] [PATCH v2 2/5] app/testpmd: update modify field flow action support Viacheslav Ovsiienko
2021-10-11  9:13     ` Ori Kam
2021-10-10 23:45   ` [dpdk-dev] [PATCH v2 3/5] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
2021-10-11  9:15     ` Ori Kam
2021-10-10 23:45   ` [dpdk-dev] [PATCH v2 4/5] net/mlx5: update modify field action Viacheslav Ovsiienko
2021-10-10 23:45   ` [dpdk-dev] [PATCH v2 5/5] doc: remove modify field action data deprecation notice Viacheslav Ovsiienko
2021-10-11  9:14     ` Ori Kam
2021-10-11  9:31     ` Andrew Rybchenko
2021-10-12  8:06 ` [dpdk-dev] [PATCH v3 0/5] ethdev: update modify field flow action Viacheslav Ovsiienko
2021-10-12  8:06   ` [dpdk-dev] [PATCH v3 1/5] " Viacheslav Ovsiienko
2021-10-12  8:16     ` Andrew Rybchenko
2021-10-12  8:06   ` [dpdk-dev] [PATCH v3 2/5] ethdev: fix missed experimental tag for modify field action Viacheslav Ovsiienko
2021-10-12  8:13     ` Ori Kam
2021-10-12  8:14     ` Andrew Rybchenko
2021-10-12  8:06   ` [dpdk-dev] [PATCH v3 3/5] app/testpmd: update modify field flow action support Viacheslav Ovsiienko
2021-10-12  8:06   ` [dpdk-dev] [PATCH v3 4/5] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
2021-10-12  8:06   ` [dpdk-dev] [PATCH v3 5/5] net/mlx5: update modify field action Viacheslav Ovsiienko
2021-10-12 20:25 ` [dpdk-dev] [PATCH v5 0/5] ethdev: update modify field flow action Viacheslav Ovsiienko
2021-10-12 20:25   ` [dpdk-dev] [PATCH v5 1/5] " Viacheslav Ovsiienko
2021-10-12 20:25   ` [dpdk-dev] [PATCH v5 2/5] ethdev: fix missed experimental tag for modify field action Viacheslav Ovsiienko
2021-10-12 20:25   ` [dpdk-dev] [PATCH v5 3/5] app/testpmd: update modify field flow action support Viacheslav Ovsiienko
2021-10-12 20:25   ` [dpdk-dev] [PATCH v5 4/5] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
2021-10-12 20:25   ` [dpdk-dev] [PATCH v5 5/5] net/mlx5: update modify field action Viacheslav Ovsiienko
2021-10-13 13:46   ` [dpdk-dev] [PATCH v5 0/5] ethdev: update modify field flow action Ferruh Yigit
2021-10-13 18:45 ` [dpdk-dev] [PATCH v6 " Viacheslav Ovsiienko
2021-10-13 18:45   ` [dpdk-dev] [PATCH v6 1/5] " Viacheslav Ovsiienko
2021-10-14 12:08     ` Ferruh Yigit
2021-10-14 20:07       ` Slava Ovsiienko
2021-10-13 18:45   ` [dpdk-dev] [PATCH v6 2/5] ethdev: fix missed experimental tag for modify field action Viacheslav Ovsiienko
2021-10-13 18:45   ` [dpdk-dev] [PATCH v6 3/5] app/testpmd: update modify field flow action support Viacheslav Ovsiienko
2021-10-13 18:45   ` [dpdk-dev] [PATCH v6 4/5] app/testpmd: fix hex string parser in flow commands Viacheslav Ovsiienko
2021-10-13 18:45   ` [dpdk-dev] [PATCH v6 5/5] net/mlx5: update modify field action Viacheslav Ovsiienko
2021-10-14 12:37   ` [dpdk-dev] [PATCH v6 0/5] ethdev: update modify field flow action 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=57fd8c07-a807-bf3c-10c0-e560b5089685@oktetlabs.ru \
    --to=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=getelson@nvidia.com \
    --cc=matan@nvidia.com \
    --cc=orika@nvidia.com \
    --cc=rasland@nvidia.com \
    --cc=shahafs@nvidia.com \
    --cc=thomas@monjalon.net \
    --cc=viacheslavo@nvidia.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.