From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 834F5A0542;
	Fri,  2 Sep 2022 05:01:01 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 22FBE4280B;
	Fri,  2 Sep 2022 05:00:54 +0200 (CEST)
Received: from smtpbg.qq.com (smtpbgbr2.qq.com [54.207.22.56])
 by mails.dpdk.org (Postfix) with ESMTP id 93C7940E09;
 Fri,  2 Sep 2022 05:00:49 +0200 (CEST)
X-QQ-mid: bizesmtp70t1662087644td3ja4ou
Received: from wxdbg.localdomain.com ( [183.129.236.74])
 by bizesmtp.qq.com (ESMTP) with 
 id ; Fri, 02 Sep 2022 11:00:44 +0800 (CST)
X-QQ-SSF: 01400000000000G0T000000A0000000
X-QQ-FEAT: q+EIYT+FhZpUq6uvjhG9Cryqz8rZ2EVGErbTEqunJhS/NhclwxrRBXEWKfEX1
 eWPsQXoAQLMKaCfZkkQDvNUBhxhTOmvQijprEuwTatEZ6z4kpxXORUQC+t4OZ2EQr7pVUIA
 Qeoa3p3MocEHqVQsvExgu7dh9uhenDEsIbkJy9oFR99SmxrRMf3CyF5n8cZfmBwB5lNemuS
 pl/XFCYZ18zMRVp/Us9H8Vujd50iIJsFZ2D6iCwN+PUbLKqLvZ40imny73uBtcd0JGBL/v8
 PZGNJRoZVnP0EVUNVBy3wRcokBgL2tS11ipo9Y0hHY9Y9mYtaQvMq2HTbUim89KX1oVi+Q+
 3SL+l2SFIgTlM3UVQP97SECU7PC7V5AI7tpUW+Yco5jKbA59Kyhr7Btn37fG3kunNAuUJSG
X-QQ-GoodBg: 2
From: Jiawen Wu <jiawenwu@trustnetic.com>
To: dev@dpdk.org
Cc: Jiawen Wu <jiawenwu@trustnetic.com>,
	stable@dpdk.org
Subject: [PATCH 1/9] net/txgbe: fix IPv6 rule in flow director
Date: Fri,  2 Sep 2022 11:00:03 +0800
Message-Id: <20220902030011.377523-2-jiawenwu@trustnetic.com>
X-Mailer: git-send-email 2.27.0
In-Reply-To: <20220902030011.377523-1-jiawenwu@trustnetic.com>
References: <20220902030011.377523-1-jiawenwu@trustnetic.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-QQ-SENDSIZE: 520
Feedback-ID: bizesmtp:trustnetic.com:qybglogicsvr:qybglogicsvr5
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

Convert the correct packet type and flow type, to fix IPv6 rule in FDIR.

Fixes: b973ee26747a ("net/txgbe: parse flow director filter")
Cc: stable@dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
 drivers/net/txgbe/txgbe_flow.c | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index d0093c0163..07d0337095 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -1583,9 +1583,7 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused,
 	 * value. So, we need not do anything for the not provided fields later.
 	 */
 	memset(rule, 0, sizeof(struct txgbe_fdir_rule));
-	memset(&rule->mask, 0xFF, sizeof(struct txgbe_hw_fdir_mask));
-	rule->mask.vlan_tci_mask = 0;
-	rule->mask.flex_bytes_mask = 0;
+	memset(&rule->mask, 0, sizeof(struct txgbe_hw_fdir_mask));
 
 	/**
 	 * The first not void item should be
@@ -1867,7 +1865,10 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused,
 		 * as we must have a flow type.
 		 */
 		rule->input.flow_type |= TXGBE_ATR_L4TYPE_TCP;
-		ptype = txgbe_ptype_table[TXGBE_PT_IPV4_TCP];
+		if (rule->input.flow_type & TXGBE_ATR_FLOW_TYPE_IPV6)
+			ptype = txgbe_ptype_table[TXGBE_PT_IPV6_TCP];
+		else
+			ptype = txgbe_ptype_table[TXGBE_PT_IPV4_TCP];
 		/*Not supported last point for range*/
 		if (item->last) {
 			rte_flow_error_set(error, EINVAL,
@@ -1931,7 +1932,10 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused,
 		 * as we must have a flow type.
 		 */
 		rule->input.flow_type |= TXGBE_ATR_L4TYPE_UDP;
-		ptype = txgbe_ptype_table[TXGBE_PT_IPV4_UDP];
+		if (rule->input.flow_type & TXGBE_ATR_FLOW_TYPE_IPV6)
+			ptype = txgbe_ptype_table[TXGBE_PT_IPV6_UDP];
+		else
+			ptype = txgbe_ptype_table[TXGBE_PT_IPV4_UDP];
 		/*Not supported last point for range*/
 		if (item->last) {
 			rte_flow_error_set(error, EINVAL,
@@ -1990,7 +1994,10 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused,
 		 * as we must have a flow type.
 		 */
 		rule->input.flow_type |= TXGBE_ATR_L4TYPE_SCTP;
-		ptype = txgbe_ptype_table[TXGBE_PT_IPV4_SCTP];
+		if (rule->input.flow_type & TXGBE_ATR_FLOW_TYPE_IPV6)
+			ptype = txgbe_ptype_table[TXGBE_PT_IPV6_SCTP];
+		else
+			ptype = txgbe_ptype_table[TXGBE_PT_IPV4_SCTP];
 		/*Not supported last point for range*/
 		if (item->last) {
 			rte_flow_error_set(error, EINVAL,
@@ -2141,6 +2148,16 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused,
 
 	rule->input.pkt_type = cpu_to_be16(txgbe_encode_ptype(ptype));
 
+	if (rule->input.flow_type & TXGBE_ATR_FLOW_TYPE_IPV6) {
+		if (rule->input.flow_type & TXGBE_ATR_L4TYPE_MASK)
+			rule->input.pkt_type &= 0xFFFF;
+		else
+			rule->input.pkt_type &= 0xF8FF;
+
+		rule->input.flow_type &= TXGBE_ATR_L3TYPE_MASK |
+					TXGBE_ATR_L4TYPE_MASK;
+	}
+
 	return txgbe_parse_fdir_act_attr(attr, actions, rule, error);
 }
 
@@ -2827,8 +2844,10 @@ txgbe_flow_create(struct rte_eth_dev *dev,
 				ret = memcmp(&fdir_info->mask,
 					&fdir_rule.mask,
 					sizeof(struct txgbe_hw_fdir_mask));
-				if (ret)
+				if (ret) {
+					PMD_DRV_LOG(ERR, "only support one global mask");
 					goto out;
+				}
 
 				if (fdir_info->flex_bytes_offset !=
 						fdir_rule.flex_bytes_offset)
-- 
2.27.0