From: Ori Kam <orika@mellanox.com>
To: Slava Ovsiienko <viacheslavo@mellanox.com>,
"dev@dpdk.org" <dev@dpdk.org>
Cc: Thomas Monjalon <thomas@monjalon.net>,
"arybchenko@solarflare.com" <arybchenko@solarflare.com>,
Matan Azrad <matan@mellanox.com>,
Raslan Darawsheh <rasland@mellanox.com>,
Yongseok Koh <yskoh@mellanox.com>
Subject: Re: [dpdk-dev] [PATCH v3] ethdev: add flow tag
Date: Sun, 27 Oct 2019 16:38:08 +0000 [thread overview]
Message-ID: <AM4PR05MB34259A3E48FCBBB4C2EBB213DB670@AM4PR05MB3425.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <1571922738-5069-1-git-send-email-viacheslavo@mellanox.com>
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Viacheslav Ovsiienko
> Sent: Thursday, October 24, 2019 4:12 PM
> To: dev@dpdk.org
> Cc: Thomas Monjalon <thomas@monjalon.net>; arybchenko@solarflare.com;
> Matan Azrad <matan@mellanox.com>; Raslan Darawsheh
> <rasland@mellanox.com>; Yongseok Koh <yskoh@mellanox.com>
> Subject: [dpdk-dev] [PATCH v3] ethdev: add flow tag
>
> A tag is a transient data which can be used during flow match. This can be
> used to store match result from a previous table so that the same pattern
> need not be matched again on the next table. Even if outer header is
> decapsulated on the previous match, the match result can be kept.
>
> Some device expose internal registers of its flow processing pipeline and
> those registers are quite useful for stateful connection tracking as it
> keeps status of flow matching. Multiple tags are supported by specifying
> index.
>
> Example testpmd commands are:
>
> flow create 0 ingress pattern ... / end
> actions set_tag index 2 value 0xaa00bb mask 0xffff00ff /
> set_tag index 3 value 0x123456 mask 0xffffff /
> vxlan_decap / jump group 1 / end
>
> flow create 0 ingress pattern ... / end
> actions set_tag index 2 value 0xcc00 mask 0xff00 /
> set_tag index 3 value 0x123456 mask 0xffffff /
> vxlan_decap / jump group 1 / end
>
> flow create 0 ingress group 1
> pattern tag index is 2 value spec 0xaa00bb value mask 0xffff00ff /
> eth ... / end
> actions ... jump group 2 / end
>
> flow create 0 ingress group 1
> pattern tag index is 2 value spec 0xcc00 value mask 0xff00 /
> tag index is 3 value spec 0x123456 value mask 0xffffff /
> eth ... / end
> actions ... / end
>
> flow create 0 ingress group 2
> pattern tag index is 3 value spec 0x123456 value mask 0xffffff /
> eth ... / end
> actions ... / end
>
> Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> ---
> v3: rebased, neat updates
> v2:
> https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fpatches.dp
> dk.org%2Fpatch%2F60909%2F&data=02%7C01%7Corika%40mellanox.com
> %7Cd91f4ba88d40409aac5a08d75883d0f2%7Ca652971c7d2e4d9ba6a4d14925
> 6f461b%7C0%7C0%7C637075195487679773&sdata=XrzhgAa2H%2BuWV%
> 2FxZu3XBnYkFv%2FVauLkjN7fAA0ROSss%3D&reserved=0
> v1:
> https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fpatches.dp
> dk.org%2Fpatch%2F56104%2F&data=02%7C01%7Corika%40mellanox.com
> %7Cd91f4ba88d40409aac5a08d75883d0f2%7Ca652971c7d2e4d9ba6a4d14925
> 6f461b%7C0%7C0%7C637075195487689768&sdata=e9C9LHb3b%2Fnif%2F
> 8S5ypeGDoEeVH%2FBayN3mX1q4p0arA%3D&reserved=0
> rfc:
> https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fpatches.dp
> dk.org%2Fpatch%2F54271%2F&data=02%7C01%7Corika%40mellanox.com
> %7Cd91f4ba88d40409aac5a08d75883d0f2%7Ca652971c7d2e4d9ba6a4d14925
> 6f461b%7C0%7C0%7C637075195487689768&sdata=3uP4UubC%2BpoDdtk
> iwSMwu2AwHm7yyBAJhItA%2Be9Q5co%3D&reserved=0
>
> app/test-pmd/cmdline_flow.c | 75
> ++++++++++++++++++++++++++++++++++
> doc/guides/prog_guide/rte_flow.rst | 50 +++++++++++++++++++++++
> doc/guides/rel_notes/release_19_11.rst | 5 +++
> lib/librte_ethdev/rte_flow.c | 2 +
> lib/librte_ethdev/rte_flow.h | 61 +++++++++++++++++++++++++++
> 5 files changed, 193 insertions(+)
>
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index bc89bf9..35852bd 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -206,6 +206,9 @@ enum index {
> ITEM_HIGIG2,
> ITEM_HIGIG2_CLASSIFICATION,
> ITEM_HIGIG2_VID,
> + ITEM_TAG,
> + ITEM_TAG_DATA,
> + ITEM_TAG_INDEX,
>
> /* Validate/create actions. */
> ACTIONS,
> @@ -311,6 +314,10 @@ enum index {
> ACTION_SET_META,
> ACTION_SET_META_DATA,
> ACTION_SET_META_MASK,
> + ACTION_SET_TAG,
> + ACTION_SET_TAG_INDEX,
> + ACTION_SET_TAG_DATA,
> + ACTION_SET_TAG_MASK,
> };
>
Can you please add them alphabetic , (data,index,mask) what do you think?
> /** Maximum size for pattern in struct rte_flow_item_raw. */
> @@ -682,6 +689,7 @@ struct parse_action_priv {
> ITEM_PPPOED,
> ITEM_PPPOE_PROTO_ID,
> ITEM_HIGIG2,
> + ITEM_TAG,
> END_SET,
> ZERO,
> };
> @@ -953,6 +961,13 @@ struct parse_action_priv {
> ZERO,
> };
>
> +static const enum index item_tag[] = {
> + ITEM_TAG_DATA,
> + ITEM_TAG_INDEX,
> + ITEM_NEXT,
> + ZERO,
> +};
> +
> static const enum index next_action[] = {
> ACTION_END,
> ACTION_VOID,
> @@ -1009,6 +1024,7 @@ struct parse_action_priv {
> ACTION_RAW_ENCAP,
> ACTION_RAW_DECAP,
> ACTION_SET_META,
> + ACTION_SET_TAG,
> ZERO,
> };
>
> @@ -1202,6 +1218,14 @@ struct parse_action_priv {
> ZERO,
> };
>
> +static const enum index action_set_tag[] = {
> + ACTION_SET_TAG_INDEX,
> + ACTION_SET_TAG_DATA,
> + ACTION_SET_TAG_MASK,
> + ACTION_NEXT,
> + ZERO,
> +};
> +
Again maybe order of the defines according.
> static int parse_set_raw_encap_decap(struct context *, const struct token *,
> const char *, unsigned int,
> void *, unsigned int);
> @@ -2467,6 +2491,26 @@ static int comp_vc_action_rss_queue(struct context
> *, const struct token *,
> .args = ARGS(ARGS_ENTRY_HTON(struct
> rte_flow_item_higig2_hdr,
> hdr.ppt1.vid)),
> },
> + [ITEM_TAG] = {
> + .name = "tag",
> + .help = "match tag value",
> + .priv = PRIV_ITEM(TAG, sizeof(struct rte_flow_item_tag)),
> + .next = NEXT(item_tag),
> + .call = parse_vc,
> + },
> + [ITEM_TAG_DATA] = {
> + .name = "data",
> + .help = "tag value to match",
> + .next = NEXT(item_tag, NEXT_ENTRY(UNSIGNED),
> item_param),
> + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_tag,
> data)),
> + },
> + [ITEM_TAG_INDEX] = {
> + .name = "index",
> + .help = "index of tag array to match",
> + .next = NEXT(item_tag, NEXT_ENTRY(UNSIGNED),
> + NEXT_ENTRY(ITEM_PARAM_IS)),
> + .args = ARGS(ARGS_ENTRY(struct rte_flow_item_tag, index)),
> + },
I think you are missing mask.
> /* Validate/create actions. */
> [ACTIONS] = {
> .name = "actions",
> @@ -3295,6 +3339,37 @@ static int comp_vc_action_rss_queue(struct context
> *, const struct token *,
> (struct rte_flow_action_set_meta, mask)),
> .call = parse_vc_conf,
> },
> + [ACTION_SET_TAG] = {
> + .name = "set_tag",
> + .help = "set tag",
> + .priv = PRIV_ACTION(SET_TAG,
> + sizeof(struct rte_flow_action_set_tag)),
> + .next = NEXT(action_set_tag),
> + .call = parse_vc,
> + },
> + [ACTION_SET_TAG_INDEX] = {
> + .name = "index",
> + .help = "index of tag array",
> + .next = NEXT(action_set_tag, NEXT_ENTRY(UNSIGNED)),
> + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_set_tag,
> index)),
> + .call = parse_vc_conf,
> + },
> + [ACTION_SET_TAG_DATA] = {
> + .name = "data",
> + .help = "tag value",
> + .next = NEXT(action_set_tag, NEXT_ENTRY(UNSIGNED)),
> + .args = ARGS(ARGS_ENTRY_HTON
> + (struct rte_flow_action_set_tag, data)),
> + .call = parse_vc_conf,
> + },
> + [ACTION_SET_TAG_MASK] = {
> + .name = "mask",
> + .help = "mask for tag value",
> + .next = NEXT(action_set_tag, NEXT_ENTRY(UNSIGNED)),
> + .args = ARGS(ARGS_ENTRY_HTON
> + (struct rte_flow_action_set_tag, mask)),
> + .call = parse_vc_conf,
> + },
> };
>
> /** Remove and return last entry from argument stack. */
> diff --git a/doc/guides/prog_guide/rte_flow.rst
> b/doc/guides/prog_guide/rte_flow.rst
> index 2b49baa..89a29b9 100644
> --- a/doc/guides/prog_guide/rte_flow.rst
> +++ b/doc/guides/prog_guide/rte_flow.rst
> @@ -684,6 +684,34 @@ action sets metadata for a packet and the metadata
> will be reported via
> | ``mask`` | ``data`` | bit-mask applies to "spec" and "last" |
> +----------+----------+---------------------------------------+
>
> +Item: ``TAG``
> +^^^^^^^^^^^^^
> +
> +Matches tag item set by other flows. Multiple tags are supported by specifying
> +``index``.
> +
> +- Default ``mask`` matches the specified tag value and index.
> +
> +.. _table_rte_flow_item_tag:
> +
> +.. table:: TAG
> +
> + +----------+----------+----------------------------------------+
> + | Field | Subfield | Value |
> +
> +==========+===========+=======================================+
> + | ``spec`` | ``data`` | 32 bit flow tag value |
> + | +-----------+---------------------------------------+
> + | | ``index`` | index of flow tag |
> + +----------+-----------+---------------------------------------+
> + | ``last`` | ``data`` | upper range value |
> + | +-----------+ |
> + | | ``index`` | |
> + +----------+-----------+---------------------------------------+
I don't think last is relevant for this. Maybe is should be documented as ignored.
> + | ``mask`` | ``data`` | bit-mask applies to "spec" and "last" |
> + | +-----------+ |
> + | | ``index`` | |
Should set index as ignored.
> + +----------+-----------+---------------------------------------+
> +
> Data matching item types
> ~~~~~~~~~~~~~~~~~~~~~~~~
>
> @@ -2508,6 +2536,28 @@ the other path depending on HW capability.
> | ``mask`` | bit-mask applies to "data" |
> +----------+----------------------------+
>
> +Action: ``SET_TAG``
> +^^^^^^^^^^^^^^^^^^^
> +
> +Set Tag.
> +
> +Tag is a transient data used during flow matching. This is not delivered to
> +application. Multiple tags are supported by specifying index.
> +
> +.. _table_rte_flow_action_set_tag:
> +
> +.. table:: SET_TAG
> +
> + +-----------+----------------------------+
> + | Field | Value |
> + +===========+============================+
> + | ``data`` | 32 bit tag value |
> + +-----------+----------------------------+
> + | ``mask`` | bit-mask applies to "data" |
> + +-----------+----------------------------+
> + | ``index`` | index of tag to set |
> + +-----------+----------------------------+
> +
> Negative types
> ~~~~~~~~~~~~~~
>
> diff --git a/doc/guides/rel_notes/release_19_11.rst
> b/doc/guides/rel_notes/release_19_11.rst
> index 2c51426..610191b 100644
> --- a/doc/guides/rel_notes/release_19_11.rst
> +++ b/doc/guides/rel_notes/release_19_11.rst
> @@ -208,6 +208,11 @@ New Features
> * Rx metadata is delivered to host via a dynamic field of ``rte_mbuf`` with
> PKT_RX_DYNF_METADATA.
>
> +* **Added flow tag in rte_flow.**
> + SET_TAG action and TAG item have been added to support transient flow
> + tag.
> +
> +
> Removed Items
> -------------
>
> diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
> index 6090177..ec1d11d 100644
> --- a/lib/librte_ethdev/rte_flow.c
> +++ b/lib/librte_ethdev/rte_flow.c
> @@ -82,6 +82,7 @@ struct rte_flow_desc_data {
> sizeof(struct rte_flow_item_icmp6_nd_opt_tla_eth)),
> MK_FLOW_ITEM(MARK, sizeof(struct rte_flow_item_mark)),
> MK_FLOW_ITEM(META, sizeof(struct rte_flow_item_meta)),
> + MK_FLOW_ITEM(TAG, sizeof(struct rte_flow_item_tag)),
> MK_FLOW_ITEM(GRE_KEY, sizeof(rte_be32_t)),
> MK_FLOW_ITEM(GTP_PSC, sizeof(struct rte_flow_item_gtp_psc)),
> MK_FLOW_ITEM(PPPOES, sizeof(struct rte_flow_item_pppoe)),
> @@ -166,6 +167,7 @@ struct rte_flow_desc_data {
> MK_FLOW_ACTION(INC_TCP_ACK, sizeof(rte_be32_t)),
> MK_FLOW_ACTION(DEC_TCP_ACK, sizeof(rte_be32_t)),
> MK_FLOW_ACTION(SET_META, sizeof(struct
> rte_flow_action_set_meta)),
> + MK_FLOW_ACTION(SET_TAG, sizeof(struct rte_flow_action_set_tag)),
> };
>
> int
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> index b821557..4d56954 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -501,6 +501,15 @@ enum rte_flow_item_type {
> * see struct rte_flow_item_higig2_hdr.
> */
> RTE_FLOW_ITEM_TYPE_HIGIG2,
> +
> + /*
> + * [META]
> + *
Please remove the [META]
> + * Matches a tag value.
> + *
> + * See struct rte_flow_item_tag.
> + */
> + RTE_FLOW_ITEM_TYPE_TAG,
> };
>
> /**
> @@ -1350,6 +1359,27 @@ struct rte_flow_item_pppoe_proto_id {
> * @warning
> * @b EXPERIMENTAL: this structure may change without prior notice
> *
> + * RTE_FLOW_ITEM_TYPE_TAG
> + *
> + * Matches a specified tag value at the specified index.
> + */
> +struct rte_flow_item_tag {
> + uint32_t data;
> + uint8_t index;
> +};
> +
> +/** Default mask for RTE_FLOW_ITEM_TYPE_TAG. */
> +#ifndef __cplusplus
> +static const struct rte_flow_item_tag rte_flow_item_tag_mask = {
> + .data = 0xffffffff,
> + .index = 0xff,
> +};
> +#endif
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this structure may change without prior notice
> + *
> * RTE_FLOW_ITEM_TYPE_MARK
> *
> * Matches an arbitrary integer value which was set using the ``MARK`` action
> @@ -1368,6 +1398,13 @@ struct rte_flow_item_mark {
> uint32_t id; /**< Integer value to match against. */
> };
>
> +/** Default mask for RTE_FLOW_ITEM_TYPE_MARK. */
> +#ifndef __cplusplus
> +static const struct rte_flow_item_mark rte_flow_item_mark_mask = {
> + .id = 0xffffffff,
> +};
> +#endif
> +
> /**
> * @warning
> * @b EXPERIMENTAL: this structure may change without prior notice
> @@ -1960,6 +1997,15 @@ enum rte_flow_action_type {
> * See struct rte_flow_action_set_meta.
> */
> RTE_FLOW_ACTION_TYPE_SET_META,
> +
> + /**
> + * Set Tag.
> + *
> + * Tag is not delivered to application.
> + *
I think we should think positive. Something like tag is for internal flow only and is not delivered to the application.
What do you think?
> + * See struct rte_flow_action_set_tag.
> + */
> + RTE_FLOW_ACTION_TYPE_SET_TAG,
> };
>
> /**
> @@ -2496,6 +2542,21 @@ struct rte_flow_action_set_meta {
> *RTE_FLOW_DYNF_METADATA(m) = v;
> }
>
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this structure may change without prior notice
> + *
> + * RTE_FLOW_ACTION_TYPE_SET_TAG
> + *
> + * Set a tag which is a transient data used during flow matching. This is not
> + * delivered to application. Multiple tags are supported by specifying index.
> + */
> +struct rte_flow_action_set_tag {
> + uint32_t data;
> + uint32_t mask;
> + uint8_t index;
> +};
> +
> /*
> * Definition of a single action.
> *
> --
> 1.8.3.1
next prev parent reply other threads:[~2019-10-27 16:38 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-03 21:32 [dpdk-dev] [RFC 1/3] ethdev: extend flow metadata Yongseok Koh
2019-06-03 21:32 ` [dpdk-dev] [RFC 2/3] ethdev: add flow modify mark action Yongseok Koh
2019-06-06 10:35 ` Jerin Jacob Kollanukkaran
2019-06-06 18:33 ` Yongseok Koh
2019-06-03 21:32 ` [dpdk-dev] [RFC 3/3] ethdev: add flow tag Yongseok Koh
2019-07-04 23:23 ` [dpdk-dev] [PATCH] " Yongseok Koh
2019-07-05 13:54 ` Adrien Mazarguil
2019-07-05 18:05 ` Yongseok Koh
2019-07-08 23:32 ` Yongseok Koh
2019-07-09 8:38 ` Adrien Mazarguil
2019-07-11 1:59 ` Yongseok Koh
2019-10-08 12:57 ` Yigit, Ferruh
2019-10-08 13:18 ` Slava Ovsiienko
2019-10-10 16:09 ` [dpdk-dev] [PATCH v2] " Viacheslav Ovsiienko
2019-10-24 13:12 ` [dpdk-dev] [PATCH v3] " Viacheslav Ovsiienko
2019-10-27 16:38 ` Ori Kam [this message]
2019-10-27 18:42 ` [dpdk-dev] [PATCH v4] " Viacheslav Ovsiienko
2019-10-27 19:11 ` Ori Kam
2019-10-31 18:57 ` Ferruh Yigit
2019-06-09 14:23 ` [dpdk-dev] [RFC 1/3] ethdev: extend flow metadata Andrew Rybchenko
2019-06-10 3:19 ` Wang, Haiyue
2019-06-10 7:20 ` Andrew Rybchenko
2019-06-11 0:06 ` Yongseok Koh
2019-06-19 9:05 ` Andrew Rybchenko
2019-07-04 23:21 ` [dpdk-dev] [PATCH] " Yongseok Koh
2019-07-10 9:31 ` Olivier Matz
2019-07-10 9:55 ` Bruce Richardson
2019-07-10 10:07 ` Olivier Matz
2019-07-10 12:01 ` Bruce Richardson
2019-07-10 12:26 ` Thomas Monjalon
2019-07-10 16:37 ` Yongseok Koh
2019-07-11 7:44 ` Adrien Mazarguil
2019-07-14 11:46 ` Andrew Rybchenko
2019-07-29 15:06 ` Adrien Mazarguil
2019-10-08 12:51 ` Yigit, Ferruh
2019-10-08 13:17 ` Slava Ovsiienko
2019-10-10 16:02 ` [dpdk-dev] [PATCH v2] " Viacheslav Ovsiienko
2019-10-18 9:22 ` Olivier Matz
2019-10-19 19:47 ` Slava Ovsiienko
2019-10-21 16:37 ` Olivier Matz
2019-10-24 6:49 ` Slava Ovsiienko
2019-10-24 9:22 ` Olivier Matz
2019-10-24 12:30 ` Slava Ovsiienko
2019-10-24 13:08 ` [dpdk-dev] [PATCH v3] " Viacheslav Ovsiienko
2019-10-27 16:56 ` Ori Kam
2019-10-27 18:40 ` [dpdk-dev] [PATCH v4] " Viacheslav Ovsiienko
2019-10-27 19:10 ` Ori Kam
2019-10-29 16:22 ` Andrew Rybchenko
2019-10-29 17:19 ` Slava Ovsiienko
2019-10-29 18:30 ` Thomas Monjalon
2019-10-29 18:35 ` Slava Ovsiienko
2019-10-30 6:28 ` Andrew Rybchenko
2019-10-30 7:35 ` Andrew Rybchenko
2019-10-30 8:59 ` Slava Ovsiienko
2019-10-30 9:20 ` Andrew Rybchenko
2019-10-30 10:05 ` Slava Ovsiienko
2019-10-30 10:03 ` Slava Ovsiienko
2019-10-30 15:49 ` Olivier Matz
2019-10-31 9:25 ` Andrew Rybchenko
2019-10-29 16:25 ` Olivier Matz
2019-10-29 16:33 ` Olivier Matz
2019-10-29 17:53 ` Slava Ovsiienko
2019-10-29 17:43 ` Slava Ovsiienko
2019-10-29 19:31 ` [dpdk-dev] [PATCH v5] " Viacheslav Ovsiienko
2019-10-30 8:02 ` Andrew Rybchenko
2019-10-30 14:40 ` Slava Ovsiienko
2019-10-30 14:46 ` Slava Ovsiienko
2019-10-30 15:20 ` Olivier Matz
2019-10-30 15:57 ` Thomas Monjalon
2019-10-30 15:58 ` Slava Ovsiienko
2019-10-30 16:13 ` Olivier Matz
2019-10-30 8:35 ` Ori Kam
2019-10-30 17:12 ` [dpdk-dev] [PATCH v6 0/2] extend flow metadata feature Viacheslav Ovsiienko
2019-10-30 17:12 ` [dpdk-dev] [PATCH v6 1/2] ethdev: extend flow metadata Viacheslav Ovsiienko
2019-10-31 9:19 ` Andrew Rybchenko
2019-10-31 13:05 ` [dpdk-dev] [PATCH v7 0/2] extend flow metadata feature Viacheslav Ovsiienko
2019-10-31 13:05 ` [dpdk-dev] [PATCH v7 1/2] ethdev: extend flow metadata Viacheslav Ovsiienko
2019-10-31 15:47 ` Olivier Matz
2019-10-31 16:13 ` Slava Ovsiienko
2019-10-31 16:48 ` [dpdk-dev] [PATCH v8 0/2] extend flow metadata feature Viacheslav Ovsiienko
2019-10-31 16:48 ` [dpdk-dev] [PATCH v8 1/2] ethdev: extend flow metadata Viacheslav Ovsiienko
2019-11-04 6:13 ` [dpdk-dev] [PATCH v9 0/2] extend flow metadata feature Viacheslav Ovsiienko
2019-11-04 6:13 ` [dpdk-dev] [PATCH v9 1/2] ethdev: extend flow metadata Viacheslav Ovsiienko
2019-11-05 14:19 ` [dpdk-dev] [PATCH v10 0/2] extend flow metadata feature Viacheslav Ovsiienko
2019-11-05 14:19 ` [dpdk-dev] [PATCH v10 1/2] ethdev: extend flow metadata Viacheslav Ovsiienko
2019-11-05 14:19 ` [dpdk-dev] [PATCH v10 2/2] ethdev: move egress metadata to dynamic field Viacheslav Ovsiienko
2019-11-06 15:49 ` [dpdk-dev] [PATCH v10 0/2] extend flow metadata feature Ferruh Yigit
2019-11-04 6:13 ` [dpdk-dev] [PATCH v9 2/2] ethdev: move egress metadata to dynamic field Viacheslav Ovsiienko
2019-10-31 16:48 ` [dpdk-dev] [PATCH v8 " Viacheslav Ovsiienko
2019-10-31 17:21 ` Olivier Matz
2019-11-01 12:34 ` Andrew Rybchenko
2019-10-31 13:05 ` [dpdk-dev] [PATCH v7 " Viacheslav Ovsiienko
2019-10-31 13:33 ` Ori Kam
2019-10-31 15:51 ` Olivier Matz
2019-10-31 16:07 ` Slava Ovsiienko
2019-10-30 17:12 ` [dpdk-dev] [PATCH v6 " Viacheslav Ovsiienko
2019-10-31 9:01 ` Andrew Rybchenko
2019-10-31 10:54 ` Slava Ovsiienko
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=AM4PR05MB34259A3E48FCBBB4C2EBB213DB670@AM4PR05MB3425.eurprd05.prod.outlook.com \
--to=orika@mellanox.com \
--cc=arybchenko@solarflare.com \
--cc=dev@dpdk.org \
--cc=matan@mellanox.com \
--cc=rasland@mellanox.com \
--cc=thomas@monjalon.net \
--cc=viacheslavo@mellanox.com \
--cc=yskoh@mellanox.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).