From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3704FA0519; Fri, 3 Jul 2020 07:57:13 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D170E1D9E8; Fri, 3 Jul 2020 07:57:12 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 7D8731D969 for ; Fri, 3 Jul 2020 07:57:10 +0200 (CEST) IronPort-SDR: TfTV8jsT/o+UyPpX8f4Pu2lWVbQaYfe937nq6bS+N0cx05ToJoodFXrjrj2KRVZK31Bg0WwDWo TW3zvVhTm2yg== X-IronPort-AV: E=McAfee;i="6000,8403,9670"; a="135377861" X-IronPort-AV: E=Sophos;i="5.75,307,1589266800"; d="scan'208,217";a="135377861" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jul 2020 22:57:09 -0700 IronPort-SDR: R0PHf9cBwgrPF8Xy0in2rxeNJ2bmI1bYSDaLZFlpKwPLR7VA+1YSASjfTcKoC2lCoL1EbVVzjy aICP1Db9Wi6A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,307,1589266800"; d="scan'208,217";a="278333106" Received: from jguo15x-mobl.ccr.corp.intel.com (HELO [10.67.68.176]) ([10.67.68.176]) by orsmga003.jf.intel.com with ESMTP; 02 Jul 2020 22:57:07 -0700 To: Chenxu Di , dev@dpdk.org Cc: Yang Qiming References: <20200611060142.75465-1-chenxux.di@intel.com> <20200701082451.34511-1-chenxux.di@intel.com> <20200701082451.34511-5-chenxux.di@intel.com> From: Jeff Guo Message-ID: <9f0867d2-722f-6751-138e-2be88a08f6c9@intel.com> Date: Fri, 3 Jul 2020 13:57:07 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 MIME-Version: 1.0 In-Reply-To: <20200701082451.34511-5-chenxux.di@intel.com> Content-Language: en-US Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v3 4/5] net/i40e: enable flow query RSS X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 7/1/2020 4:24 PM, Chenxu Di wrote: > This patch enables flow query function to get the > configuration of the specified rule. > > Signed-off-by: Chenxu Di > --- > doc/guides/rel_notes/release_20_08.rst | 1 + > drivers/net/i40e/i40e_flow.c | 49 ++++++++++++++++++++++++++ > 2 files changed, 50 insertions(+) > > diff --git a/doc/guides/rel_notes/release_20_08.rst b/doc/guides/rel_notes/release_20_08.rst > index 1252a337a..a7fb3136d 100644 > --- a/doc/guides/rel_notes/release_20_08.rst > +++ b/doc/guides/rel_notes/release_20_08.rst > @@ -90,6 +90,7 @@ New Features > > * Re-implemented get_fdir_info and get_fdir_stat in private API. > * Re-implemented set_gre_key_len in private API. > + * Added support for flow query RSS. > > * **Updated the Intel ixgbe driver.** > > diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c > index 8f8df6fae..4186a5df2 100644 > --- a/drivers/net/i40e/i40e_flow.c > +++ b/drivers/net/i40e/i40e_flow.c > @@ -43,6 +43,10 @@ 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 +133,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 +5467,47 @@ 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)); > + break; > + default: > + return rte_flow_error_set(error, ENOTSUP, > + RTE_FLOW_ERROR_TYPE_ACTION, > + actions, > + "action not supported"); > + } > + } > + > + return 0; > +} Acked-by: Jeff Guo >