Use the common flow parsing infrastructure to validate query actions.

Signed-off-by: Anatoly Burakov <[email protected]>
---
 drivers/net/intel/iavf/iavf_generic_flow.c | 31 +++++++++++-----------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/net/intel/iavf/iavf_generic_flow.c 
b/drivers/net/intel/iavf/iavf_generic_flow.c
index 022caf5fe2..8925449a5e 100644
--- a/drivers/net/intel/iavf/iavf_generic_flow.c
+++ b/drivers/net/intel/iavf/iavf_generic_flow.c
@@ -17,6 +17,7 @@
 
 #include "iavf.h"
 #include "iavf_generic_flow.h"
+#include "../common/flow_check.h"
 
 static struct iavf_engine_list engine_list =
                TAILQ_HEAD_INITIALIZER(engine_list);
@@ -2332,10 +2333,18 @@ iavf_flow_query(struct rte_eth_dev *dev,
                void *data,
                struct rte_flow_error *error)
 {
-       int ret = -EINVAL;
+       struct ci_flow_actions parsed_actions = {0};
+       struct ci_flow_actions_check_param param = {
+               .allowed_types = (enum rte_flow_action_type[]) {
+                       RTE_FLOW_ACTION_TYPE_COUNT,
+                       RTE_FLOW_ACTION_TYPE_END
+               },
+               .max_actions = 1
+       };
        struct iavf_adapter *ad =
                IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
        struct rte_flow_query_count *count = data;
+       int ret;
 
        if (!iavf_flow_is_valid(flow) || !flow->engine->query_count) {
                rte_flow_error_set(error, EINVAL,
@@ -2344,19 +2353,9 @@ iavf_flow_query(struct rte_eth_dev *dev,
                return -rte_errno;
        }
 
-       for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
-               switch (actions->type) {
-               case RTE_FLOW_ACTION_TYPE_VOID:
-                       break;
-               case RTE_FLOW_ACTION_TYPE_COUNT:
-                       ret = flow->engine->query_count(ad, flow, count, error);
-                       break;
-               default:
-                       return rte_flow_error_set(error, ENOTSUP,
-                                       RTE_FLOW_ERROR_TYPE_ACTION,
-                                       actions,
-                                       "action not supported");
-               }
-       }
-       return ret;
+       ret = ci_flow_check_actions(actions, &param, &parsed_actions, error);
+       if (ret < 0)
+               return ret;
+
+       return flow->engine->query_count(ad, flow, count, error);
 }
-- 
2.47.3

Reply via email to