From patchwork Wed Aug 10 06:47:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Yang X-Patchwork-Id: 114792 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B577CA0540; Wed, 10 Aug 2022 08:58:09 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 566C140A87; Wed, 10 Aug 2022 08:58:09 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 3B1564068E; Wed, 10 Aug 2022 08:58:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1660114687; x=1691650687; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=A/ZlGo3zpjuk778E1/ED3KGHxjh08nwub2H3vj2zISI=; b=P2fTuW1FtH8za7K98G9YMqxvvnKLr616/+KWMMHmhttjaxQhRKrPn2fN NnZzDQYZ/e9w6QxrsdjeVKaYEv9fm2sDx1O9xfZExRI5GgX7MvK2bknuL S0pkvNCQBceFJxtVM2CPYHl7hLksC7LFw8rG0hw+wxKh8A8nRXsXQiSHL Dasnli8aPQtVGbQ5b4mWPWQdXHQOZBL0glKaFD/QZGUfGPRr7qj77L9UC +pqd13F+MHgDz5/BhC2KDb4FFDawzNXLvDQcF0dhRtLXqxh9tv3ZgGh7u 2wOHOgnwpnDRtOceB5np6vlmluPpQM5RMbEIZIdS4nvb834JGz+CUIX+K A==; X-IronPort-AV: E=McAfee;i="6400,9594,10434"; a="270789380" X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="270789380" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 23:58:06 -0700 X-IronPort-AV: E=Sophos;i="5.93,226,1654585200"; d="scan'208";a="581118687" Received: from intel-cd-odc-steve.cd.intel.com ([10.240.178.194]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Aug 2022 23:58:03 -0700 From: Steve Yang To: dev@dpdk.org Cc: jingjing.wu@intel.com, beilei.xing@intel.com, Steve Yang , stable@dpdk.org Subject: [PATCH v1] net/iavf: fix pattern check for flow director parser Date: Wed, 10 Aug 2022 06:47:51 +0000 Message-Id: <20220810064751.484242-1-stevex.yang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 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 FDIR rules with masks are not supported in current code. Thus add pattern check for IPv4/UDP/TCP/SCTP addr/port to terminate the FDIR programming stage. Fixes: d5eb3e600d9e ("net/iavf: support flow director basic rule") Cc: stable@dpdk.org Signed-off-by: Steve Yang Acked-by: Qi Zhang --- drivers/net/iavf/iavf_fdir.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/net/iavf/iavf_fdir.c b/drivers/net/iavf/iavf_fdir.c index 2e6b3a9097..a397047fdb 100644 --- a/drivers/net/iavf/iavf_fdir.c +++ b/drivers/net/iavf/iavf_fdir.c @@ -932,6 +932,14 @@ iavf_fdir_parse_pattern(__rte_unused struct iavf_adapter *ad, return -rte_errno; } + /* Mask for IPv4 src/dst addrs not supported */ + if (ipv4_mask->hdr.src_addr && + ipv4_mask->hdr.src_addr != UINT32_MAX) + return -rte_errno; + if (ipv4_mask->hdr.dst_addr && + ipv4_mask->hdr.dst_addr != UINT32_MAX) + return -rte_errno; + if (ipv4_mask->hdr.type_of_service == UINT8_MAX) { input_set |= IAVF_INSET_IPV4_TOS; @@ -1122,6 +1130,14 @@ iavf_fdir_parse_pattern(__rte_unused struct iavf_adapter *ad, return -rte_errno; } + /* Mask for UDP src/dst ports not supported */ + if (udp_mask->hdr.src_port && + udp_mask->hdr.src_port != UINT16_MAX) + return -rte_errno; + if (udp_mask->hdr.dst_port && + udp_mask->hdr.dst_port != UINT16_MAX) + return -rte_errno; + if (udp_mask->hdr.src_port == UINT16_MAX) { input_set |= IAVF_INSET_UDP_SRC_PORT; VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(hdr, UDP, SRC_PORT); @@ -1171,6 +1187,14 @@ iavf_fdir_parse_pattern(__rte_unused struct iavf_adapter *ad, return -rte_errno; } + /* Mask for TCP src/dst ports not supported */ + if (tcp_mask->hdr.src_port && + tcp_mask->hdr.src_port != UINT16_MAX) + return -rte_errno; + if (tcp_mask->hdr.dst_port && + tcp_mask->hdr.dst_port != UINT16_MAX) + return -rte_errno; + if (tcp_mask->hdr.src_port == UINT16_MAX) { input_set |= IAVF_INSET_TCP_SRC_PORT; VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(hdr, TCP, SRC_PORT); @@ -1214,6 +1238,14 @@ iavf_fdir_parse_pattern(__rte_unused struct iavf_adapter *ad, return -rte_errno; } + /* Mask for SCTP src/dst ports not supported */ + if (sctp_mask->hdr.src_port && + sctp_mask->hdr.src_port != UINT16_MAX) + return -rte_errno; + if (sctp_mask->hdr.dst_port && + sctp_mask->hdr.dst_port != UINT16_MAX) + return -rte_errno; + if (sctp_mask->hdr.src_port == UINT16_MAX) { input_set |= IAVF_INSET_SCTP_SRC_PORT; VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(hdr, SCTP, SRC_PORT);