Add 'represented-port' and 'port-representor' action support,
and update documentation.

Signed-off-by: Hadi Sandid <[email protected]>
---
 .mailmap                         |  1 +
 app/test-flow-perf/actions_gen.c | 36 ++++++++++++++++++++++++++++++++
 app/test-flow-perf/main.c        | 21 +++++++++++++++++--
 doc/guides/tools/flow-perf.rst   | 20 ++++++++++++++++++
 4 files changed, 76 insertions(+), 2 deletions(-)

diff --git a/.mailmap b/.mailmap
index c5bc728fae..c51b14fbda 100644
--- a/.mailmap
+++ b/.mailmap
@@ -557,6 +557,7 @@ Guruprasad Rao <[email protected]>
 Guy Kaneti <[email protected]>
 Guy Tzalik <[email protected]>
 H. Peter Anvin <[email protected]>
+Hadi Sandid <[email protected]>
 Haggai Eran <[email protected]>
 Haifei Luo <[email protected]>
 Haifeng Gao <[email protected]>
diff --git a/app/test-flow-perf/actions_gen.c b/app/test-flow-perf/actions_gen.c
index 9d102e3af4..4a17349f92 100644
--- a/app/test-flow-perf/actions_gen.c
+++ b/app/test-flow-perf/actions_gen.c
@@ -187,6 +187,34 @@ add_port_id(struct rte_flow_action *actions,
        actions[actions_counter].conf = &port_id;
 }
 
+static void
+add_represented_port(struct rte_flow_action *actions,
+       uint8_t actions_counter,
+       struct additional_para para)
+{
+       static struct rte_flow_action_ethdev represented_port = {
+               .port_id = PORT_ID_DST,
+       };
+
+       represented_port.port_id = para.dst_port;
+       actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT;
+       actions[actions_counter].conf = &represented_port;
+}
+
+static void
+add_port_representor(struct rte_flow_action *actions,
+       uint8_t actions_counter,
+       struct additional_para para)
+{
+       static struct rte_flow_action_ethdev port_representor = {
+               .port_id = PORT_ID_DST,
+       };
+
+       port_representor.port_id = para.dst_port;
+       actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR;
+       actions[actions_counter].conf = &port_representor;
+}
+
 static void
 add_drop(struct rte_flow_action *actions,
        uint8_t actions_counter,
@@ -1102,6 +1130,14 @@ fill_actions(struct rte_flow_action *actions, uint64_t 
*flow_actions,
                        .mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_PORT_ID),
                        .funct = add_port_id
                },
+               {
+                       .mask = 
FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT),
+                       .funct = add_represented_port,
+               },
+               {
+                       .mask = 
FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR),
+                       .funct = add_port_representor,
+               },
                {
                        .mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_DROP),
                        .funct = add_drop,
diff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c
index 6636d1517f..8147d41d4b 100644
--- a/app/test-flow-perf/main.c
+++ b/app/test-flow-perf/main.c
@@ -267,6 +267,18 @@ static const struct option_dict {
                .map = &flow_actions[0],
                .map_idx = &actions_idx
        },
+       {
+               .str = "represented-port",
+               .mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT),
+               .map = &flow_actions[0],
+               .map_idx = &actions_idx
+       },
+       {
+               .str = "port-representor",
+               .mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR),
+               .map = &flow_actions[0],
+               .map_idx = &actions_idx
+       },
        {
                .str = "rss",
                .mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_RSS),
@@ -542,6 +554,8 @@ usage(char *progname)
 
        printf("To set flow actions:\n");
        printf("  --port-id: add port-id action in flow actions\n");
+       printf("  --represented-port: add represented-port action in flow 
actions\n");
+       printf("  --port-representor: add port-representor action in flow 
actions\n");
        printf("  --rss: add rss action in flow actions\n");
        printf("  --queue: add queue action in flow actions\n");
        printf("  --jump: add jump action in flow actions\n");
@@ -699,6 +713,8 @@ args_parse(int argc, char **argv)
                { "icmpv6",                     0, 0, 0 },
                /* Actions */
                { "port-id",                    2, 0, 0 },
+               { "represented-port",           2, 0, 0 },
+               { "port-representor",           2, 0, 0 },
                { "rss",                        0, 0, 0 },
                { "queue",                      0, 0, 0 },
                { "jump",                       0, 0, 0 },
@@ -913,8 +929,9 @@ args_parse(int argc, char **argv)
                                        rte_exit(EXIT_FAILURE, "Invalid hairpin 
config mask\n");
                                hairpin_conf_mask = hp_conf;
                        }
-                       if (strcmp(lgopts[opt_idx].name,
-                                       "port-id") == 0) {
+                       if (strcmp(lgopts[opt_idx].name, "port-id") == 0 ||
+                           strcmp(lgopts[opt_idx].name, "represented-port") == 
0 ||
+                           strcmp(lgopts[opt_idx].name, "port-representor") == 
0) {
                                uint16_t port_idx = 0;
 
                                token = strtok(optarg, ",");
diff --git a/doc/guides/tools/flow-perf.rst b/doc/guides/tools/flow-perf.rst
index 657f06fec7..7f97a9940d 100644
--- a/doc/guides/tools/flow-perf.rst
+++ b/doc/guides/tools/flow-perf.rst
@@ -248,6 +248,26 @@ Actions:
        specify the destination port, the number of values should be
        the same with number of set bits in portmask.
 
+*      ``--represented-port``
+       Add represented port redirection action to all flows actions.
+       Port redirection destination is defined in config.h under
+       PORT_ID_DST, default value = 1.
+
+               It can also have an optional parameter like
+               --represented-port=N[,M] to specify the destination port. The
+               number of values should be the same as the number of set bits in
+               portmask.
+
+*      ``--port-representor``
+       Add port representor redirection action to all flows actions.
+       Port redirection destination is defined in config.h under
+       PORT_ID_DST, default value = 1.
+
+               It can also have an optional parameter like
+               --port-representor=N[,M] to specify the destination port. The
+               number of values should be the same as the number of set bits in
+               portmask.
+
 *      ``--rss``
        Add RSS action to all flows actions,
        The queues in RSS action will be all queues configured
-- 
2.43.0

Reply via email to