[dpdk-dev] [PATCH v6 11/12] app/testpmd: add port and encap support for sample action

Jiawei(Jonny) Wang jiaweiw at nvidia.com
Tue Sep 22 14:32:29 CEST 2020


Yes, Nice catch.

I will fix it.

Thanks.
B.R.
Jonny

> -----Original Message-----
> From: Ajit Khaparde <ajit.khaparde at broadcom.com>
> Sent: Tuesday, September 22, 2020 6:28 AM
> To: Jiawei(Jonny) Wang <jiaweiw at nvidia.com>
> Cc: Ori Kam <orika at nvidia.com>; Slava Ovsiienko <viacheslavo at nvidia.com>;
> Matan Azrad <matan at nvidia.com>; NBU-Contact-Thomas Monjalon
> <thomas at monjalon.net>; Ferruh Yigit <ferruh.yigit at intel.com>; Marko
> Kovacevic <marko.kovacevic at intel.com>; Andrew Rybchenko
> <arybchenko at solarflare.com>; dpdk-dev <dev at dpdk.org>; Raslan
> Darawsheh <rasland at nvidia.com>; ian.stokes at intel.com; fbl at redhat.com;
> Asaf Penso <asafp at nvidia.com>
> Subject: Re: [dpdk-dev] [PATCH v6 11/12] app/testpmd: add port and encap
> support for sample action
> 
> On Tue, Sep 8, 2020 at 11:50 PM Jiawei Wang <jiaweiw at nvidia.com> wrote:
> >
> > Use sample action with ratio is 1 for mirroring flow, add supports to
> > set the different port or encap action for mirrored packets.
> >
> > The example of test-pmd command:
> >
> > 1. set sample_actions 1 port_id id 1 / end
> >    flow create 0 ... pattern eth / end actions
> >         sample ratio 1 index 1 / port_id id 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.
> 
>                   ^
> 
> You probably meant "and also mirrored the packets and sent to port 1"?
> 
> >
> > 2. 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 0 ... pattern eth / end actions
> >         sample ratio 1 index 2 / raw_encap index 1 / port_id id 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.
> >
> > Signed-off-by: Jiawei Wang <jiaweiw at nvidia.com>
> > ---
> >  app/test-pmd/cmdline_flow.c | 16 ++++++++++++++++
> >  1 file changed, 16 insertions(+)
> >
> > diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> > index 27fa294..1860657 100644
> > --- a/app/test-pmd/cmdline_flow.c
> > +++ b/app/test-pmd/cmdline_flow.c
> > @@ -514,6 +514,8 @@ struct raw_sample_conf {  struct
> > rte_flow_action_mark sample_mark[RAW_SAMPLE_CONFS_MAX_NUM];
> >  struct rte_flow_action_queue
> sample_queue[RAW_SAMPLE_CONFS_MAX_NUM];
> >  struct rte_flow_action_count
> sample_count[RAW_SAMPLE_CONFS_MAX_NUM];
> > +struct rte_flow_action_port_id
> > +sample_port_id[RAW_SAMPLE_CONFS_MAX_NUM];
> > +struct rte_flow_action_raw_encap
> > +sample_encap[RAW_SAMPLE_CONFS_MAX_NUM];
> >
> >  /** Maximum number of subsequent tokens and arguments on the stack.
> > */  #define CTX_STACK_SIZE 16 @@ -1456,6 +1458,8 @@ struct
> > parse_action_priv {
> >         ACTION_QUEUE,
> >         ACTION_MARK,
> >         ACTION_COUNT,
> > +       ACTION_PORT_ID,
> > +       ACTION_RAW_ENCAP,
> >         ACTION_NEXT,
> >         ZERO,
> >  };
> > @@ -7009,6 +7013,18 @@ static int comp_set_sample_index(struct
> context *, const struct token *,
> >                                 (const void *)action->conf, size);
> >                         action->conf = &sample_queue[idx];
> >                         break;
> > +               case RTE_FLOW_ACTION_TYPE_RAW_ENCAP:
> > +                       size = sizeof(struct rte_flow_action_raw_encap);
> > +                       rte_memcpy(&sample_encap[idx],
> > +                               (const void *)action->conf, size);
> > +                       action->conf = &sample_encap[idx];
> > +                       break;
> > +               case RTE_FLOW_ACTION_TYPE_PORT_ID:
> > +                       size = sizeof(struct rte_flow_action_port_id);
> > +                       rte_memcpy(&sample_port_id[idx],
> > +                               (const void *)action->conf, size);
> > +                       action->conf = &sample_port_id[idx];
> > +                       break;
> >                 default:
> >                         printf("Error - Not supported action\n");
> >                         return;
> > --
> > 1.8.3.1
> >


More information about the dev mailing list