[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