From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2B505A0350; Wed, 24 Jun 2020 19:07:54 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4FC451DA15; Wed, 24 Jun 2020 19:07:53 +0200 (CEST) Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id ADEB31DA12 for ; Wed, 24 Jun 2020 19:07:52 +0200 (CEST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 0C1665C00E7; Wed, 24 Jun 2020 13:07:52 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Wed, 24 Jun 2020 13:07:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s=fm1; bh= 95lo3Em5RaMWEYbkF9BhDNcV0w4MOoqQ9Ffi2l2KGno=; b=NEVCczfGC7F2oxGF R129M3LpCKQ0Cs51oUTpqo76gQyl8MboiQAMyuFGvuE5yyCyLQgUPEmWWwb5QIHI +YnQBKXZAZGSXxsucx+CNVXyCha8Eb/Xm47zvJxx2M7CEYPxphz1vtA36JhYShGQ qyoimHyqP3RAFjIfEAK7hAYsb+Kl57ga0EWhgzT2rY2sJA6vMYOi3Msy+9cKelTB a7mG+y4ChlexsbBB8VLfflw05nmUH9/m2Tz9qWZP0B0Mr+YYBqMK1TRGmVWd4Dv6 4f6s/3GLzFInu1eWijtsooGicQvo+xKILCwHgfdVMb7YOwp0i5kJ5cW6DuqbWmc/ jvsm9A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; bh=95lo3Em5RaMWEYbkF9BhDNcV0w4MOoqQ9Ffi2l2KG no=; b=tY0We5jntRGVd0FCaROskQJDjDk9qk+lRkFhondgBqHjCqd+fsxftdG57 1cock2FKjn6GrzlQ1YcbaHJuzbHBsgeTmLRSo7M4dzLmMlX0zZ8vEs/6F9SAunu/ gsrzQYqV+tYY7mpljQMufBfbBxUaP4uL+Id/Qtc7mADvZ6t3rmAFSFrbKMOes5Tx AuRaVDHa7TbnJRE4uaK9Q5hBtMUVzGq6XJ12cXZmVB+T0X5FxbOL/P6aN8t2d5qZ 2akehDb05E3PK9ea6CC7xS+XVGwqyUzdODzVJkgEw0tKxpoPoiMZLIhVRC+Aoc/j CoAngYbUTpvBda7pAaYAfdTiIyVtg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedrudekjedguddtgecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefhvffufffkjghfggfgtgesthfuredttddtvdenucfhrhhomhepvfhhohhm rghsucfoohhnjhgrlhhonhcuoehthhhomhgrshesmhhonhhjrghlohhnrdhnvghtqeenuc ggtffrrghtthgvrhhnpedugefgvdefudfftdefgeelgffhueekgfffhfeujedtteeutdej ueeiiedvffegheenucfkphepjeejrddufeegrddvtdefrddukeegnecuvehluhhsthgvrh fuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepthhhohhmrghssehmohhnjhgr lhhonhdrnhgvth X-ME-Proxy: Received: from xps.localnet (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 8A05F30676B1; Wed, 24 Jun 2020 13:07:50 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: orika@mellanox.com, viacheslavo@mellanox.com, matan@mellanox.com, rasland@mellanox.com, Jiawei Wang , ian.stokes@intel.com, fbl@redhat.com Date: Wed, 24 Jun 2020 19:07:49 +0200 Message-ID: <7858203.UFLHXkIILB@thomas> In-Reply-To: <20200611131946.11629-1-jiaweiw@mellanox.com> References: <20200611131946.11629-1-jiaweiw@mellanox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Subject: Re: [dpdk-dev] [RFC] ethdev: introduce sample action for rte flow X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 > > 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 > --- > 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. > *