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 | 29 ++++++++++------------
 1 file changed, 13 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..9fc19576cd 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,7 +2333,14 @@ 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;
@@ -2344,19 +2352,8 @@ 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;
+       if (ci_flow_check_actions(actions, &param, &parsed_actions, error) < 0)
+               return -rte_errno;
+
+       return flow->engine->query_count(ad, flow, count, error);
 }
-- 
2.47.3

Reply via email to