Thread (47 messages) 47 messages, 5 authors, 2020-07-08

Re: [dpdk-dev] [PATCH v2 4/5] net/i40e: enable flow query RSS

From: Di, ChenxuX <hidden>
Date: 2020-07-01 01:16:06

Hi,
-----Original Message-----
From: Yang, Qiming
Sent: Tuesday, June 30, 2020 6:27 PM
To: Di, ChenxuX <redacted>; dev@dpdk.org
Cc: Xing, Beilei <redacted>
Subject: RE: [PATCH v2 4/5] net/i40e: enable flow query RSS


quoted
-----Original Message-----
From: Di, ChenxuX <redacted>
Sent: Monday, June 15, 2020 10:19
To: dev@dpdk.org
Cc: Xing, Beilei <redacted>; Yang, Qiming
[off-list ref]; Di, ChenxuX [off-list ref]
Subject: [PATCH v2 4/5] net/i40e: enable flow query RSS

This patch enables flow query function to get the configuration ofthe
specified rule.

Signed-off-by: Chenxu Di <redacted>
---
 drivers/net/i40e/i40e_flow.c | 51
++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)
diff --git a/drivers/net/i40e/i40e_flow.c
b/drivers/net/i40e/i40e_flow.c index 8f8df6fae..b070802bd 100644
--- a/drivers/net/i40e/i40e_flow.c
+++ b/drivers/net/i40e/i40e_flow.c
@@ -43,6 +43,11 @@ static int i40e_flow_destroy(struct rte_eth_dev *dev,
      struct rte_flow_error *error);
 static int i40e_flow_flush(struct rte_eth_dev *dev,
    struct rte_flow_error *error);
+static int i40e_flow_query(struct rte_eth_dev *dev,
+   struct rte_flow *flow,
+   const struct rte_flow_action *actions,
+   void *data,
+   struct rte_flow_error *error);
 static int
 i40e_flow_parse_ethertype_pattern(struct rte_eth_dev *dev,
   const struct rte_flow_item *pattern, @@ -
129,6 +134,7 @@ const struct rte_flow_ops i40e_flow_ops = {  .create =
i40e_flow_create,  .destroy = i40e_flow_destroy,  .flush =
i40e_flow_flush,
+.query = i40e_flow_query,
 };

 static union i40e_filter_t cons_filter; @@ -5462,3 +5468,48 @@
i40e_flow_flush_rss_filter(struct rte_eth_dev *dev)

 return ret;
 }
+
+static int
+i40e_flow_query(struct rte_eth_dev *dev __rte_unused, struct rte_flow
+*flow, const struct rte_flow_action *actions, void *data, struct
+rte_flow_error *error) { struct i40e_rss_filter *rss_rule = (struct
+i40e_rss_filter *)flow->rule; enum rte_filter_type filter_type =
+flow->filter_type; struct rte_flow_action_rss *rss_conf = data;
+
+if (!rss_rule) {
+rte_flow_error_set(error, EINVAL,
+   RTE_FLOW_ERROR_TYPE_HANDLE,
+   NULL, "Invalid rule");
+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_RSS:
+if (filter_type != RTE_ETH_FILTER_HASH) { rte_flow_error_set(error,
+ENOTSUP,
+
RTE_FLOW_ERROR_TYPE_ACTION,
+   actions,
+   "action not supported");
+return -rte_errno;
+}
+rte_memcpy(rss_conf,
+   &rss_rule->rss_filter_info.conf,
+   sizeof(struct rte_flow_action_rss));
Don't understand the behavior, what's action means? What's the things this
commend query?
By zhangqi's comment, it will query the configuration of rss rule.
It just return the config and display it.
quoted
+break;
+default:
+return rte_flow_error_set(error, ENOTSUP,
+
RTE_FLOW_ERROR_TYPE_ACTION,
+  actions,
+  "action not supported");
+}
+}
+
+return 0;
+}
--
2.17.1
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help