Testpmd calls the same function to create legacy indirect action and
indirect list action.
The function did not identify required action correctly.

The patch adds the `indirect_list` boolean function parameter that is
derived from the action type.

Fixes: ee752a734d14 ("app/testpmd: add INDIRECT_LIST flow action support")
Signed-off-by: Gregory Etelson <getel...@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnow...@nvidia.com>
---
 app/test-pmd/cmdline_flow.c | 1 +
 app/test-pmd/config.c       | 5 ++---
 app/test-pmd/testpmd.h      | 1 +
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 5f761903c1..fd6c51f72d 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -13237,6 +13237,7 @@ cmd_flow_parsed(const struct buffer *in)
                port_queue_action_handle_create(
                                in->port, in->queue, in->postpone,
                                in->args.vc.attr.group,
+                               in->command == 
QUEUE_INDIRECT_ACTION_LIST_CREATE,
                                &((const struct rte_flow_indir_action_conf) {
                                        .ingress = in->args.vc.attr.ingress,
                                        .egress = in->args.vc.attr.egress,
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 968d2164ab..ba1007ace6 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -3099,6 +3099,7 @@ port_queue_flow_update(portid_t port_id, queueid_t 
queue_id,
 int
 port_queue_action_handle_create(portid_t port_id, uint32_t queue_id,
                                bool postpone, uint32_t id,
+                               bool indirect_list,
                                const struct rte_flow_indir_action_conf *conf,
                                const struct rte_flow_action *action)
 {
@@ -3108,8 +3109,6 @@ port_queue_action_handle_create(portid_t port_id, 
uint32_t queue_id,
        int ret;
        struct rte_flow_error error;
        struct queue_job *job;
-       bool is_indirect_list = action[1].type != RTE_FLOW_ACTION_TYPE_END;
-
 
        ret = action_alloc(port_id, id, &pia);
        if (ret)
@@ -3131,7 +3130,7 @@ port_queue_action_handle_create(portid_t port_id, 
uint32_t queue_id,
        /* Poisoning to make sure PMDs update it in case of error. */
        memset(&error, 0x88, sizeof(error));
 
-       if (is_indirect_list)
+       if (indirect_list)
                queue_action_list_handle_create(port_id, queue_id, pia, job,
                                                &attr, conf, action, &error);
        else
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 55df12033a..0afae7d771 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -1002,6 +1002,7 @@ int port_queue_flow_update(portid_t port_id, queueid_t 
queue_id,
                           const struct rte_flow_action *actions);
 int port_queue_action_handle_create(portid_t port_id, uint32_t queue_id,
                        bool postpone, uint32_t id,
+                       bool indirect_list,
                        const struct rte_flow_indir_action_conf *conf,
                        const struct rte_flow_action *action);
 int port_queue_action_handle_destroy(portid_t port_id,
-- 
2.39.2

Reply via email to