From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 To: dev@dpdk.org Cc: Jiawen Wu , 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-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 --- 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