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 RSSquoted
-----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.cb/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