net/hns3: support querying RSS flow rule
authorLijun Ou <oulijun@huawei.com>
Tue, 22 Sep 2020 12:03:22 +0000 (20:03 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 30 Sep 2020 17:19:11 +0000 (19:19 +0200)
This patch enables to query some RSS configurations of the specified
rule. For example, show RSS hash function and rss types.

Signed-off-by: Lijun Ou <oulijun@huawei.com>
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
drivers/net/hns3/hns3_flow.c

index 1bc5911..14d5968 100644 (file)
@@ -1962,9 +1962,15 @@ hns3_flow_query(struct rte_eth_dev *dev, struct rte_flow *flow,
                const struct rte_flow_action *actions, void *data,
                struct rte_flow_error *error)
 {
+       struct rte_flow_action_rss *rss_conf;
+       struct hns3_rss_conf_ele *rss_rule;
        struct rte_flow_query_count *qc;
        int ret;
 
+       if (!flow->rule)
+               return rte_flow_error_set(error, EINVAL,
+                       RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "invalid rule");
+
        for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) {
                switch (actions->type) {
                case RTE_FLOW_ACTION_TYPE_VOID:
@@ -1975,13 +1981,24 @@ hns3_flow_query(struct rte_eth_dev *dev, struct rte_flow *flow,
                        if (ret)
                                return ret;
                        break;
+               case RTE_FLOW_ACTION_TYPE_RSS:
+                       if (flow->filter_type != RTE_ETH_FILTER_HASH) {
+                               return rte_flow_error_set(error, ENOTSUP,
+                                       RTE_FLOW_ERROR_TYPE_ACTION,
+                                       actions, "action is not supported");
+                       }
+                       rss_conf = (struct rte_flow_action_rss *)data;
+                       rss_rule = (struct hns3_rss_conf_ele *)flow->rule;
+                       rte_memcpy(rss_conf, &rss_rule->filter_info.conf,
+                                  sizeof(struct rte_flow_action_rss));
+                       break;
                default:
                        return rte_flow_error_set(error, ENOTSUP,
-                                                 RTE_FLOW_ERROR_TYPE_ACTION,
-                                                 actions,
-                                                 "Query action only support count");
+                               RTE_FLOW_ERROR_TYPE_ACTION,
+                               actions, "action is not supported");
                }
        }
+
        return 0;
 }