All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
To: Gregory Etelson <getelson@nvidia.com>, dev@dpdk.org
Cc: matan@nvidia.com, rasland@nvidia.com, Ori Kam <orika@nvidia.com>,
	Aman Singh <aman.deep.singh@intel.com>,
	Yuying Zhang <yuying.zhang@intel.com>,
	Ferruh Yigit <ferruh.yigit@amd.com>,
	Thomas Monjalon <thomas@monjalon.net>
Subject: Re: [PATCH v7 2/2] ethdev: add quota flow action and item
Date: Wed, 1 Feb 2023 14:22:24 +0300	[thread overview]
Message-ID: <bb57851a-1b75-fa6c-72b8-1469e396baee@oktetlabs.ru> (raw)
In-Reply-To: <20230124093750.2472-2-getelson@nvidia.com>

On 1/24/23 12:37, Gregory Etelson wrote:
> Quota action limits traffic according to pre-defined configuration.
> Quota reflects overall traffic usage regardless bandwidth.
> Quota flow action initialized with signed tokens number value.
> Quota flow action updates tokens number according to
> these rules:
> 1. if quota was configured to count packet length, for each packet
>     of size S, tokens number reduced by S.
> 2. If quota was configured to count packets, each packet decrements
>     tokens number.
> quota action sets packet metadata according to a number of remaining
> tokens number:
>    PASS - remaining tokens number is non-negative.
>    BLOCK - remaining tokens number is negative.
> 
> Quota flow item matches on that data
> 
> Application updates tokens number in quota flow action
> with SET or ADD calls:
>   SET(QUOTA, val) - arm quota with new tokens number set to val
>   ADD(QUOTA, val) - increase existing quota tokens number by val
> 
> Both SET and ADD return to application number of tokens stored in port
> before update.
> 
> If quota state was BLOCK (negative action tokens number)
> application can change it to PASS after providing enough tokens to
> raise action tokens number to 0 or above.
> 
> Application must create a rule with quota action to mark flow and
> match on the mark with quota item in following flow rule.
> 
> Signed-off-by: Gregory Etelson <getelson@nvidia.com>
> Acked-by: Ori Kam <orika@nvidia.com>

[snip]

> diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
> index 3e6242803d..7a3868638c 100644
> --- a/doc/guides/prog_guide/rte_flow.rst
> +++ b/doc/guides/prog_guide/rte_flow.rst
> @@ -1544,6 +1544,13 @@ Matches Color Marker set by a Meter.
>   
>   - ``color``: Metering color marker.
>   
> +Item: ``QUOTA``
> +^^^^^^^^^^^^^^^
> +
> +Matches flow quota state set by quota action.
> +
> +- ``state``: Flow quota state
> +
>   Actions
>   ~~~~~~~
>   
> @@ -3227,6 +3234,40 @@ and rte_mtr_policy_get() API respectively.
>      | ``policy``       | Meter policy object  |
>      +------------------+----------------------+
>   
> +Action: ``QUOTA``
> +^^^^^^^^^^^^^^^^^
> +
> +Update ``quota`` value and set packet quota state.
> +If the ``quota`` value after update is non-negative packet quota state set to
> +``RTE_FLOW_QUOTA_STATE_PASS``. Otherwise, packet quota state set to ``RTE_FLOW_QUOTA_STATE_BLOCK``.
> +The ``quota`` value is reduced according to ``mode`` setting.
> +
> +.. _table_rte_flow_action_quota:
> +
> +.. table:: QUOTA
> +
> +   +------------------+------------------------+
> +   | Field            | Value                  |
> +   +==================+========================+
> +   | ``mode``         | Quota operational mode |
> +   +------------------+------------------------+
> +   | ``quota``        | Quota value            |
> +   +------------------+------------------------+
> +
> +.. _rte_flow_quota_mode:
> +
> +.. table:: Quota update modes
> +
> +   +---------------------------------+-------------------------------------+
> +   | Value                           | Description                         |
> +   +=================================+=====================================+
> +   | ``RTE_FLOW_QUOTA_MODE_PACKET``  | Count packets                       |
> +   +---------------------------------+-------------------------------------+
> +   | ``RTE_FLOW_QUOTA_MODE_L2``      | Count packet bytes starting from L2 |
> +   +------------------+----------------------------------------------------+
> +   | ``RTE_FLOW_QUOTA_MODE_L3``      | Count packet bytes starting from L3 |
> +   +------------------+----------------------------------------------------+
> +
>   Negative types
>   ~~~~~~~~~~~~~~
>   
> diff --git a/doc/guides/rel_notes/release_23_03.rst b/doc/guides/rel_notes/release_23_03.rst
> index 5b98e18032..0756cca241 100644
> --- a/doc/guides/rel_notes/release_23_03.rst
> +++ b/doc/guides/rel_notes/release_23_03.rst
> @@ -77,6 +77,18 @@ New Features
>     - ``rte_flow_async_action_handle_query_update``
>   
>   

Just one empty line between section items

> +* **Added quota flow action and quota flow item.**
> +
> +  - ``RTE_FLOW_ACTION_TYPE_QUOTA``
> +  - ``RTE_FLOW_ITEM_TYPE_QUOTA``
> +
> +
Just one empty line between section items

> +* **Updated testpmd to support quota flow action and item.**
> +
> +  Added support for flow quota action and item.
> +
> +
> +

It should be 2 empty lines, not 3,

>   Removed Items
>   -------------
>   

[snip]

> diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
> index 6705cb32af..46409ed607 100644
> --- a/lib/ethdev/rte_flow.h
> +++ b/lib/ethdev/rte_flow.h
> @@ -624,7 +624,45 @@ enum rte_flow_item_type {
>   	 * See struct rte_flow_item_meter_color.
>   	 */
>   	RTE_FLOW_ITEM_TYPE_METER_COLOR,
> +
> +	/**
> +	 * Match Quota state
> +	 *
> +	 * @see struct rte_flow_item_quota
> +	 */
> +	 RTE_FLOW_ITEM_TYPE_QUOTA,
> +};
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * QUOTA state.
> + *
> + * @see struct rte_flow_item_quota
> + */
> +enum rte_flow_quota_state {
> +	RTE_FLOW_QUOTA_STATE_PASS, /**< PASS quota state */
> +	RTE_FLOW_QUOTA_STATE_BLOCK /**< BLOCK quota state */
> +};
> +
> +/**
> + * RTE_FLOW_ITEM_TYPE_QUOTA
> + *
> + * Matches QUOTA state
> + */
> +struct rte_flow_item_quota {
> +	enum rte_flow_quota_state state;
> +};
> +
> +/**
> + * Default mask for RTE_FLOW_ITEM_TYPE_QUOTA
> + */
> +#ifndef __cplusplus
> +static const struct rte_flow_item_quota rte_flow_item_quota_mask = {
> +	.state = (enum rte_flow_quota_state)0xff
>   };
> +#endif
>   
>   /**
>    *
> @@ -2736,6 +2774,81 @@ enum rte_flow_action_type {
>   	 * No associated configuration structure.
>   	 */
>   	RTE_FLOW_ACTION_TYPE_SEND_TO_KERNEL,
> +
> +	/**
> +	 * Apply the quota verdict (PASS or BLOCK) to a flow.
> +	 *
> +	 * @see struct rte_flow_action_quota
> +	 * @see struct rte_flow_query_quota
> +	 * @see struct rte_flow_update_quota
> +	 */
> +	 RTE_FLOW_ACTION_TYPE_QUOTA,
> +};
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * QUOTA operational mode.
> + *
> + * @see struct rte_flow_action_quota
> + */
> +enum rte_flow_quota_mode {
> +	RTE_FLOW_QUOTA_MODE_PACKET = 1, /** Count packets */

/**<  since you put documentation after documented member

> +	RTE_FLOW_QUOTA_MODE_L2 = 2, /** Count packet bytes starting from L2 */

/**<

also, why do you initialize every member? are you going to rely
on these values?

> +	RTE_FLOW_QUOTA_MODE_L3 = 3, /** Count packet bytes starting from L3 */

/**<

> +};
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Create QUOTA action.
> + *
> + * @see RTE_FLOW_ACTION_TYPE_QUOTA
> + */
> +struct rte_flow_action_quota {
> +	enum rte_flow_quota_mode mode; /** quota operational mode */

/**<  since you put documentation after documented member

> +	int64_t quota;                 /** quota value */

/**<

> +};
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Query indirect QUOTA action.
> + *
> + * @see RTE_FLOW_ACTION_TYPE_QUOTA
> + *
> + */
> +struct rte_flow_query_quota {
> +	int64_t quota; /** quota value */

/**<  since you put documentation after documented member

> +};
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Indirect QUOTA update operations.
> + *
> + * @see struct rte_flow_update_quota
> + */
> +enum rte_flow_update_quota_op {
> +	RTE_FLOW_UPDATE_QUOTA_SET, /** set new quota value */

/**<  since you put documentation after documented member

> +	RTE_FLOW_UPDATE_QUOTA_ADD, /** increase existing quota with new value */

/**<

> +};
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * @see RTE_FLOW_ACTION_TYPE_QUOTA
> + *
> + * Update indirect QUOTA action.
> + */
> +struct rte_flow_update_quota {
> +	enum rte_flow_update_quota_op op; /** update operation */

/**<  since you put documentation after documented member

> +	int64_t quota;                    /** quota value */

/**<

>   };
>   
>   /**
> @@ -4854,6 +4967,11 @@ struct rte_flow_port_info {
>   	 * @see RTE_FLOW_ACTION_TYPE_CONNTRACK
>   	 */
>   	uint32_t max_nb_conn_tracks;
> +	/**
> +	 * Maximum number of quota actions.
> +	 * @see RTE_FLOW_ACTION_TYPE_QUOTA
> +	 */
> +	uint32_t max_nb_quotas;
>   	/**
>   	 * Port supported flags (RTE_FLOW_PORT_FLAG_*).
>   	 */
> @@ -4932,6 +5050,11 @@ struct rte_flow_port_attr {
>   	 * @see RTE_FLOW_ACTION_TYPE_CONNTRACK
>   	 */
>   	uint32_t nb_conn_tracks;
> +	/**
> +	 * Maximum number of quota actions.
> +	 * @see RTE_FLOW_ACTION_TYPE_QUOTA
> +	 */
> +	uint32_t nb_quotas;
>   	/**
>   	 * Port flags (RTE_FLOW_PORT_FLAG_*).
>   	 */


  reply	other threads:[~2023-02-01 11:22 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-21  7:35 [PATCH 1/2] ethdev: add query_update sync and async function calls Gregory Etelson
2022-12-21  7:35 ` [PATCH 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-01-08 13:47   ` Ori Kam
2023-01-04  9:56 ` [PATCH 1/2] ethdev: add query_update sync and async function calls Ori Kam
2023-01-11  9:28   ` Gregory Etelson
2023-01-11  9:22 ` [PATCH v2 " Gregory Etelson
2023-01-11  9:22   ` [PATCH v2 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-01-11 12:20 ` [PATCH v3 1/2] ethdev: add query_update sync and async function calls Gregory Etelson
2023-01-11 12:20   ` [PATCH v3 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-01-18 10:31 ` [PATCH v4 1/2] ethdev: add query_update sync and async function calls Gregory Etelson
2023-01-18 10:31   ` [PATCH v4 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-01-18 14:03     ` Thomas Monjalon
2023-01-19  9:13       ` Gregory Etelson
2023-01-19  9:31         ` Thomas Monjalon
2023-01-19  9:39           ` Gregory Etelson
2023-01-18 13:56   ` [PATCH v4 1/2] ethdev: add query_update sync and async function calls Thomas Monjalon
2023-01-18 17:34     ` Gregory Etelson
2023-01-19  8:44       ` Thomas Monjalon
2023-01-19 13:25 ` [PATCH v5 " Gregory Etelson
2023-01-19 13:25   ` [PATCH v5 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-01-19 16:47 ` [PATCH v6 1/2] ethdev: add query_update sync and async function calls Gregory Etelson
2023-01-19 16:47   ` [PATCH v6 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-01-20  8:52     ` Andrew Rybchenko
2023-01-24  9:26       ` Gregory Etelson
2023-01-20  8:35   ` [PATCH v6 1/2] ethdev: add query_update sync and async function calls Andrew Rybchenko
2023-01-20 10:46     ` Gregory Etelson
2023-01-20 11:22       ` Andrew Rybchenko
2023-01-20 16:50         ` Gregory Etelson
2023-02-01 11:00           ` Andrew Rybchenko
2023-02-01 14:03             ` Gregory Etelson
2023-01-24  9:37 ` [PATCH v7 " Gregory Etelson
2023-01-24  9:37   ` [PATCH v7 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-02-01 11:22     ` Andrew Rybchenko [this message]
2023-02-01 15:09       ` Gregory Etelson
2023-02-01 11:16   ` [PATCH v7 1/2] ethdev: add query_update sync and async function calls Andrew Rybchenko
2023-02-01 14:52     ` Gregory Etelson
2023-02-01 15:16 ` [PATCH v8 " Gregory Etelson
2023-02-01 15:16   ` [PATCH v8 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-02-02  9:17     ` Andrew Rybchenko
2023-02-01 17:30   ` [PATCH v8 1/2] ethdev: add query_update sync and async function calls Ori Kam
2023-02-02  9:15   ` Andrew Rybchenko
2023-02-02 10:24     ` Gregory Etelson
2023-02-02 10:30       ` Andrew Rybchenko
2023-02-02 10:44         ` Gregory Etelson
2023-02-02 10:47           ` Andrew Rybchenko
2023-02-02 11:54 ` [PATCH v9 1/2] ethdev: add query and update " Gregory Etelson
2023-02-02 11:54   ` [PATCH v9 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-02-02 12:13   ` [PATCH v9 1/2] ethdev: add query and update sync and async function calls Andrew Rybchenko
2023-02-09 19:16     ` Gregory Etelson
2023-02-02 13:47 ` [PATCH v10 " Gregory Etelson
2023-02-02 13:47   ` [PATCH v10 2/2] ethdev: add quota flow action and item Gregory Etelson
2023-02-19 17:04     ` Thomas Monjalon
2023-02-07 16:03   ` [PATCH v10 1/2] ethdev: add query and update sync and async function calls Gregory Etelson
2023-02-09 15:13   ` Ferruh Yigit
2023-02-09 16:10     ` Gregory Etelson
2023-02-12 11:13     ` Gregory Etelson
2023-02-13 12:30       ` Gregory Etelson
2023-02-16 15:43   ` 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=bb57851a-1b75-fa6c-72b8-1469e396baee@oktetlabs.ru \
    --to=andrew.rybchenko@oktetlabs.ru \
    --cc=aman.deep.singh@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@amd.com \
    --cc=getelson@nvidia.com \
    --cc=matan@nvidia.com \
    --cc=orika@nvidia.com \
    --cc=rasland@nvidia.com \
    --cc=thomas@monjalon.net \
    --cc=yuying.zhang@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.