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 EEFEFA04BA; Thu, 1 Oct 2020 22:51:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 425711D5C1; Thu, 1 Oct 2020 22:51:31 +0200 (CEST) Received: from mail-ot1-f68.google.com (mail-ot1-f68.google.com [209.85.210.68]) by dpdk.org (Postfix) with ESMTP id 78E1D1D5B9 for ; Thu, 1 Oct 2020 22:51:29 +0200 (CEST) Received: by mail-ot1-f68.google.com with SMTP id h17so99495otr.1 for ; Thu, 01 Oct 2020 13:51:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=COcLNjzb7kMIxrLntVRewUYU8cq9ywrjTIV82QR2r8M=; b=It0qMLvehpLfyvTX0aHaYzWCGU+YoBmZyspGV0az9dpQpFnciMYztaQBO/m1uRtXiC P5yrp33/RNMNOG54y+vhRFGHOHPowJaZFg+hP55lHuEGn4wJ/dKxmC1LdRYS+PyQVd1H hUHPOEsGyCU5eUwczLvZ8ILJguPRJbLaKa24E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=COcLNjzb7kMIxrLntVRewUYU8cq9ywrjTIV82QR2r8M=; b=Kih0nco7aQsQ+938NFBmZk7bRp4Gp6FSp262jNg6CH42AkevdmiU7AtKLg0d+J1EwB 4Svmo0lQ8r+dwlUf6W8gi3oiDXWNZJMY4yolipGgwGT8UPsRAU5IjE6zRBXxNgCcc0Tg YFHF0RuD014/jy+ASpzNtBDAHZ7X72mQbSXKXUqkwdkIbUJ1sZsfG1bpQdgj81zE0mwH CArtmiCzliaYg+9S6O4/K4QvuRHcTCrY/a6BG0VT1mkE0HVJ7u9w46CoEI26qK+3xeKc AiPCHGp7o95Ic26NIMmKQRnkKTNjaJdzuNiobb5jJMuzMPH2krS0rHGP9u2ckzpxTIId /7vw== X-Gm-Message-State: AOAM532K1reGRbqaNmRcBocztdUG575Rj2a5BhqxcYCuk052SnZopNn0 Jz5xoiZAhVk5RiqcZ5/4OQRHjtT5EBrZta2+UE9D3Q== X-Google-Smtp-Source: ABdhPJyu4pyc4sSwaxUT461zcowo+qVoJPDuPG6dNG4YXSgi8eDWlGuVXSsU5IERoJqH9/jWm+WdHHnRbnEbkFTiJrI= X-Received: by 2002:a9d:5e4:: with SMTP id 91mr5825723otd.95.1601585487325; Thu, 01 Oct 2020 13:51:27 -0700 (PDT) MIME-Version: 1.0 References: <1600795158-67060-1-git-send-email-jiaweiw@nvidia.com> <1601187539-112694-1-git-send-email-jiaweiw@nvidia.com> <1601187539-112694-2-git-send-email-jiaweiw@nvidia.com> In-Reply-To: <1601187539-112694-2-git-send-email-jiaweiw@nvidia.com> From: Ajit Khaparde Date: Thu, 1 Oct 2020 13:51:11 -0700 Message-ID: To: Jiawei Wang Cc: Ori Kam , Slava Ovsiienko , Matan Azrad , Thomas Monjalon , Ferruh Yigit , Marko Kovacevic , Andrew Rybchenko , dpdk-dev , rasland@nvidia.com, ian.stokes@intel.com, fbl@redhat.com, asafp@nvidia.com Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v8 01/13] 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" On Sat, Sep 26, 2020 at 11:20 PM Jiawei Wang wrote: > > When using full offload, all traffic will be handled by the HW, and > forwarded to the requested VF or wire and the control application does > not see this traffic anymore. So there's a need for an action that > enables the control application some forwarded traffic visibility. > > The solution introduces a new action that will sample the incoming > traffic and send a duplicated traffic with the specified ratio to the > application, while the original packet will continue to the target > destination. > > The packets sampled equals is '1/ratio', the ratio value set to 1 > means that the packets will 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. > > Signed-off-by: Jiawei Wang > Acked-by: Ori Kam > Acked-by: Jerin Jacob > Acked-by: Andrew Rybchenko > Acked-by: Viacheslav Ovsiienko Acked-by: Ajit Khaparde > --- > doc/guides/prog_guide/rte_flow.rst | 25 +++++++++++++++++++++++++ > doc/guides/rel_notes/release_20_11.rst | 6 ++++++ > lib/librte_ethdev/rte_flow.c | 1 + > lib/librte_ethdev/rte_flow.h | 30 ++++++++++++++++++++++++++++++ > 4 files changed, 62 insertions(+) > > diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst > index 119b128..a0046a2 100644 > --- a/doc/guides/prog_guide/rte_flow.rst > +++ b/doc/guides/prog_guide/rte_flow.rst > @@ -2666,6 +2666,31 @@ timeout passed without any matching on the flow. > | ``context`` | user input flow context | > +--------------+---------------------------------+ > > +Action: ``SAMPLE`` > +^^^^^^^^^^^^^^^^^^ > + > +Adds a sample action to a matched flow. > + > +The matching packets will be duplicated with the specified ``ratio`` and > +applied with own set of actions with a fate action, the packets sampled > +equals is '1/ratio'. All the packets continue to the target destination. > + > +When the ``ratio`` is set to 1 then the packets will be 100% mirrored. > +``actions`` represent the different set of actions for the sampled or mirrored > +packets, and must have a fate action. > + > +.. _table_rte_flow_action_sample: > + > +.. table:: SAMPLE > + > + +--------------+---------------------------------+ > + | Field | Value | > + +==============+=================================+ > + | ``ratio`` | 32 bits sample ratio value | > + +--------------+---------------------------------+ > + | ``actions`` | sub-action list for sampling | > + +--------------+---------------------------------+ > + > Negative types > ~~~~~~~~~~~~~~ > > diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst > index c6642f5..e530bdd 100644 > --- a/doc/guides/rel_notes/release_20_11.rst > +++ b/doc/guides/rel_notes/release_20_11.rst > @@ -78,6 +78,12 @@ New Features > ``--portmask=N`` > where N represents the hexadecimal bitmask of ports used. > > +* **Added flow-based traffic sampling support.** > + > + Added new action: ``RTE_FLOW_ACTION_TYPE_SAMPLE`` to duplicate the matching > + packets with specified ratio, and apply with own set of actions with a fate > + action. When the ratio is set to 1 then the packets will be 100% mirrored. > + > > Removed Items > ------------- > diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c > index f8fdd68..035671d 100644 > --- a/lib/librte_ethdev/rte_flow.c > +++ b/lib/librte_ethdev/rte_flow.c > @@ -174,6 +174,7 @@ struct rte_flow_desc_data { > 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 da8bfa5..fa70d40 100644 > --- a/lib/librte_ethdev/rte_flow.h > +++ b/lib/librte_ethdev/rte_flow.h > @@ -2132,6 +2132,14 @@ enum rte_flow_action_type { > * see enum RTE_ETH_EVENT_FLOW_AGED > */ > RTE_FLOW_ACTION_TYPE_AGE, > + > + /** > + * The matching packets will be duplicated with specified ratio and > + * applied with own set of actions with a fate action. > + * > + * See struct rte_flow_action_sample. > + */ > + RTE_FLOW_ACTION_TYPE_SAMPLE, > }; > > /** > @@ -2742,6 +2750,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 with specified ratio and applied > + * with own set of actions with a fate action, the sampled packet could be > + * redirected to queue or port. All the packets continue 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 { > + uint32_t ratio; /**< packets sampled equals to '1/ratio'. */ > + const struct rte_flow_action *actions; > + /**< sub-action list specific for the sampling hit cases. */ > +}; > + > +/** > * Verbose error types. > * > * Most of them provide the type of the object referenced by struct > -- > 1.8.3.1 >