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.
> *
next prev parent 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).