DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: Dekel Peled <dekelp@nvidia.com>
Cc: Ori Kam <orika@nvidia.com>, Thomas Monjalon <thomas@monjalon.net>,
	 Ferruh Yigit <ferruh.yigit@intel.com>,
	Andrew Rybchenko <arybchenko@solarflare.com>,
	 "Ananyev, Konstantin" <konstantin.ananyev@intel.com>,
	Olivier Matz <olivier.matz@6wind.com>,
	 Wenzhuo Lu <wenzhuo.lu@intel.com>,
	Beilei Xing <beilei.xing@intel.com>,
	 "Iremonger, Bernard" <bernard.iremonger@intel.com>,
	Matan Azrad <matan@nvidia.com>,
	 Shahaf Shuler <shahafs@nvidia.com>,
	Slava Ovsiienko <viacheslavo@nvidia.com>, dpdk-dev <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v4 01/11] ethdev: add extensions attributes to IPv6 item
Date: Thu, 8 Oct 2020 11:28:51 -0700
Message-ID: <CACZ4nhv+A94FavNqQ0VE+6jbYs=tUdkxiTeSeixJYzV_b+n2ww@mail.gmail.com> (raw)
In-Reply-To: <a3724d2e6e1aae9a7d1d4a58949a9d3ab7874755.1602064141.git.dekelp@nvidia.com>

On Wed, Oct 7, 2020 at 3:55 AM Dekel Peled <dekelp@nvidia.com> wrote:
>
> Using the current implementation of DPDK, an application cannot match on
> IPv6 packets, based on the existing extension headers, in a simple way.
>
> Field 'Next Header' in IPv6 header indicates type of the first extension
> header only. Following extension headers can't be identified by
> inspecting the IPv6 header.
> As a result, the existence or absence of specific extension headers
> can't be used for packet matching.
>
> For example, fragmented IPv6 packets contain a dedicated extension header
> (which is implemented in a later patch of this series).
> Non-fragmented packets don't contain the fragment extension header.
> For an application to match on non-fragmented IPv6 packets, the current
> implementation doesn't provide a suitable solution.
> Matching on the Next Header field is not sufficient, since additional
> extension headers might be present in the same packet.
> To match on fragmented IPv6 packets, the same difficulty exists.
>
> This patch implements the update as detailed in RFC [1].
> A set of additional values will be added to IPv6 header struct.
> These values will indicate the existence of every defined extension
> header type, providing simple means for identification of existing
> extensions in the packet header.
> Continuing the above example, fragmented packets can be identified using
> the specific value indicating existence of fragment extension header.
> To match on non-fragmented IPv6 packets, need to use frag_ext_exist 0.
> To match on fragmented IPv6 packets, need to use frag_ext_exist 1.
> To match on any IPv6 packets, the frag_ext_exist field should
> not be specified for match.
>
> [1] https://mails.dpdk.org/archives/dev/2020-August/177257.html
>
> Signed-off-by: Dekel Peled <dekelp@nvidia.com>
> Acked-by: Ori Kam <orika@nvidia.com>

Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>


> ---
>  doc/guides/prog_guide/rte_flow.rst | 22 +++++++++++++++++++---
>  lib/librte_ethdev/rte_flow.h       | 25 +++++++++++++++++++++++--
>  2 files changed, 42 insertions(+), 5 deletions(-)
>
> diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
> index 119b128..ae090db 100644
> --- a/doc/guides/prog_guide/rte_flow.rst
> +++ b/doc/guides/prog_guide/rte_flow.rst
> @@ -946,11 +946,27 @@ Item: ``IPV6``
>
>  Matches an IPv6 header.
>
> -Note: IPv6 options are handled by dedicated pattern items, see `Item:
> -IPV6_EXT`_.
> +Dedicated flags indicate existence of specific extension headers.
> +Every type of extension header can use a dedicated pattern item, or
> +the generic `Item: IPV6_EXT`_.
> +To match on packets containing a specific extension header, an application
> +should match on the dedicated flag set to 1.
> +To match on packets not containing a specific extension header, an application
> +should match on the dedicated flag clear to 0.
> +In case application doesn't care about the existence of a specific extension
> +header, it should not specify the dedicated flag for matching.
>
>  - ``hdr``: IPv6 header definition (``rte_ip.h``).
> -- Default ``mask`` matches source and destination addresses only.
> +- ``hop_ext_exist``: Hop-by-Hop Options extension header exists.
> +- ``rout_ext_exist``: Routing extension header exists.
> +- ``frag_ext_exist``: Fragment extension header exists.
> +- ``auth_ext_exist``: Authentication extension header exists.
> +- ``esp_ext_exist``: Encapsulation Security Payload extension header exists.
> +- ``dest_ext_exist``: Destination Options extension header exists.
> +- ``mobil_ext_exist``: Mobility extension header exists.
> +- ``hip_ext_exist``: Host Identity Protocol extension header exists.
> +- ``shim6_ext_exist``: Shim6 Protocol extension header exists.
> +- Default ``mask`` matches ``hdr`` source and destination addresses only.
>
>  Item: ``ICMP``
>  ^^^^^^^^^^^^^^
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> index da8bfa5..5b5bed2 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -792,11 +792,32 @@ struct rte_flow_item_ipv4 {
>   *
>   * Matches an IPv6 header.
>   *
> - * Note: IPv6 options are handled by dedicated pattern items, see
> - * RTE_FLOW_ITEM_TYPE_IPV6_EXT.
> + * Dedicated flags indicate existence of specific extension headers.
> + * Every type of extension header can use a dedicated pattern item, or
> + * the generic item RTE_FLOW_ITEM_TYPE_IPV6_EXT.
>   */
>  struct rte_flow_item_ipv6 {
>         struct rte_ipv6_hdr hdr; /**< IPv6 header definition. */
> +       uint32_t hop_ext_exist:1;
> +       /**< Hop-by-Hop Options extension header exists. */
> +       uint32_t rout_ext_exist:1;
> +       /**< Routing extension header exists. */
> +       uint32_t frag_ext_exist:1;
> +       /**< Fragment extension header exists. */
> +       uint32_t auth_ext_exist:1;
> +       /**< Authentication extension header exists. */
> +       uint32_t esp_ext_exist:1;
> +       /**< Encapsulation Security Payload extension header exists. */
> +       uint32_t dest_ext_exist:1;
> +       /**< Destination Options extension header exists. */
> +       uint32_t mobil_ext_exist:1;
> +       /**< Mobility extension header exists. */
> +       uint32_t hip_ext_exist:1;
> +       /**< Host Identity Protocol extension header exists. */
> +       uint32_t shim6_ext_exist:1;
> +       /**< Shim6 Protocol extension header exists. */
> +       uint32_t reserved:23;
> +       /**< Reserved for future extension headers, must be zero. */
>  };
>
>  /** Default mask for RTE_FLOW_ITEM_TYPE_IPV6. */
> --
> 1.8.3.1
>

  parent reply	other threads:[~2020-10-08 18:29 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-30 14:10 [dpdk-dev] [PATCH 00/10] support match on L3 fragmented packets Dekel Peled
2020-09-30 14:10 ` [dpdk-dev] [PATCH 01/10] ethdev: add extensions attributes to IPv6 item Dekel Peled
2020-09-30 14:54   ` Ori Kam
2020-09-30 14:10 ` [dpdk-dev] [PATCH 02/10] ethdev: add IPv6 fragment extension header item Dekel Peled
2020-09-30 14:55   ` Ori Kam
2020-09-30 14:10 ` [dpdk-dev] [PATCH 03/10] app/testpmd: support IPv4 fragments Dekel Peled
2020-09-30 14:54   ` Ori Kam
2020-09-30 14:10 ` [dpdk-dev] [PATCH 04/10] app/testpmd: support IPv6 fragments Dekel Peled
2020-09-30 14:10 ` [dpdk-dev] [PATCH 05/10] app/testpmd: support IPv6 fragment extension item Dekel Peled
2020-09-30 14:56   ` Ori Kam
2020-09-30 14:10 ` [dpdk-dev] [PATCH 06/10] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled
2020-09-30 14:10 ` [dpdk-dev] [PATCH 07/10] net/mlx5: support match on IPv4 fragment packets Dekel Peled
2020-09-30 14:10 ` [dpdk-dev] [PATCH 08/10] net/mlx5: support match on IPv6 " Dekel Peled
2020-09-30 14:10 ` [dpdk-dev] [PATCH 09/10] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled
2020-09-30 14:10 ` [dpdk-dev] [PATCH 10/10] doc: update release notes for MLX5 L3 frag support Dekel Peled
2020-10-01 21:14 ` [dpdk-dev] [PATCH v2 00/11] support match on L3 fragmented packets Dekel Peled
2020-10-01 21:14   ` [dpdk-dev] [PATCH v2 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled
2020-10-04 13:45     ` Ori Kam
2020-10-01 21:14   ` [dpdk-dev] [PATCH v2 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled
2020-10-01 21:27     ` Stephen Hemminger
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 03/11] app/testpmd: support IPv4 fragments Dekel Peled
2020-10-04 13:47     ` Ori Kam
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 04/11] app/testpmd: support IPv6 fragments Dekel Peled
2020-10-04 13:49     ` Ori Kam
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled
2020-10-04 13:47     ` Ori Kam
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled
2020-10-04 13:49     ` Ori Kam
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled
2020-10-04 13:48     ` Ori Kam
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 08/11] net/mlx5: support match on IPv6 " Dekel Peled
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 09/11] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled
2020-10-04 13:51     ` Ori Kam
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled
2020-10-04 13:55     ` Ori Kam
2020-10-01 21:15   ` [dpdk-dev] [PATCH v2 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled
2020-10-04 13:55     ` Ori Kam
2020-10-05  8:35   ` [dpdk-dev] [PATCH v3 00/11] support match on L3 fragmented packets Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled
2020-10-06 23:43       ` Ajit Khaparde
2020-10-07  6:59         ` Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled
2020-10-05  8:50       ` Ori Kam
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 03/11] app/testpmd: support IPv4 fragments Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 04/11] app/testpmd: support IPv6 fragments Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 08/11] net/mlx5: support match on IPv6 " Dekel Peled
2020-10-05  8:51       ` Ori Kam
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 09/11] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled
2020-10-05  8:35     ` [dpdk-dev] [PATCH v3 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled
2020-10-07 10:53     ` [dpdk-dev] [PATCH v4 00/11] support match on L3 fragmented packets Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled
2020-10-08  3:14         ` Ajit Khaparde
2020-10-08  7:03           ` Dekel Peled
2020-10-08 18:28         ` Ajit Khaparde [this message]
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 03/11] app/testpmd: support IPv4 fragments Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 04/11] app/testpmd: support IPv6 fragments Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 08/11] net/mlx5: support match on IPv6 " Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 09/11] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled
2020-10-07 10:54       ` [dpdk-dev] [PATCH v4 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled
2020-10-07 11:15       ` [dpdk-dev] [PATCH v4 00/11] support match on L3 fragmented packets Ori Kam
2020-10-12 10:42       ` [dpdk-dev] [PATCH v5 " Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled
2020-10-12 20:41           ` Thomas Monjalon
2020-10-13  8:22             ` Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled
2020-10-12 20:50           ` Thomas Monjalon
2020-10-13  8:11             ` Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 03/11] app/testpmd: support IPv4 fragments Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 04/11] app/testpmd: support IPv6 fragments Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 08/11] net/mlx5: support match on IPv6 " Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 09/11] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled
2020-10-12 19:29           ` Thomas Monjalon
2020-10-12 10:43         ` [dpdk-dev] [PATCH v5 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled
2020-10-13 13:32         ` [dpdk-dev] [PATCH v6 0/5] support match on L3 fragmented packets Dekel Peled
2020-10-13 13:32           ` [dpdk-dev] [PATCH v6 1/5] ethdev: add extensions attributes to IPv6 item Dekel Peled
2020-10-14 10:36             ` Thomas Monjalon
2020-10-13 13:32           ` [dpdk-dev] [PATCH v6 2/5] ethdev: add IPv6 fragment extension header item Dekel Peled
2020-10-14 10:37             ` Thomas Monjalon
2020-10-13 13:32           ` [dpdk-dev] [PATCH v6 3/5] app/testpmd: support IPv4 fragments Dekel Peled
2020-10-13 13:32           ` [dpdk-dev] [PATCH v6 4/5] app/testpmd: support IPv6 fragments Dekel Peled
2020-10-13 13:32           ` [dpdk-dev] [PATCH v6 5/5] app/testpmd: support IPv6 fragment extension item Dekel Peled
2020-10-14 16:35 ` [dpdk-dev] [PATCH v7 0/5] support match on L3 fragmented packets Dekel Peled
2020-10-14 16:35   ` [dpdk-dev] [PATCH v7 1/5] ethdev: add extensions attributes to IPv6 item Dekel Peled
2020-10-14 16:35   ` [dpdk-dev] [PATCH v7 2/5] ethdev: add IPv6 fragment extension header item Dekel Peled
2020-10-14 16:35   ` [dpdk-dev] [PATCH v7 3/5] app/testpmd: support IPv4 fragments Dekel Peled
2020-10-14 16:35   ` [dpdk-dev] [PATCH v7 4/5] app/testpmd: support IPv6 fragments Dekel Peled
2020-10-14 16:35   ` [dpdk-dev] [PATCH v7 5/5] app/testpmd: support IPv6 fragment extension item Dekel Peled
2020-10-14 17:18   ` [dpdk-dev] [PATCH v7 0/5] support match on L3 fragmented packets 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='CACZ4nhv+A94FavNqQ0VE+6jbYs=tUdkxiTeSeixJYzV_b+n2ww@mail.gmail.com' \
    --to=ajit.khaparde@broadcom.com \
    --cc=arybchenko@solarflare.com \
    --cc=beilei.xing@intel.com \
    --cc=bernard.iremonger@intel.com \
    --cc=dekelp@nvidia.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=matan@nvidia.com \
    --cc=olivier.matz@6wind.com \
    --cc=orika@nvidia.com \
    --cc=shahafs@nvidia.com \
    --cc=thomas@monjalon.net \
    --cc=viacheslavo@nvidia.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

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git