From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: Qi Zhang <qi.z.zhang@intel.com>
Cc: dev@dpdk.org, declan.doherty@intel.com,
sugesh.chandran@intel.com, michael.j.glynn@intel.com,
yu.y.liu@intel.com, konstantin.ananyev@intel.com,
bruce.richardson@intel.com
Subject: Re: [PATCH v3 3/4] ethdev: add TTL change actions in flow API
Date: Thu, 19 Apr 2018 16:48:55 +0200 [thread overview]
Message-ID: <20180419144855.GG4957@6wind.com> (raw)
In-Reply-To: <20180416061042.785-4-qi.z.zhang@intel.com>
On Mon, Apr 16, 2018 at 02:10:41PM +0800, Qi Zhang wrote:
> Add couple OpenFlow frienldy TTL change actions.
frienldy => friendly
>
> RTE_FLOW_ACTION_MLPS_TTL_DEC - decrement MPLS TTL.
> RTE_FLOW_ACTION_IP_TTL_DEC - decrement IP TTL.
> RTE_FLOW_ACTION_TTL_COPY_OUT - copy TTL outwards.
> RTE_FLOW_ACTION_TTL_COPY_IN - copy TTL inwards.
>
> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
These are OpenFlow actions whose behavior is defined by the OpenFlow
specification. They must have "OF" part of their name to make this clear,
as in "RTE_FLOW_ACTION_OF_MPLS_TTL_DEC".
More below.
> ---
> app/test-pmd/cmdline_flow.c | 64 +++++++++++++++++++++++
> doc/guides/prog_guide/rte_flow.rst | 80 +++++++++++++++++++++++++++++
> doc/guides/testpmd_app_ug/testpmd_funcs.rst | 12 +++++
> lib/librte_ether/rte_flow.h | 77 +++++++++++++++++++++++++++
> 4 files changed, 233 insertions(+)
>
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 7950b1b8d..417cbecc9 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -195,6 +195,12 @@ enum index {
> ACTION_VF_ID,
> ACTION_METER,
> ACTION_METER_ID,
> + ACTION_MPLS_TTL_DEC,
> + ACTION_MPLS_TTL_DEC_LVL,
> + ACTION_IP_TTL_DEC,
> + ACTION_IP_TTL_DEC_LVL,
> + ACTION_TTL_COPY_OUT,
> + ACTION_TTL_COPY_IN,
> };
>
> /** Size of pattern[] field in struct rte_flow_item_raw. */
> @@ -668,6 +674,10 @@ static const enum index next_action[] = {
> ACTION_PF,
> ACTION_VF,
> ACTION_METER,
> + ACTION_MPLS_TTL_DEC,
> + ACTION_IP_TTL_DEC,
> + ACTION_TTL_COPY_OUT,
> + ACTION_TTL_COPY_IN,
> ZERO,
> };
>
> @@ -708,6 +718,16 @@ static const enum index action_meter[] = {
> ZERO,
> };
>
> +static const enum index action_mpls_ttl_dec[] = {
> + ACTION_MPLS_TTL_DEC_LVL,
> + ZERO,
> +};
> +
> +static const enum index action_ip_ttl_dec[] = {
> + ACTION_IP_TTL_DEC_LVL,
> + ZERO,
> +};
> +
The OpenFlow specification doesn't mention any parameter for these
actions. Unless I'm mistaken, it doesn't have a concept of "level", please
remove them.
> static int parse_init(struct context *, const struct token *,
> const char *, unsigned int,
> void *, unsigned int);
> @@ -1857,6 +1877,50 @@ static const struct token token_list[] = {
> .args = ARGS(ARGS_ENTRY(struct rte_flow_action_meter, mtr_id)),
> .call = parse_vc_conf,
> },
> + [ACTION_MPLS_TTL_DEC] = {
> + .name = "mpls_ttl_dec",
mpls_ttl_dec => of_mpls_ttl_dec
> + .help = "decrement MPLS TTL",
> + .priv = PRIV_ACTION(MPLS_TTL_DEC,
> + sizeof(struct rte_flow_action_mpls_ttl_dec)),
> + .next = NEXT(action_mpls_ttl_dec),
> + .call = parse_vc,
> + },
> + [ACTION_MPLS_TTL_DEC_LVL] = {
> + .name = "level",
> + .help = "level of MPLS header",
> + .next = NEXT(action_mpls_ttl_dec, NEXT_ENTRY(UNSIGNED)),
> + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_queue, index)),
> + .call = parse_vc,
> + },
> + [ACTION_IP_TTL_DEC] = {
> + .name = "ip_ttl_dec",
ip_ttl_dec => of_ip_ttl_dec
> + .help = "decrement IPv4 TTL or IPv6 Hop Limit",
> + .priv = PRIV_ACTION(MPLS_TTL_DEC,
> + sizeof(struct rte_flow_action_ip_ttl_dec)),
> + .next = NEXT(action_ip_ttl_dec),
> + .call = parse_vc,
> + },
> + [ACTION_IP_TTL_DEC_LVL] = {
> + .name = "level",
> + .help = "level of IPv4 or IPv6 header",
> + .next = NEXT(action_ip_ttl_dec, NEXT_ENTRY(UNSIGNED)),
> + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_queue, index)),
> + .call = parse_vc,
> + },
> + [ACTION_TTL_COPY_OUT] = {
> + .name = "ttl_copy_out",
ttl_copy_out => of_ttl_copy_out
> + .help = "copy TTL outwards",
> + .priv = PRIV_ACTION(DROP, 0),
Should be "PRIV_ACTION(ACTION_TTL_COPY_OUT, 0)".
> + .next = NEXT(NEXT_ENTRY(ACTION_NEXT)),
> + .call = parse_vc,
> + },
> + [ACTION_TTL_COPY_IN] = {
> + .name = "ttl_copy_in",
ttl_copy_in => of_ttl_copy_in
> + .help = "copy TTL inwards",
> + .priv = PRIV_ACTION(DROP, 0),
Should be "PRIV_ACTION(ACTION_TTL_COPY_IN, 0)".
> + .next = NEXT(NEXT_ENTRY(ACTION_NEXT)),
> + .call = parse_vc,
> + },
> };
>
> /** 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 68deb9812..65f2d4a16 100644
> --- a/doc/guides/prog_guide/rte_flow.rst
> +++ b/doc/guides/prog_guide/rte_flow.rst
> @@ -1604,6 +1604,86 @@ contain respective protocol layer.
> | ``mask`` | Bit-mask applied to new_val |
> +---------------+-------------------------------------------------------------------+
>
> +Action: ``MPLS_TTL_DEC``
> +^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Decrement MPLS TTL, only applies to packets that contain specific MPLS
> +headers.
> +
> +.. _table_rte_flow_action_mpls_ttl_dec:
> +
> +.. table:: MPLS_TTL_DEC
> +
> + +---------------+---------------------------------------------+
> + | Field | Value |
> + +===============+=============================================+
> + | ``dir_level`` | Specify the level of MPLS header. |
> + | | direction (1b) |
> + | | 0: match start from outermost. |
> + | | 1: match start from innermost. |
> + | | level: (31b) |
> + | | 0: outermost or innermost MPLS header |
> + | | 1: next to outmost or innermost MPLS header |
> + | | 2: and so on ... |
> + +---------------+---------------------------------------------+
No need to document dir and level for the above reasons.
You must describe how it's an OpenFlow action and provide a link to the
relevant OF specification.
> +
> +Action: ``IP_TTL_DEC``
> +^^^^^^^^^^^^^^^^^^^^^^
> +
> +Decrement IPv4 TTL or IPv6 hop limit field and update the IP checksum,
> +only applies to packets that contain specific MPLS headers.
> +
> +.. _table_rte_flow_action_ip_ttl_dec:
> +
> +.. table:: IP_TTL_DEC
> +
> + +---------------+----------------------------------------------------------+
> + | Field | Value |
> + +===============+==========================================================+
> + | ``dir_level`` | Specify the level of IPv4 or IPv6 header. |
> + | | direction (1b) |
> + | | 0: match start from outermost. |
> + | | 1: match start from innermost. |
> + | | level: (31b) |
> + | | 0: outermost or innermost Ipv4 or IPv6 header |
> + | | 1: next to outmost or innermost MPLS IPv4 or IPv6 header |
> + | | 2: and so on ... |
> + +---------------+----------------------------------------------------------+
Ditto.
> +
> +Action: ``TTL_COPY_OUT``
> +^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Copy the TTL from next-to-outermost to outermost header with TTL, copy can
> +be IP to IP, MPLS to MPLS or IP to MPLS, only applies packets that contain
> +required MPLS or IP headers.
> +
> +.. _table_rte_flow_action_ttl_copy_out:
> +
> +.. table:: TTL_COPY_OUT
> +
> + +---------------+
> + | Field |
> + +===============+
> + | no properties |
> + +---------------+
Same comment as above re linking to OpenFlow.
> +
> +Action: ``TTL_COPY_IN``
> +^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Copy the TTL from outermost to next-to-outermost header with TTL, copy can
> +be IP to IP, MPLS to MPLS or MPLS to IP, only applies packets that contain
> +required MPLS or IP headers.
> +
> +.. _table_rte_flow_action_ttl_copy_in:
> +
> +.. table:: TTL_COPY_IN
> +
> + +---------------+
> + | Field |
> + +===============+
> + | no properties |
> + +---------------+
Ditto.
> +
> Negative types
> ~~~~~~~~~~~~~~
>
> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> index 12d78f10b..d2fe6637b 100644
> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> @@ -3449,6 +3449,18 @@ This section lists supported actions and their attributes, if any.
> - ``original {boolean}``: use original VF ID if possible.
> - ``id {unsigned}``: VF ID to redirect packets to.
>
> +- ``mpls_ttl_dec``: decrement MPLS TTL.
> +
> + - ``level``: level of MPLS header.
> +
> +- ``ip_ttl_dec``: decrement IPv4 TTL or IPv6 Hot Limit.
> +
> + - ``level``: level of IPv4 or IPv6 header.
> +
> +- ``ttl_copy_out``: copy TTL outwards.
> +
> +- ``ttl_copy_in``: copy TTL inwards.
"level" must be removed from here also.
> +
> Destroying flow rules
> ~~~~~~~~~~~~~~~~~~~~~
>
> diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h
> index 2dc95b6b8..ab181cd83 100644
> --- a/lib/librte_ether/rte_flow.h
> +++ b/lib/librte_ether/rte_flow.h
> @@ -1254,6 +1254,37 @@ enum rte_flow_action_type {
> * See struct rte_flow_action_field_set.
> */
> RTE_FLOW_ACTION_TYPE_FIELD_SET,
> +
> + /**
> + * Decrement MPLS TTL, only applies to packets that contain specific
> + * MPLS header.
> + *
> + * See struct rte_flow_action_mpls_ttl_dec.
> + */
> + RTE_FLOW_ACTION_TYPE_MPLS_TTL_DEC,
> +
> + /**
> + * Decrement IPv4 TTL or IPv6 Hop limit field and update the IP
> + * checksum, only applies to packets that contain specific IPv4
> + * or IPv6 header.
> + *
> + * See struct rte_flow_action_ip_ttl_dec.
> + */
> + RTE_FLOW_ACTION_TYPE_IP_TTL_DEC,
> +
> + /**
> + * Copy the TTL from next-to-outermost to outermost header with TTL,
> + * copy can be IP to IP, MPLS to MPLS or IP to MPLS, only applies
> + * packets that contain required protocol headers.
As for other actions, please add:
No associated configuration structure.
> + */
> + RTE_FLOW_ACTION_TYPE_TTL_COPY_OUT,
> +
> + /**
> + * Copy the TTL from outermost to next-to-outermost header with TTL,
> + * copy can be IP to IP, MPLS to MPLS or MPLS to IP, only applies
> + * packets that contain required protocol headers.
Ditto.
> + */
> + RTE_FLOW_ACTION_TYPE_TTL_COPY_IN,
> };
>
> /**
> @@ -1424,6 +1455,52 @@ struct rte_flow_action_field_set {
> };
>
> /**
> + * RTE_FLOW_ACTION_TYPE_MPLS_TTL_DEC
> + *
> + * Decrement MPLS TTL, only applies to packets that contain specific
> + * MPLS header.
> + */
> +struct rte_flow_action_mpls_ttl_dec {
> + /**
> + * Specify the level of MPLS header.
> + *
> + * direction (1b)
> + * 0: match start from outermost.
> + * 1: match start from innermost.
> + *
> + * level (31b)
> + * 0: outermost|innermost MPLS header.
> + * 1: next to outermost|innermost MPLS header.
> + * 2: and so on ...
> + */
> + uint32_t dir_level;
> +
> +};
As described above, this structure must be removed.
> +
> +/**
> + * RTE_FLOW_ACTION_TYPE_IP_TTL_DEC
> + *
> + * Decrement IPv4 TTL or IPv6 hop limit field and update the IP
> + * checksum, only applies to packets that contain specific IPv4
> + * or IPv6 header.
> + */
> +struct rte_flow_action_ip_ttl_dec {
> + /**
> + * Specify the level of IPv4 or IPv6 header.
> + *
> + * direction (1b)
> + * 0: match start from outermost.
> + * 1: match start from innermost.
> + *
> + * level (31b)
> + * 0: outermost|innermost IPv4 or IPv6 header.
> + * 1: next to outermost|innermost IPv4 or IPv6 header.
> + * 2: and so on ...
> + */
> + uint32_t dir_level;
> +};
Ditto.
> +
> +/**
> * Definition of a single action.
> *
> * A list of actions is terminated by a END action.
> --
> 2.13.6
>
--
Adrien Mazarguil
6WIND
next prev parent reply other threads:[~2018-04-19 14:49 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-28 23:29 [PATCH 0/4] rte_flow extension for vSwitch acceleration Qi Zhang
2018-03-28 23:29 ` [PATCH 1/4] ether: add flow action to redirect packet in a switch domain Qi Zhang
2018-03-29 10:48 ` Pattan, Reshma
2018-03-29 11:20 ` Pattan, Reshma
2018-03-28 23:29 ` [PATCH 2/4] ether: add flow last hit query support Qi Zhang
2018-03-28 23:29 ` [PATCH 3/4] ether: add more protocol support in flow API Qi Zhang
2018-03-29 14:32 ` Pattan, Reshma
2018-03-28 23:29 ` [PATCH 4/4] ether: add packet modification aciton " Qi Zhang
2018-03-29 15:23 ` Pattan, Reshma
2018-04-02 3:35 ` Zhang, Qi Z
2018-04-01 21:19 ` [PATCH v2 0/4] rte_flow extension for vSwitch acceleration Qi Zhang
2018-04-01 21:19 ` [PATCH v2 1/4] ether: add flow action to redirect packet to a port Qi Zhang
2018-04-11 16:30 ` Adrien Mazarguil
2018-04-01 21:19 ` [PATCH v2 2/4] ether: add flow last hit query support Qi Zhang
2018-04-11 16:31 ` Adrien Mazarguil
2018-04-01 21:19 ` [PATCH v2 3/4] ether: add more protocol support in flow API Qi Zhang
2018-04-11 16:32 ` Adrien Mazarguil
2018-04-12 5:12 ` Zhang, Qi Z
2018-04-12 9:19 ` Adrien Mazarguil
2018-04-12 10:00 ` Zhang, Qi Z
2018-04-01 21:19 ` [PATCH v2 4/4] ether: add packet modification aciton " Qi Zhang
2018-04-12 7:03 ` Adrien Mazarguil
2018-04-12 8:50 ` Zhang, Qi Z
2018-04-12 10:22 ` Adrien Mazarguil
2018-04-13 13:47 ` Zhang, Qi Z
2018-04-16 13:30 ` Adrien Mazarguil
2018-04-16 15:03 ` Zhang, Qi Z
2018-04-17 9:55 ` Adrien Mazarguil
2018-04-17 10:32 ` Zhang, Qi Z
2018-04-10 14:12 ` [PATCH v2 0/4] rte_flow extension for vSwitch acceleration Thomas Monjalon
2018-04-16 5:16 ` [PATCH v3 " Qi Zhang
2018-04-16 5:16 ` [PATCH v3 1/4] ethdev: add more protocol support in flow API Qi Zhang
2018-04-16 5:16 ` [PATCH v3 2/4] ethdev: add packet field set aciton " Qi Zhang
2018-04-16 5:16 ` [PATCH v3 3/4] ethdev: add TTL change actions " Qi Zhang
2018-04-16 5:48 ` Shahaf Shuler
2018-04-16 8:12 ` Adrien Mazarguil
2018-04-16 8:56 ` Shahaf Shuler
2018-04-16 9:59 ` Adrien Mazarguil
2018-04-16 5:16 ` [PATCH v3 4/4] ethdev: add VLAN and MPLS pop push action " Qi Zhang
2018-04-16 6:10 ` [PATCH v3 0/4] rte_flow extension for vSwitch acceleration Qi Zhang
2018-04-16 6:10 ` [PATCH v3 1/4] ethdev: add more protocol support in flow API Qi Zhang
2018-04-19 14:48 ` Adrien Mazarguil
2018-04-16 6:10 ` [PATCH v3 2/4] ethdev: add packet field set aciton " Qi Zhang
2018-04-19 14:48 ` Adrien Mazarguil
2018-04-20 2:24 ` Zhang, Qi Z
2018-04-20 8:54 ` Adrien Mazarguil
2018-04-16 6:10 ` [PATCH v3 3/4] ethdev: add TTL change actions " Qi Zhang
2018-04-19 14:48 ` Adrien Mazarguil [this message]
2018-04-16 6:10 ` [PATCH v3 4/4] ethdev: add VLAN and MPLS pop push action " Qi Zhang
2018-04-17 7:34 ` Shahaf Shuler
2018-04-19 14:49 ` Adrien Mazarguil
2018-04-23 6:36 ` [PATCH v4 0/3] rte_flow extension for vSwitch acceleration Qi Zhang
2018-04-23 6:36 ` [PATCH v4 1/3] ethdev: add more protocol support in flow API Qi Zhang
2018-04-23 6:36 ` [PATCH v4 2/3] ethdev: add TTL change actions " Qi Zhang
2018-04-23 6:36 ` [PATCH v4 3/3] ethdev: add VLAN and MPLS " Qi Zhang
2018-04-24 15:58 ` [PATCH v5 0/3] rte_flow extension for vSwitch acceleration Adrien Mazarguil
2018-04-24 15:58 ` [PATCH v5 1/3] ethdev: add neighbor discovery support to flow API Adrien Mazarguil
2018-04-24 15:59 ` [PATCH v5 2/3] ethdev: add TTL change actions " Adrien Mazarguil
2018-04-24 15:59 ` [PATCH v5 3/3] ethdev: add VLAN and MPLS " Adrien Mazarguil
2018-04-25 13:54 ` [PATCH v5 0/3] rte_flow extension for vSwitch acceleration Zhang, Qi Z
2018-04-25 22:44 ` 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=20180419144855.GG4957@6wind.com \
--to=adrien.mazarguil@6wind.com \
--cc=bruce.richardson@intel.com \
--cc=declan.doherty@intel.com \
--cc=dev@dpdk.org \
--cc=konstantin.ananyev@intel.com \
--cc=michael.j.glynn@intel.com \
--cc=qi.z.zhang@intel.com \
--cc=sugesh.chandran@intel.com \
--cc=yu.y.liu@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.