DPDK patches and discussions
 help / color / mirror / Atom feed
From: Thomas Monjalon <thomas@monjalon.net>
To: dev@dpdk.org
Cc: orika@mellanox.com, viacheslavo@mellanox.com, matan@mellanox.com,
	rasland@mellanox.com, Jiawei Wang <jiaweiw@mellanox.com>,
	ian.stokes@intel.com, fbl@redhat.com
Subject: Re: [dpdk-dev] [RFC] ethdev: introduce sample action for rte flow
Date: Wed, 24 Jun 2020 19:07:49 +0200	[thread overview]
Message-ID: <7858203.UFLHXkIILB@thomas> (raw)
In-Reply-To: <20200611131946.11629-1-jiaweiw@mellanox.com>

Ping for review

11/06/2020 15:19, Jiawei Wang:
> When using full offload, all traffic will be handled by the HW, and
> directed to the requested vf or wire, the control application loses
> visibility on the traffic.
> So there's a need for an action that will enable the control application
> some visibility.
> 
> The solution is introduced a new action that will sample the incoming
> traffic and send a duplicated traffic in some predefined ratio to the
> application, while the original packet will continue to the target
> destination.
> 
> The packets sampled equals is '1/ratio', if the ratio value be set to 1
> , means that the packets would be completely mirrored. The sample packet
> can be assigned with different set of actions from the original packet.
> 
> In order to support the sample packet in rte_flow, new rte_flow action
> definition RTE_FLOW_ACTION_TYPE_SAMPLE and structure rte_flow_action_sample
> will be introduced.
> 
> The examples for the sample flow use case and result as below:
> 1. pattern eth / actions decap / sample (ratio=2, actions=mark 8, queue 2) / jump
> This flow will result in all the matched ingress packets will be
> decapsulated and jumped to next flow table, and the each second packet
> will also be decapsulated, marked and sent to queue 2 of the control
> application.
> 
> 2. pattern eth / actions sample (ratio=1, actions=port 1) / port 2
> The flow will result in all the matched ingress packets will be sent to
> port 2, and also mirrored the packets and sent to port 2.
> 
> 3. pattern eth / actions sample (ratio=1, actions=encap, port 0) / encap / port 0
> The flow will result in all the matched egress packets will be encapsulated
> and sent to wire, and also mirrored the packets and with the different
> encapsulated data and sent to wire.
> 
> Add a new testpmd command 'set sample_actions' that supports the multiple
> sample actions list configuration by using the index:
> set sample_actions <index> <actions list>
> 
> The examples for the test-pmd command that according the above sample
> flow case:
> 1. set sample_actions 0 mark id 0x8 / queue index 2 / end
>    flow create...pattern eth / end actions raw_decap / sample ratio 2 index 0 / jump group 2 / end
> 
> 2. set sample_actions 1 port_id id 1 / end
>    flow create...pattern eth / end actions sample ratio 1 index 1 / port_id id 2 / end
> 
> 3. set raw_encap 0 eth src.../ipv4.../...
>    set raw_encap 1 eth src.../ipv4.../...
>    set sample_actions 2 raw_encap index 0 / port_id id 0 / end
>    flow create...pattern eth / end actions sample ratio 1 index 2 / raw_encap index 1 / port_id id 0 / end
> 
> Signed-off-by: Jiawei Wang <jiaweiw@mellanox.com>
> ---
>  lib/librte_ethdev/rte_flow.c |  1 +
>  lib/librte_ethdev/rte_flow.h | 29 +++++++++++++++++++++++++++++
>  2 files changed, 30 insertions(+)
> 
> diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
> index 1685be5f73..733871de63 100644
> --- a/lib/librte_ethdev/rte_flow.c
> +++ b/lib/librte_ethdev/rte_flow.c
> @@ -173,6 +173,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = {
>  	MK_FLOW_ACTION(SET_IPV4_DSCP, sizeof(struct rte_flow_action_set_dscp)),
>  	MK_FLOW_ACTION(SET_IPV6_DSCP, sizeof(struct rte_flow_action_set_dscp)),
>  	MK_FLOW_ACTION(AGE, sizeof(struct rte_flow_action_age)),
> +	MK_FLOW_ACTION(SAMPLE, sizeof(struct rte_flow_action_sample)),
>  };
>  
>  int
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> index b0e4199192..71dd82c64f 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -2099,6 +2099,13 @@ enum rte_flow_action_type {
>  	 * see enum RTE_ETH_EVENT_FLOW_AGED
>  	 */
>  	RTE_FLOW_ACTION_TYPE_AGE,
> +
> +	/**
> +	 * Redirects specific ratio of packets to vport or queue.
> +	 *
> +	 * See struct rte_flow_action_sample.
> +	 */
> +	RTE_FLOW_ACTION_TYPE_SAMPLE,
>  };
>  
>  /**
> @@ -2708,6 +2715,28 @@ struct rte_flow_action {
>   */
>  struct rte_flow;
>  
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this structure may change without prior notice
> + *
> + * RTE_FLOW_ACTION_TYPE_SAMPLE
> + *
> + * Adds a sample action to a matched flow.
> + *
> + * The matching packets will be duplicated to a special queue or vport
> + * in the predefined probabiilty, All the packets continues processing
> + * on the default flow path.
> + *
> + * When the sample ratio is set to 1 then the packets will be 100% mirrored.
> + * Additional action list be supported to add for sampled or mirrored packets.
> + */
> +struct rte_flow_action_sample {
> +	/* packets sampled equals to '1/ratio' */
> +	const uint32_t ratio;
> +	/* sub-action list specific for the sampling hit cases */
> +	const struct rte_flow_action *actions;
> +};
> +
>  /**
>   * Verbose error types.
>   *




  reply	other threads:[~2020-06-24 17:07 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-11 13:19 Jiawei Wang
2020-06-24 17:07 ` Thomas Monjalon [this message]
2020-06-24 18:09   ` Stephen Hemminger
2020-06-24 19:14     ` Thomas Monjalon

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=7858203.UFLHXkIILB@thomas \
    --to=thomas@monjalon.net \
    --cc=dev@dpdk.org \
    --cc=fbl@redhat.com \
    --cc=ian.stokes@intel.com \
    --cc=jiaweiw@mellanox.com \
    --cc=matan@mellanox.com \
    --cc=orika@mellanox.com \
    --cc=rasland@mellanox.com \
    --cc=viacheslavo@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).