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

Ajit Khaparde ajit.khaparde at broadcom.com
Tue Sep 22 00:27:38 CEST 2020


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