From: Jerin Jacob <jerinjacobk@gmail.com>
To: Jerin Jacob <jerinj@marvell.com>
Cc: Cristian Dumitrescu <cristian.dumitrescu@intel.com>,
Thomas Monjalon <thomas@monjalon.net>,
Ferruh Yigit <ferruh.yigit@intel.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
dpdk-dev <dev@dpdk.org>,
Andrew Rybchenko <arybchenko@solarflare.com>,
Li Zhang <lizh@nvidia.com>,
Ajit Khaparde <ajit.khaparde@broadcom.com>,
Jasvinder Singh <jasvinder.singh@intel.com>,
Matan Azrad <matan@nvidia.com>,
Nithin Dabilpuram <ndabilpuram@marvell.com>,
Sunil Kumar Kori <skori@marvell.com>,
rkudurumalla@marvell.com
Subject: Re: [dpdk-dev] [RFC PATCH] ethdev: mtr: enhance input color table features
Date: Mon, 30 Aug 2021 14:53:43 +0530 [thread overview]
Message-ID: <CALBAE1P+aybT3mp3PDF+LDNR5rVFG1Y0Vx_aVwR5_gUAjZnwXw@mail.gmail.com> (raw)
In-Reply-To: <20210820082401.3778736-1-jerinj@marvell.com>
Ping
On Fri, Aug 20, 2021 at 1:56 PM <jerinj@marvell.com> wrote:
>
> From: Jerin Jacob <jerinj@marvell.com>
>
> Currently, meter object supports only DSCP based on input color table,
> The patch enhance that to support VLAN based input color table,
> color table based on inner field for the tunnel use case, and support
> for fallback color per meter if packet based on a different field.
>
> All of the above features are exposed through capability and added
> additional capability to specify the implementation supports
> more than one input color table per ethdev port.
>
> Signed-off-by: Jerin Jacob <jerinj@marvell.com>
> ---
> lib/ethdev/rte_mtr.h | 130 ++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 116 insertions(+), 14 deletions(-)
>
> diff --git a/lib/ethdev/rte_mtr.h b/lib/ethdev/rte_mtr.h
> index dc246dd7af..311e8754de 100644
> --- a/lib/ethdev/rte_mtr.h
> +++ b/lib/ethdev/rte_mtr.h
> @@ -213,6 +213,16 @@ struct rte_mtr_meter_policy_params {
> const struct rte_flow_action *actions[RTE_COLORS];
> };
>
> +/**
> + * Input color table
> + */
> +enum rte_mtr_input_color_tbl {
> + /** DSCP based input color table */
> + RTE_MTR_INPUT_COLOR_TBL_DSCP,
> + /** VLAN based input color table */
> + RTE_MTR_INPUT_COLOR_TBL_VLAN,
> +};
> +
> /**
> * Parameters for each traffic metering & policing object
> *
> @@ -233,20 +243,44 @@ struct rte_mtr_params {
> */
> int use_prev_mtr_color;
>
> - /** Meter input color. When non-NULL: it points to a pre-allocated and
> - * pre-populated table with exactly 64 elements providing the input
> - * color for each value of the IPv4/IPv6 Differentiated Services Code
> - * Point (DSCP) input packet field. When NULL: it is equivalent to
> - * setting this parameter to an all-green populated table (i.e. table
> - * with all the 64 elements set to green color). The color blind mode
> - * is configured by setting *use_prev_mtr_color* to 0 and *dscp_table*
> - * to either NULL or to an all-green populated table. When
> - * *use_prev_mtr_color* is non-zero value or when *dscp_table* contains
> - * at least one yellow or red color element, then the color aware mode
> - * is configured.
> - */
> - enum rte_color *dscp_table;
> -
> + RTE_STD_C11
> + union {
> + /** Meter input color based on DSCP.
> + * Valid when rte_mtr_input_color_tbl::tbl_selector is
> + * set to RTE_MTR_INPUT_COLOR_TBL_DSCP.
> + * When non-NULL: it points to a pre-allocated and pre-populated
> + * table with exactly 64 elements providing the input color for
> + * each value of the IPv4/IPv6 Differentiated Services Code
> + * Point (DSCP) input packet field. When NULL:
> + * it is equivalent to setting this parameter to an all-green
> + * populated table (i.e. table with
> + * all the 64 elements set to green color). The color blind mode
> + * is configured by setting *use_prev_mtr_color* to 0 and
> + * *dscp_table* to either NULL or to an all-green
> + * populated table. When *use_prev_mtr_color* is non-zero value
> + * or when *dscp_table* contains at least one yellow or
> + * red color element, then the color aware mode is configured.
> + * @see struct rte_mtr_capabilities::input_color_dscp_supported
> + */
> + enum rte_color *dscp_table;
> + /** Meter input color based on VLAN.
> + * Valid when rte_mtr_input_color_tbl::tbl_selector is
> + * set to RTE_MTR_INPUT_COLOR_TBL_VLAN.
> + * When non-NULL: it points to a pre-allocated and pre-populated
> + * table with exactly 16 elements providing the input color for
> + * each value of the DEI(1bit), PCP(3 bits) input packet field.
> + * When NULL: it is equivalent to setting this parameter to an
> + * all-green populated table (i.e. table with
> + * all the 16 elements set to green color). The color blind mode
> + * is configured by setting *use_prev_mtr_color* to 0 and
> + * *vlan_table* to either NULL or to an all-green
> + * populated table. When *use_prev_mtr_color* is non-zero value
> + * or when *vlan_table* contains at least one yellow or
> + * red color element, then the color aware mode is configured.
> + * @see struct rte_mtr_capabilities::input_color_vlan_supported
> + */
> + enum rte_color *vlan_table;
> + };
> /** Non-zero to enable the meter, zero to disable the meter at the time
> * of MTR object creation. Ignored when the meter profile indicated by
> * *meter_profile_id* is set to NONE.
> @@ -261,6 +295,25 @@ struct rte_mtr_params {
>
> /** Meter policy ID. */
> uint32_t meter_policy_id;
> +
> + /** Select the input color table
> + * @see struct rte_mtr_params::dscp_table
> + * @see struct rte_mtr_capabilities::input_color_dscp_supported
> + * @see struct rte_mtr_params::vlan_table
> + * @see struct rte_mtr_capabilities::input_color_vlan_supported
> + */
> + enum rte_mtr_input_color_tbl tbl_selector;
> + /** Fallback input color for the meter,
> + * when *use_prev_mtr_color* set to zero value and
> + * when packet is not based on selected *tbl_selector*.
> + * @see struct rte_mtr_capabilities::input_color_fallback_supported
> + */
> + enum rte_color fallback_input_color;
> + /** Input color table based on inner field of selected
> + * of *tbl_selector*.
> + * @see struct rte_mtr_capabilities::input_color_inner_supported
> + */
> + int input_color_inner_enable;
> };
>
> /**
> @@ -417,6 +470,31 @@ struct rte_mtr_capabilities {
> * @see enum rte_mtr_stats_type
> */
> uint64_t stats_mask;
> +
> + /** Input color based on DSCP.
> + * When non-zero, it indicates that driver supports input color table
> + * based on DSCP.
> + */
> + int input_color_dscp_supported;
> + /** Input color based on VLAN.
> + * When non-zero, it indicates that driver supports input color table
> + * based on VLAN.
> + */
> + int input_color_vlan_supported;
> + /** Input color fallback support.
> + * When non-zero, it indicates that driver supports input color
> + * fallback.
> + */
> + int input_color_fallback_supported;
> + /** Input color based on inner packet field.
> + * When non-zero, it indicates that driver supports input color
> + * based on inner field.
> + */
> + int input_color_inner_supported;
> + /** When non-zero, it indicates that driver supports separate
> + * input color table for given ethdev port.
> + */
> + int seperate_input_color_table_per_port;
> };
>
> /**
> @@ -832,6 +910,30 @@ rte_mtr_meter_dscp_table_update(uint16_t port_id,
> enum rte_color *dscp_table,
> struct rte_mtr_error *error);
>
> +/**
> + * MTR object VLAN table update
> + *
> + * @param[in] port_id
> + * The port identifier of the Ethernet device.
> + * @param[in] mtr_id
> + * MTR object ID. Needs to be valid.
> + * @param[in] vlan_table
> + * When non-NULL: it points to a pre-allocated and pre-populated table with
> + * exactly 16 elements providing the input color for each value of the
> + * each value of the DEI(1bit), PCP(3 bits) input packet field.
> + * When NULL: it is equivalent to setting this parameter to an "all-green"
> + * populated table (i.e. table with all the 16 elements set to green color).
> + * @param[out] error
> + * Error details. Filled in only on error, when not NULL.
> + * @return
> + * 0 on success, non-zero error code otherwise.
> + */
> +__rte_experimental
> +int
> +rte_mtr_meter_vlan_table_update(uint16_t port_id,
> + uint32_t mtr_id,
> + enum rte_color *vlan_table,
> + struct rte_mtr_error *error);
> /**
> * MTR object enabled statistics counters update
> *
> --
> 2.33.0
>
next prev parent reply other threads:[~2021-08-30 9:24 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-20 8:24 jerinj
2021-08-30 9:23 ` Jerin Jacob [this message]
2021-09-27 16:20 ` Ferruh Yigit
2021-10-11 15:14 ` Dumitrescu, Cristian
2021-11-17 12:00 ` Jerin Jacob
2021-12-07 9:55 ` Jerin Jacob
2021-12-07 18:00 ` Dumitrescu, Cristian
2022-01-10 9:35 ` Jerin Jacob
2022-02-14 11:56 ` [dpdk-dev] [v22.07] [PATCH] ethdev: mtr: support input color selection jerinj
2022-02-14 12:02 ` [dpdk-dev] [v22.07] [PATCH v2] " jerinj
2022-03-01 8:58 ` [PATCH v3 1/1] " skori
2022-03-01 10:49 ` [EXT] " Sunil Kumar Kori
2022-03-01 17:48 ` Dumitrescu, Cristian
2022-04-05 21:14 ` Dumitrescu, Cristian
2022-04-07 10:51 ` Jerin Jacob
2022-04-07 13:25 ` Dumitrescu, Cristian
2022-04-07 14:39 ` Jerin Jacob
2022-04-11 14:45 ` Dumitrescu, Cristian
2022-04-12 6:48 ` Ori Kam
2022-04-21 18:02 ` [dpdk-dev] [PATCH v4] ethdev: mtr: support protocol based " jerinj
2022-04-26 10:19 ` Ray Kinsella
2022-05-01 12:52 ` Jerin Jacob
2022-04-26 12:08 ` Dumitrescu, Cristian
2022-05-01 12:56 ` Jerin Jacob
2022-05-01 14:46 ` [dpdk-dev] [PATCH v5] " jerinj
2022-05-04 8:52 ` Ray Kinsella
2022-05-05 10:56 ` Dumitrescu, Cristian
2022-05-12 7:36 ` Andrew Rybchenko
2022-05-12 11:03 ` Jerin Jacob
2022-05-19 7:05 ` Andrew Rybchenko
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=CALBAE1P+aybT3mp3PDF+LDNR5rVFG1Y0Vx_aVwR5_gUAjZnwXw@mail.gmail.com \
--to=jerinjacobk@gmail.com \
--cc=ajit.khaparde@broadcom.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=arybchenko@solarflare.com \
--cc=cristian.dumitrescu@intel.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=jasvinder.singh@intel.com \
--cc=jerinj@marvell.com \
--cc=lizh@nvidia.com \
--cc=matan@nvidia.com \
--cc=ndabilpuram@marvell.com \
--cc=rkudurumalla@marvell.com \
--cc=skori@marvell.com \
--cc=thomas@monjalon.net \
/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).