From: Matan Azrad <matan@nvidia.com>
To: "Dumitrescu, Cristian" <cristian.dumitrescu@intel.com>,
Li Zhang <lizh@nvidia.com>, Dekel Peled <dekelp@nvidia.com>,
Ori Kam <orika@nvidia.com>,
Slava Ovsiienko <viacheslavo@nvidia.com>,
Shahaf Shuler <shahafs@nvidia.com>,
"lironh@marvell.com" <lironh@marvell.com>,
"Singh, Jasvinder" <jasvinder.singh@intel.com>,
NBU-Contact-Thomas Monjalon <thomas@monjalon.net>,
"Yigit, Ferruh" <ferruh.yigit@intel.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
Jerin Jacob <jerinjacobk@gmail.com>,
Hemant Agrawal <hemant.agrawal@nxp.com>,
Ajit Khaparde <ajit.khaparde@broadcom.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
Raslan Darawsheh <rasland@nvidia.com>,
Roni Bar Yanai <roniba@nvidia.com>
Subject: Re: [dpdk-dev] [PATCH 1/2] [RFC]: ethdev: add pre-defined meter policy API
Date: Thu, 25 Mar 2021 06:56:39 +0000 [thread overview]
Message-ID: <MW2PR12MB24928BE9B1C6ACFC7FA3368EDF629@MW2PR12MB2492.namprd12.prod.outlook.com> (raw)
In-Reply-To: <DM6PR11MB27961CCB3E7256540BC97CFAEB649@DM6PR11MB2796.namprd11.prod.outlook.com>
Hi Cristian
Thank you for your important review!
I agree with all your comments except one, please see inline.
From: Dumitrescu, Cristian
> Hi Li and Matan,
>
> Thank you for your proposal, some comments below.
>
> I am also adding Jerin and Hemant to this thread, as they also participated in
> the definition of the rte_mtr API in 2017. Also Ajit expressed some interest in a
> previous email.
>
> > -----Original Message-----
> > From: Li Zhang <lizh@nvidia.com>
> > Sent: Thursday, March 18, 2021 8:58 AM
> > To: dekelp@nvidia.com; orika@nvidia.com; viacheslavo@nvidia.com;
> > matan@nvidia.com; shahafs@nvidia.com; lironh@marvell.com; Singh,
> > Jasvinder <jasvinder.singh@intel.com>; Thomas Monjalon
> > <thomas@monjalon.net>; Yigit, Ferruh <ferruh.yigit@intel.com>; Andrew
> > Rybchenko <andrew.rybchenko@oktetlabs.ru>; Dumitrescu, Cristian
> > <cristian.dumitrescu@intel.com>
> > Cc: dev@dpdk.org; rasland@nvidia.com; roniba@nvidia.com
> > Subject: [PATCH 1/2] [RFC]: ethdev: add pre-defined meter policy API
> >
> > Currently, the flow meter policy does not support multiple actions per
> > color; also the allowed action types per color are very limited.
> > In addition, the policy cannot be pre-defined.
> >
> > Due to the growing in flow actions offload abilities there is a
> > potential for the user to use variety of actions per color differently.
> > This new meter policy API comes to allow this potential in the most
> > ethdev common way using rte_flow action definition.
> > A list of rte_flow actions will be provided by the user per color in
> > order to create a meter policy.
> > In addition, the API forces to pre-define the policy before the meters
> > creation in order to allow sharing of single policy with multiple
> > meters efficiently.
> >
> > meter_policy_id is added into struct rte_mtr_params.
> > So that it can get the policy during the meters creation.
> >
> > Policy id 0 is default policy. Action per color as below:
> > green - no action, yellow - no action, red - drop
> >
> > Allow coloring the packet using a new rte_flow_action_color as could
> > be done by the old policy API,
> >
>
> The proposal essentially is to define the meter policy based on rte_flow actions
> rather than a reduced action set defined specifically just for meter object. This
> makes sense to me.
>
> > The next API function were added:
> > - rte_mtr_meter_policy_add
> > - rte_mtr_meter_policy_delete
> > - rte_mtr_meter_policy_update
> > - rte_mtr_meter_policy_validate
> > The next struct was changed:
> > - rte_mtr_params
> > - rte_mtr_capabilities
> > The next API was deleted:
> > - rte_mtr_policer_actions_update
> >
> > Signed-off-by: Li Zhang <lizh@nvidia.com>
> > ---
> > lib/librte_ethdev/rte_flow.h | 18 ++++
> > lib/librte_ethdev/rte_mtr.c | 55 ++++++++--
> > lib/librte_ethdev/rte_mtr.h | 166 ++++++++++++++++++++---------
> > lib/librte_ethdev/rte_mtr_driver.h | 45 ++++++--
> > 4 files changed, 210 insertions(+), 74 deletions(-)
> >
> > diff --git a/lib/librte_ethdev/rte_flow.h
> > b/lib/librte_ethdev/rte_flow.h index 669e677e91..5f38aa7fa4 100644
> > --- a/lib/librte_ethdev/rte_flow.h
> > +++ b/lib/librte_ethdev/rte_flow.h
> > @@ -31,6 +31,7 @@
> > #include <rte_ecpri.h>
> > #include <rte_mbuf.h>
> > #include <rte_mbuf_dyn.h>
> > +#include <rte_meter.h>
> >
> > #ifdef __cplusplus
> > extern "C" {
> > @@ -2236,6 +2237,13 @@ enum rte_flow_action_type {
> > * See struct rte_flow_action_modify_field.
> > */
> > RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
> > +
> > + /**
> > + * Color the packet to reflect the meter color result.
> > + *
> > + * See struct rte_flow_action_color.
> > + */
> > + RTE_FLOW_ACTION_TYPE_COlOR,
>
> Typo here, it should be RTE_FLOW_ACTION_TYPE_COLOR.
>
> > };
> >
> > /**
> > @@ -2828,6 +2836,16 @@ struct rte_flow_action_set_dscp {
> > */
> > struct rte_flow_shared_action;
> >
> > +/**
> > + * RTE_FLOW_ACTION_TYPE_COLOR
> > + *
> > + * The meter color should be set in the packet meta-data
> > + * (i.e. struct rte_mbuf::sched::color).
> > + */
> > +struct rte_flow_action_color {
> > + enum rte_color color; /**< Green/Yellow/Red. */
>
> I would avoid expanding the list of colors in the comment, as we might have to
> support more than 3 colors in the future. I would simply write: "Packet color."
>
> > +};
> > +
> > /**
> > * Field IDs for MODIFY_FIELD action.
> > */
> > diff --git a/lib/librte_ethdev/rte_mtr.c b/lib/librte_ethdev/rte_mtr.c
> > index 3073ac03f2..fccec3760b 100644
> > --- a/lib/librte_ethdev/rte_mtr.c
> > +++ b/lib/librte_ethdev/rte_mtr.c
> > @@ -91,6 +91,40 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
> > meter_profile_id, error); }
> >
> > +/* MTR meter policy validate */
> > +int
> > +rte_mtr_meter_policy_validate(uint16_t port_id,
> > + const struct rte_flow_action *actions[RTE_COLORS],
> > + struct rte_mtr_error *error)
> > +{
> > + struct rte_eth_dev *dev = &rte_eth_devices[port_id];
> > + return RTE_MTR_FUNC(port_id, meter_policy_validate)(dev,
> > + actions, error);
> > +}
> > +
> > +/* MTR meter policy add */
> > +int
> > +rte_mtr_meter_policy_add(uint16_t port_id,
> > + uint32_t policy_id,
> > + const struct rte_flow_action *actions[RTE_COLORS],
> > + struct rte_mtr_error *error)
> > +{
> > + struct rte_eth_dev *dev = &rte_eth_devices[port_id];
> > + return RTE_MTR_FUNC(port_id, meter_policy_add)(dev,
> > + policy_id, actions, error); }
> > +
> > +/** MTR meter policy delete */
> > +int
> > +rte_mtr_meter_policy_delete(uint16_t port_id,
> > + uint32_t policy_id,
> > + struct rte_mtr_error *error)
> > +{
> > + struct rte_eth_dev *dev = &rte_eth_devices[port_id];
> > + return RTE_MTR_FUNC(port_id, meter_policy_delete)(dev,
> > + policy_id, error);
> > +}
> > +
> > /** MTR object create */
> > int
> > rte_mtr_create(uint16_t port_id,
> > @@ -149,29 +183,28 @@ rte_mtr_meter_profile_update(uint16_t port_id,
> > mtr_id, meter_profile_id, error); }
> >
> > -/** MTR object meter DSCP table update */
> > +/** MTR object meter policy update */
> > int
> > -rte_mtr_meter_dscp_table_update(uint16_t port_id,
> > +rte_mtr_meter_policy_update(uint16_t port_id,
> > uint32_t mtr_id,
> > - enum rte_color *dscp_table,
> > + uint32_t meter_policy_id,
> > struct rte_mtr_error *error)
> > {
> > struct rte_eth_dev *dev = &rte_eth_devices[port_id];
> > - return RTE_MTR_FUNC(port_id, meter_dscp_table_update)(dev,
> > - mtr_id, dscp_table, error);
> > + return RTE_MTR_FUNC(port_id, meter_policy_update)(dev,
> > + mtr_id, meter_policy_id, error);
> > }
> >
> > -/** MTR object policer action update */
> > +/** MTR object meter DSCP table update */
> > int
> > -rte_mtr_policer_actions_update(uint16_t port_id,
> > +rte_mtr_meter_dscp_table_update(uint16_t port_id,
> > uint32_t mtr_id,
> > - uint32_t action_mask,
> > - enum rte_mtr_policer_action *actions,
> > + enum rte_color *dscp_table,
> > struct rte_mtr_error *error)
> > {
> > struct rte_eth_dev *dev = &rte_eth_devices[port_id];
> > - return RTE_MTR_FUNC(port_id, policer_actions_update)(dev,
> > - mtr_id, action_mask, actions, error);
> > + return RTE_MTR_FUNC(port_id, meter_dscp_table_update)(dev,
> > + mtr_id, dscp_table, error);
> > }
> >
> > /** MTR object enabled stats update */ diff --git
> > a/lib/librte_ethdev/rte_mtr.h b/lib/librte_ethdev/rte_mtr.h index
> > 916a09c5c3..07961f2777 100644
> > --- a/lib/librte_ethdev/rte_mtr.h
> > +++ b/lib/librte_ethdev/rte_mtr.h
> > @@ -49,6 +49,7 @@
> > #include <rte_compat.h>
> > #include <rte_common.h>
> > #include <rte_meter.h>
> > +#include <rte_flow.h>
> >
> > #ifdef __cplusplus
> > extern "C" {
> > @@ -174,23 +175,6 @@ struct rte_mtr_meter_profile {
> > };
> > };
> >
> > -/**
> > - * Policer actions
> > - */
> > -enum rte_mtr_policer_action {
> > - /** Recolor the packet as green. */
> > - MTR_POLICER_ACTION_COLOR_GREEN = 0,
> > -
> > - /** Recolor the packet as yellow. */
> > - MTR_POLICER_ACTION_COLOR_YELLOW,
> > -
> > - /** Recolor the packet as red. */
> > - MTR_POLICER_ACTION_COLOR_RED,
> > -
> > - /** Drop the packet. */
> > - MTR_POLICER_ACTION_DROP,
> > -};
> > -
> > /**
> > * Parameters for each traffic metering & policing object
> > *
> > @@ -232,13 +216,13 @@ struct rte_mtr_params {
> > */
> > int meter_enable;
> >
> > - /** Policer actions (per meter output color). */
> > - enum rte_mtr_policer_action action[RTE_COLORS];
> > -
> > /** Set of stats counters to be enabled.
> > * @see enum rte_mtr_stats_type
> > */
> > uint64_t stats_mask;
> > +
> > + /** Meter policy ID. */
> > + uint32_t meter_policy_id;
> > };
> >
> > /**
> > @@ -324,6 +308,13 @@ struct rte_mtr_capabilities {
> > */
> > uint64_t meter_rate_max;
> >
> > + /**
> > + * Maximum number of policy objects that can have.
> > + * The value of 0 is invalid. Policy must be supported for meter.
> > + * The maximum value is *n_max*.
> > + */
> > + uint64_t meter_policy_n_max;
> > +
> > /**
> > * When non-zero, it indicates that color aware mode is
> > supported for
> > * the srTCM RFC 2697 metering algorithm.
> > @@ -342,18 +333,6 @@ struct rte_mtr_capabilities {
> > */
> > int color_aware_trtcm_rfc4115_supported;
> >
> > - /** When non-zero, it indicates that the policer packet recolor
> > actions
> > - * are supported.
> > - * @see enum rte_mtr_policer_action
> > - */
> > - int policer_action_recolor_supported;
> > -
> > - /** When non-zero, it indicates that the policer packet drop action is
> > - * supported.
> > - * @see enum rte_mtr_policer_action
> > - */
> > - int policer_action_drop_supported;
> > -
> > /** Set of supported statistics counter types.
> > * @see enum rte_mtr_stats_type
> > */
> > @@ -462,6 +441,94 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
> > uint32_t meter_profile_id,
> > struct rte_mtr_error *error);
> >
> > +/**
> > + * Policy id 0 is default policy.
>
> I suggest you do not redundantly specify the value of the default policy ID in the
> comment. Replace by "Default policy ID."
>
> > + * Action per color as below:
> > + * green - no action, yellow - no action, red - drop
>
> This does not make sense to me as the default policy. The default policy should
> be "no change", i.e. green -> green (no change), yellow -> yellow (no change),
> red -> red (no change).
Can you explain why it doesn't make sense to you?
Meter with "no change" for all colors has no effect on the packets so it is redundant action which just costs performance and resources - probably never be used.
The most common usage for meter is to drop all the packets come above the defined rate limit - so it makes sense to take this behavior as default.
> I suggest we avoid the "no action" statement, as it might be confusing.
Maybe "do nothing" is better?
> > + * It can be used without creating it by the rte_mtr_meter_policy_add
> > function.
> > + */
> > +#define RTE_MTR_DEFAULT_POLICY_ID 0
> > +
> > +/**
> > + * Check whether a meter policy can be created on a given port.
> > + *
> > + * The meter policy is validated for correctness and
> > + * whether it could be accepted by the device given sufficient resources.
> > + * The policy is checked against the current capability information
> > + * meter_policy_n_max configuration.
> > + * The policy may also optionally be validated against existing
> > + * device policy resources.
> > + * This function has no effect on the target device.
> > + *
> > + * @param[in] port_id
> > + * The port identifier of the Ethernet device.
> > + * @param[in] policy_id
> > + * Policy identifier for the new meter policy.
> > + * @param[in] actions
> > + * Associated action list per color.
> > + * list NULL is legal and means no special action.
> > + * (list terminated by the END action).
> > + * @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_policy_validate(uint16_t port_id,
> > + uint32_t policy_id,
> > + const struct rte_flow_action *actions[RTE_COLORS],
> > + struct rte_mtr_error *error);
> > +
>
> This entire proposal is about defining a meter policy, yet there is no structure
> defining what exactly the meter policy is!
>
> Please let's use the following structure for the policy parameters for the policy
> validate/add/delete API functions:
>
> struct rte_mtr_meter_policy_params {
> struct rte_flow_action *actions[RTE_COLORS]; };
>
> This would also give us the chance to document the policy concept in detail
> once and not repeat the same explanation over and over. For example, we
> need to explain clearly that actions[i] potentially represents a chain of rte_flow
> actions terminated by the END action, exactly as specified by the rte_flow API
> for the flow definition, and not just a single action. This is very important and
> yet not entirely clear from the above description.
>
> This would also give us the chance to add more attributes to the meter policy
> later, if/when needed, with minimal impact to the API.
>
> > +/**
> > + * Meter policy add
> > + *
> > + * Create a new meter policy. The new policy
> > + * is used to create single or multiple MTR objects.
> > + *
> > + * @param[in] port_id
> > + * The port identifier of the Ethernet device.
> > + * @param[in] policy_id
> > + * Policy identifier for the new meter policy.
> > + * @param[in] actions
> > + * Associated actions per color.
> > + * list NULL is legal and means no special action.
> > + * (list terminated by the END action).
> > + * @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_policy_add(uint16_t port_id,
> > + uint32_t policy_id,
> > + const struct rte_flow_action *actions[RTE_COLORS],
> > + struct rte_mtr_error *error);
> > +
> > +/**
> > + * Meter policy delete
> > + *
> > + * Delete an existing meter policy. This operation fails when there
> > +is
> > + * currently at least one user (i.e. MTR object) of this policy.
> > + *
> > + * @param[in] port_id
> > + * The port identifier of the Ethernet device.
> > + * @param[in] policy_id
> > + * Policy identifier.
> > + * @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_policy_delete(uint16_t port_id,
> > + uint32_t policy_id,
> > + struct rte_mtr_error *error);
> > +
> > /**
> > * MTR object create
> > *
> > @@ -587,18 +654,14 @@ rte_mtr_meter_profile_update(uint16_t port_id,
> > struct rte_mtr_error *error);
> >
> > /**
> > - * MTR object DSCP table update
> > + * MTR object meter policy 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] dscp_table
> > - * 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).
> > + * @param[in] meter_policy_id
> > + * Meter policy ID for the current MTR object. Needs to be valid.
> > * @param[out] error
> > * Error details. Filled in only on error, when not NULL.
> > * @return
> > @@ -606,26 +669,24 @@ rte_mtr_meter_profile_update(uint16_t port_id,
> > */
> > __rte_experimental
> > int
> > -rte_mtr_meter_dscp_table_update(uint16_t port_id,
> > +rte_mtr_meter_policy_update(uint16_t port_id,
> > uint32_t mtr_id,
> > - enum rte_color *dscp_table,
> > + uint32_t meter_policy_id,
> > struct rte_mtr_error *error);
> >
> > /**
> > - * MTR object policer actions update
> > + * MTR object DSCP 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] action_mask
> > - * Bit mask indicating which policer actions need to be updated. One or
> > more
> > - * policer actions can be updated in a single function invocation. To update
> > - * the policer action associated with color C, bit (1 << C) needs to be set in
> > - * *action_mask* and element at position C in the *actions* array needs to
> > be
> > - * valid.
> > - * @param[in] actions
> > - * Pre-allocated and pre-populated array of policer actions.
> > + * @param[in] dscp_table
> > + * 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).
> > * @param[out] error
> > * Error details. Filled in only on error, when not NULL.
> > * @return
> > @@ -633,10 +694,9 @@ rte_mtr_meter_dscp_table_update(uint16_t
> > port_id,
> > */
> > __rte_experimental
> > int
> > -rte_mtr_policer_actions_update(uint16_t port_id,
> > +rte_mtr_meter_dscp_table_update(uint16_t port_id,
> > uint32_t mtr_id,
> > - uint32_t action_mask,
> > - enum rte_mtr_policer_action *actions,
> > + enum rte_color *dscp_table,
> > struct rte_mtr_error *error);
> >
> > /**
> > diff --git a/lib/librte_ethdev/rte_mtr_driver.h
> > b/lib/librte_ethdev/rte_mtr_driver.h
> > index a0ddc2b5f4..1ad8fb4c40 100644
> > --- a/lib/librte_ethdev/rte_mtr_driver.h
> > +++ b/lib/librte_ethdev/rte_mtr_driver.h
> > @@ -41,6 +41,23 @@ typedef int
> > (*rte_mtr_meter_profile_delete_t)(struct
> > rte_eth_dev *dev,
> > struct rte_mtr_error *error);
> > /**< @internal MTR meter profile delete */
> >
> > +typedef int (*rte_mtr_meter_policy_validate_t)(struct rte_eth_dev *dev,
> > + uint32_t policy_id,
> > + const struct rte_flow_action *actions[RTE_COLORS],
> > + struct rte_mtr_error *error);
> > +/**< @internal MTR meter policy validate */
> > +
> > +typedef int (*rte_mtr_meter_policy_add_t)(struct rte_eth_dev *dev,
> > + uint32_t policy_id,
> > + const struct rte_flow_action *actions[RTE_COLORS],
> > + struct rte_mtr_error *error);
> > +/**< @internal MTR meter policy add */
> > +
> > +typedef int (*rte_mtr_meter_policy_delete_t)(struct rte_eth_dev *dev,
> > + uint32_t policy_id,
> > + struct rte_mtr_error *error);
> > +/**< @internal MTR meter policy delete */
> > +
> > typedef int (*rte_mtr_create_t)(struct rte_eth_dev *dev,
> > uint32_t mtr_id,
> > struct rte_mtr_params *params,
> > @@ -69,18 +86,17 @@ typedef int
> > (*rte_mtr_meter_profile_update_t)(struct rte_eth_dev *dev,
> > struct rte_mtr_error *error);
> > /**< @internal MTR object meter profile update */
> >
> > -typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev
> > *dev,
> > +typedef int (*rte_mtr_meter_policy_update_t)(struct rte_eth_dev *dev,
> > uint32_t mtr_id,
> > - enum rte_color *dscp_table,
> > + uint32_t meter_policy_id,
> > struct rte_mtr_error *error);
> > -/**< @internal MTR object meter DSCP table update */
> > +/**< @internal MTR object meter policy update */
> >
> > -typedef int (*rte_mtr_policer_actions_update_t)(struct rte_eth_dev
> > *dev,
> > +typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev
> > *dev,
> > uint32_t mtr_id,
> > - uint32_t action_mask,
> > - enum rte_mtr_policer_action *actions,
> > + enum rte_color *dscp_table,
> > struct rte_mtr_error *error);
> > -/**< @internal MTR object policer action update*/
> > +/**< @internal MTR object meter DSCP table update */
> >
> > typedef int (*rte_mtr_stats_update_t)(struct rte_eth_dev *dev,
> > uint32_t mtr_id,
> > @@ -124,14 +140,23 @@ struct rte_mtr_ops {
> > /** MTR object meter DSCP table update */
> > rte_mtr_meter_dscp_table_update_t meter_dscp_table_update;
> >
> > - /** MTR object policer action update */
> > - rte_mtr_policer_actions_update_t policer_actions_update;
> > -
> > /** MTR object enabled stats update */
> > rte_mtr_stats_update_t stats_update;
> >
> > /** MTR object stats read */
> > rte_mtr_stats_read_t stats_read;
> > +
> > + /** MTR meter policy validate */
> > + rte_mtr_meter_policy_validate_t meter_policy_validate;
> > +
> > + /** MTR meter policy add */
> > + rte_mtr_meter_policy_add_t meter_policy_add;
> > +
> > + /** MTR meter policy delete */
> > + rte_mtr_meter_policy_delete_t meter_policy_delete;
> > +
> > + /** MTR object meter policy update */
> > + rte_mtr_meter_policy_update_t meter_policy_update;
> > };
> >
> > /**
> > --
> > 2.21.0
>
> Regards,
> Cristian
Thanks!
next prev parent reply other threads:[~2021-03-25 6:56 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-18 8:58 Li Zhang
2021-03-18 8:58 ` [dpdk-dev] [PATCH 2/2] [RFC]: ethdev: manage meter API object handles by the drivers Li Zhang
2021-03-23 21:33 ` Dumitrescu, Cristian
2021-03-25 8:21 ` Matan Azrad
2021-03-25 23:16 ` Ajit Khaparde
2021-03-29 19:56 ` Matan Azrad
2021-03-27 13:15 ` Jerin Jacob
2021-03-29 20:10 ` Matan Azrad
2021-03-31 10:22 ` Jerin Jacob
2021-03-23 21:02 ` [dpdk-dev] [PATCH 1/2] [RFC]: ethdev: add pre-defined meter policy API Dumitrescu, Cristian
2021-03-25 6:56 ` Matan Azrad [this message]
2021-03-29 9:23 ` Ori Kam
2021-03-29 16:24 ` Dumitrescu, Cristian
2021-04-01 13:13 ` Ori Kam
2021-04-01 13:35 ` Dumitrescu, Cristian
2021-04-01 14:22 ` Ori Kam
2021-03-29 16:08 ` Dumitrescu, Cristian
2021-03-29 20:43 ` Matan Azrad
2021-03-31 15:46 ` Dumitrescu, Cristian
2021-04-04 13:48 ` Matan Azrad
2021-03-29 10:38 ` Jerin Jacob
2021-03-29 20:31 ` Matan Azrad
2021-03-31 10:50 ` Jerin Jacob
2021-04-13 0:14 ` [dpdk-dev] [PATCH v3 0/2] Support " Li Zhang
2021-04-13 0:14 ` [dpdk-dev] [PATCH v3 1/2] ethdev: add pre-defined " Li Zhang
2021-04-13 14:19 ` Dumitrescu, Cristian
2021-04-14 3:23 ` Li Zhang
2021-04-13 14:59 ` Dumitrescu, Cristian
2021-04-14 4:55 ` Li Zhang
2021-04-14 8:02 ` Thomas Monjalon
2021-04-14 8:31 ` Matan Azrad
2021-04-14 8:47 ` Asaf Penso
2021-04-14 8:59 ` Li Zhang
2021-04-14 9:04 ` Thomas Monjalon
2021-04-14 14:00 ` Dumitrescu, Cristian
2021-04-14 16:21 ` Li Zhang
2021-04-13 16:25 ` Kinsella, Ray
2021-04-13 0:14 ` [dpdk-dev] [PATCH v3 2/2] app/testpmd: support policy actions per color Li Zhang
2021-04-14 3:12 ` [dpdk-dev] [PATCH v4 0/2] Support meter policy API Li Zhang
2021-04-14 3:12 ` [dpdk-dev] [PATCH v4 1/2] ethdev: add pre-defined " Li Zhang
2021-04-14 3:12 ` [dpdk-dev] [PATCH v4 2/2] app/testpmd: support policy actions per color Li Zhang
2021-04-14 6:32 ` [dpdk-dev] [PATCH v5 0/2] Support meter policy API Li Zhang
2021-04-14 6:32 ` [dpdk-dev] [PATCH v5 1/2] ethdev: add pre-defined " Li Zhang
2021-04-14 6:32 ` [dpdk-dev] [PATCH v5 2/2] app/testpmd: support policy actions per color Li Zhang
2021-04-14 8:57 ` [dpdk-dev] [PATCH v6 0/2] Support meter policy API Li Zhang
2021-04-14 8:57 ` [dpdk-dev] [PATCH v6 1/2] ethdev: add pre-defined " Li Zhang
2021-04-14 16:16 ` Dumitrescu, Cristian
2021-04-15 1:59 ` Li Zhang
2021-04-14 22:21 ` Singh, Jasvinder
2021-04-15 2:00 ` Li Zhang
2021-04-14 8:58 ` [dpdk-dev] [PATCH v6 2/2] app/testpmd: support policy actions per color Li Zhang
2021-04-15 4:54 ` [dpdk-dev] [PATCH v7 0/2] Support meter policy API Li Zhang
2021-04-15 4:54 ` [dpdk-dev] [PATCH v7 1/2] ethdev: add pre-defined " Li Zhang
2021-04-15 4:54 ` [dpdk-dev] [PATCH v7 2/2] app/testpmd: support policy actions per color Li Zhang
2021-04-15 9:20 ` [dpdk-dev] [PATCH v8 0/2] Support meter policy API Li Zhang
2021-04-15 9:20 ` [dpdk-dev] [PATCH v8 1/2] ethdev: add pre-defined " Li Zhang
2021-04-15 15:13 ` Ori Kam
2021-04-19 12:34 ` Singh, Jasvinder
2021-04-19 16:13 ` Jiawei(Jonny) Wang
2021-04-15 9:20 ` [dpdk-dev] [PATCH v8 2/2] app/testpmd: support policy actions per color Li Zhang
2021-04-19 16:08 ` [dpdk-dev] [PATCH v9 0/2] Support meter policy API Jiawei Wang
2021-04-19 16:08 ` [dpdk-dev] [PATCH v9 1/2] ethdev: add pre-defined " Jiawei Wang
2021-04-20 11:18 ` Dumitrescu, Cristian
2021-04-20 12:55 ` Asaf Penso
2021-04-20 21:01 ` Dumitrescu, Cristian
2021-04-19 16:08 ` [dpdk-dev] [PATCH v9 2/2] app/testpmd: support policy actions per color Jiawei Wang
2021-04-20 11:36 ` [dpdk-dev] [PATCH v9 0/2] Support meter policy API Ferruh Yigit
2021-04-20 14:08 ` Jiawei(Jonny) Wang
2021-04-20 14:04 ` [dpdk-dev] [PATCH v10 " Jiawei Wang
2021-04-20 14:04 ` [dpdk-dev] [PATCH v10 1/2] ethdev: add pre-defined " Jiawei Wang
2021-04-20 17:12 ` Ajit Khaparde
2021-04-21 19:43 ` Thomas Monjalon
2021-04-22 1:29 ` Li Zhang
2021-04-20 14:04 ` [dpdk-dev] [PATCH v10 2/2] app/testpmd: support policy actions per color Jiawei Wang
2021-04-20 17:14 ` Ajit Khaparde
2021-04-21 10:23 ` [dpdk-dev] [PATCH v10 0/2] Support meter policy API Ferruh Yigit
2021-04-20 17:56 ` [dpdk-dev] [PATCH 1/2] [RFC]: ethdev: add pre-defined " Stephen Hemminger
2021-04-21 2:49 ` Li Zhang
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=MW2PR12MB24928BE9B1C6ACFC7FA3368EDF629@MW2PR12MB2492.namprd12.prod.outlook.com \
--to=matan@nvidia.com \
--cc=ajit.khaparde@broadcom.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=cristian.dumitrescu@intel.com \
--cc=dekelp@nvidia.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=hemant.agrawal@nxp.com \
--cc=jasvinder.singh@intel.com \
--cc=jerinjacobk@gmail.com \
--cc=lironh@marvell.com \
--cc=lizh@nvidia.com \
--cc=orika@nvidia.com \
--cc=rasland@nvidia.com \
--cc=roniba@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 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).