All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Guo <jia.guo@intel.com>
To: xiaolong.ye@intel.com, qi.z.zhang@intel.com
Cc: dev@dpdk.org, jingjing.wu@intel.com, yahui.cao@intel.com,
	simei.su@intel.com, jia.guo@intel.com
Subject: [dpdk-dev] [dpdk-dev 1/1] net/ice: Support for GTPU down/up rss configure
Date: Wed, 18 Mar 2020 13:12:10 -0400	[thread overview]
Message-ID: <20200318171210.8051-2-jia.guo@intel.com> (raw)
In-Reply-To: <20200318171210.8051-1-jia.guo@intel.com>

Add GTP PDU uplink/donwlink checking in RSS inpust set configuration,
in order to support l3 src hash for GTPU uplink, while l3 dst hash
for GTPU downlink.

Change-Id: I0cfa92d8bebcfe9ed95444b14549044a01a511d1
Signed-off-by: Jeff Guo <jia.guo@intel.com>
---
 drivers/net/ice/ice_hash.c | 59 ++++++++++++++++++++++++++++++++------
 1 file changed, 51 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c
index 69d805248..ea73d2501 100644
--- a/drivers/net/ice/ice_hash.c
+++ b/drivers/net/ice/ice_hash.c
@@ -25,6 +25,9 @@
 #include "ice_ethdev.h"
 #include "ice_generic_flow.h"
 
+#define	GTP_EH_PDU_LINK_UP	1
+#define	GTP_EH_PDU_LINK_DWN	0
+
 struct rss_type_match_hdr {
 	uint32_t hdr_mask;
 	uint64_t eth_rss_hint;
@@ -145,6 +148,10 @@ static struct ice_pattern_match_item ice_hash_pattern_list_comms[] = {
 struct ice_hash_match_type ice_hash_type_list[] = {
 	{ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY,					BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)},
 	{ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY,					BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)},
+	{ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU_UP,
+		BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)},
+	{ETH_RSS_IPV4 | ETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU_DWN,
+		BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)},
 	{ETH_RSS_IPV4,								ICE_FLOW_HASH_IPV4},
 	{ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,	BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
 	{ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,	BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA) | BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
@@ -175,6 +182,10 @@ struct ice_hash_match_type ice_hash_type_list[] = {
 	{ETH_RSS_NONFRAG_IPV4_SCTP,						ICE_HASH_SCTP_IPV4},
 	{ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY,					BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)},
 	{ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY,					BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)},
+	{ETH_RSS_IPV6 | ETH_RSS_L3_SRC_ONLY | ETH_RSS_GTPU_UP,
+		BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)},
+	{ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY | ETH_RSS_GTPU_DWN,
+		BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)},
 	{ETH_RSS_IPV6,								ICE_FLOW_HASH_IPV6},
 	{ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,	BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
 	{ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,	BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) | BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
@@ -269,21 +280,45 @@ ice_hash_check_inset(const struct rte_flow_item pattern[],
 					"Not support range");
 			return -rte_errno;
 		}
+	}
 
-		/* Ignore spec and mask. */
-		if (item->spec || item->mask) {
-			rte_flow_error_set(error, EINVAL,
-					RTE_FLOW_ERROR_TYPE_ITEM, item,
-					"Invalid spec/mask.");
-			return -rte_errno;
+	return 0;
+}
+
+static uint64_t
+ice_rss_hf_refine(uint64_t rss_hf, const struct rte_flow_item pattern[],
+		  const struct rte_flow_action *action,
+		  struct rte_flow_error *error)
+{
+	const struct rte_flow_item *item;
+
+	for (item = pattern; item->type != RTE_FLOW_ITEM_TYPE_END; item++) {
+		if (item->type == RTE_FLOW_ITEM_TYPE_GTP_PSC) {
+			const struct rte_flow_action_rss *rss = action->conf;
+			const struct rte_flow_item_gtp_psc *psc = item->spec;
+
+			if (psc && ((psc->pdu_type == GTP_EH_PDU_LINK_UP &&
+				     (rss->types & ETH_RSS_L3_SRC_ONLY)) ||
+				    (!psc->pdu_type &&
+				     (rss->types & ETH_RSS_L3_DST_ONLY)))) {
+				rss_hf |= psc->pdu_type ? ETH_RSS_GTPU_UP :
+						ETH_RSS_GTPU_DWN;
+			} else {
+				rte_flow_error_set(error, EINVAL,
+						RTE_FLOW_ERROR_TYPE_ITEM_SPEC,
+						   pattern,
+						   "Invalid input set");
+				return -rte_errno;
+			}
 		}
 	}
 
-	return 0;
+	return rss_hf;
 }
 
 static int
 ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item,
+		const struct rte_flow_item pattern[],
 		const struct rte_flow_action actions[],
 		void **meta,
 		struct rte_flow_error *error)
@@ -313,6 +348,13 @@ ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item,
 			 */
 			rss_hf = rte_eth_rss_hf_refine(rss_hf);
 
+			/**
+			 * Check the item spec with the rss action and
+			 * refine rss hash field.
+			 */
+			rss_hf = ice_rss_hf_refine(rss_hf, pattern, action,
+						   error);
+
 			/* Check if pattern is empty. */
 			if (pattern_match_item->pattern_list !=
 				pattern_empty && rss->func ==
@@ -440,7 +482,8 @@ ice_hash_parse_pattern_action(__rte_unused struct ice_adapter *ad,
 		(pattern_match_item->meta))->hdr_mask;
 
 	/* Check rss action. */
-	ret = ice_hash_parse_action(pattern_match_item, actions, meta, error);
+	ret = ice_hash_parse_action(pattern_match_item, pattern, actions, meta,
+				    error);
 error:
 	if (ret)
 		rte_free(rss_meta_ptr);
-- 
2.20.1


  reply	other threads:[~2020-03-18  8:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-18 17:12 [dpdk-dev] [dpdk-dev 0/1] add new rss configuration for ice Jeff Guo
2020-03-18 17:12 ` Jeff Guo [this message]
2020-04-11  0:18   ` [dpdk-dev] [dpdk-dev v2 " Jeff Guo
2020-04-11  0:18     ` [dpdk-dev] [dpdk-dev v2 1/1] net/ice: Support for GTPU down/up rss configure Jeff Guo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200318171210.8051-2-jia.guo@intel.com \
    --to=jia.guo@intel.com \
    --cc=dev@dpdk.org \
    --cc=jingjing.wu@intel.com \
    --cc=qi.z.zhang@intel.com \
    --cc=simei.su@intel.com \
    --cc=xiaolong.ye@intel.com \
    --cc=yahui.cao@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.