From patchwork Tue Aug 24 07:02:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Yuying" X-Patchwork-Id: 97268 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 EEE42A0C46; Tue, 24 Aug 2021 09:18:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AACC341136; Tue, 24 Aug 2021 09:18:55 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id CE758410E3 for ; Tue, 24 Aug 2021 09:18:53 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10085"; a="217256469" X-IronPort-AV: E=Sophos;i="5.84,346,1620716400"; d="scan'208";a="217256469" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Aug 2021 00:18:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,346,1620716400"; d="scan'208";a="535679544" Received: from dpdk-yyzhang2.sh.intel.com ([10.67.117.158]) by fmsmga002.fm.intel.com with ESMTP; 24 Aug 2021 00:18:51 -0700 From: Yuying Zhang To: dev@dpdk.org, qi.z.zhang@intel.com, junfeng.guo@intel.com Cc: Yuying Zhang Date: Tue, 24 Aug 2021 07:02:17 +0000 Message-Id: <20210824070217.2778744-2-yuying.zhang@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210824070217.2778744-1-yuying.zhang@intel.com> References: <20210824070217.2778744-1-yuying.zhang@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH RFC 2/2] net/ice: add support of VXLAN in switch filter 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 Sender: "dev" Add support of ipv4/ipv6 vxlan any pattern and outer/inner ipv6 vxlan pattern in switch filter. All patterns support no input set. +-------------------------------------+--------------------------------+ | Pattern | Input Set | +-------------------------------------+--------------------------------+ | pattern_eth_ipv4_udp_vxlan_any | dst mac | | pattern_eth_ipv6_udp_vxlan_any | dst mac | | pattern_eth_ipv4_udp_vxlan_eth_ipv4 | dst mac, vni, inner dst/src ip | | pattern_eth_ipv4_udp_vxlan_eth_ipv6 | dst mac, vni, inner dst/src ip | | pattern_eth_ipv6_udp_vxlan_eth_ipv4 | dst mac, vni, inner dst/src ip | | pattern_eth_ipv6_udp_vxlan_eth_ipv6 | dst mac, vni, inner dst/src ip | +-------------------------------------+--------------------------------+ Signed-off-by: Yuying Zhang --- drivers/net/ice/ice_generic_flow.c | 33 +++++++++++++++++++++--- drivers/net/ice/ice_generic_flow.h | 6 +++++ drivers/net/ice/ice_switch_filter.c | 40 ++++++++++++++++++++++++++--- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c index 66b5743abf..29a5df69cb 100644 --- a/drivers/net/ice/ice_generic_flow.c +++ b/drivers/net/ice/ice_generic_flow.c @@ -364,6 +364,26 @@ enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[] = { RTE_FLOW_ITEM_TYPE_END, }; +/* IPv4 VXLAN ANY */ +enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_any[] = { + RTE_FLOW_ITEM_TYPE_ETH, + RTE_FLOW_ITEM_TYPE_IPV4, + RTE_FLOW_ITEM_TYPE_UDP, + RTE_FLOW_ITEM_TYPE_VXLAN, + RTE_FLOW_ITEM_TYPE_ANY, + RTE_FLOW_ITEM_TYPE_END, +}; + +/* IPv6 VXLAN ANY */ +enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_any[] = { + RTE_FLOW_ITEM_TYPE_ETH, + RTE_FLOW_ITEM_TYPE_IPV6, + RTE_FLOW_ITEM_TYPE_UDP, + RTE_FLOW_ITEM_TYPE_VXLAN, + RTE_FLOW_ITEM_TYPE_ANY, + RTE_FLOW_ITEM_TYPE_END, +}; + /* IPv4 VXLAN MAC IPv4 */ enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[] = { RTE_FLOW_ITEM_TYPE_ETH, @@ -2162,14 +2182,19 @@ static struct ice_ptype_match ice_ptype_map[] = { {pattern_eth_qinq_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY}, {pattern_eth_vlan_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP}, {pattern_eth_vlan_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY}, + {pattern_eth_ipv4_udp_vxlan_any, ICE_MAC_IPV4_TUN_IPV4_PAY}, + {pattern_eth_ipv6_udp_vxlan_any, ICE_MAC_IPV6_TUN_IPV4_PAY}, {pattern_eth_ipv4_udp_vxlan_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, {pattern_eth_ipv4_udp_vxlan_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, {pattern_eth_ipv4_udp_vxlan_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, {pattern_eth_ipv4_udp_vxlan_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, - {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_PAY}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_UDP_PAY}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_TCP}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, ICE_MAC_IPV4_TUN_ICE_MAC_IPV4_SCTP}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv6, ICE_MAC_IPV4_TUN_ICE_MAC_IPV6_PAY}, + {pattern_eth_ipv6_udp_vxlan_eth_ipv4, ICE_MAC_IPV6_TUN_MAC_IPV4_PAY}, + {pattern_eth_ipv6_udp_vxlan_eth_ipv6, ICE_MAC_IPV6_TUN_MAC_IPV6_PAY}, {pattern_eth_ipv4_nvgre_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, {pattern_eth_ipv4_nvgre_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, diff --git a/drivers/net/ice/ice_generic_flow.h b/drivers/net/ice/ice_generic_flow.h index 8845a3e156..f998ee7d71 100644 --- a/drivers/net/ice/ice_generic_flow.h +++ b/drivers/net/ice/ice_generic_flow.h @@ -176,6 +176,12 @@ extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_tcp[]; extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_sctp[]; extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[]; +/* IPv4 VXLAN ANY */ +extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_any[]; + +/* IPv6 VXLAN ANY */ +extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_any[]; + /* IPv4 VXLAN MAC IPv4 */ extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[]; extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp[]; diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c index f222cb9cb0..a41de6e23a 100644 --- a/drivers/net/ice/ice_switch_filter.c +++ b/drivers/net/ice/ice_switch_filter.c @@ -72,6 +72,9 @@ #define ICE_SW_INSET_DIST_VXLAN_IPV4 ( \ ICE_INSET_IPV4_SRC | ICE_INSET_IPV4_DST | ICE_INSET_DMAC | \ ICE_INSET_VXLAN_VNI) +#define ICE_SW_INSET_DIST_VXLAN_IPV6 ( \ + ICE_INSET_IPV6_SRC | ICE_INSET_IPV6_DST | ICE_INSET_DMAC | \ + ICE_INSET_VXLAN_VNI) #define ICE_SW_INSET_DIST_NVGRE_IPV4_TCP ( \ ICE_INSET_IPV4_SRC | ICE_INSET_IPV4_DST | \ ICE_INSET_TCP_SRC_PORT | ICE_INSET_TCP_DST_PORT | \ @@ -99,6 +102,9 @@ ICE_INSET_IPV4_SRC | ICE_INSET_IPV4_DST | \ ICE_INSET_UDP_SRC_PORT | ICE_INSET_UDP_DST_PORT | \ ICE_INSET_IPV4_TOS) +#define ICE_SW_INSET_PERM_TUNNEL_IPV6 ( \ + ICE_INSET_IPV6_SRC | ICE_INSET_IPV6_DST | \ + ICE_INSET_IPV6_NEXT_HDR | ICE_INSET_IPV6_TC) #define ICE_SW_INSET_MAC_PPPOE ( \ ICE_INSET_VLAN_OUTER | ICE_INSET_VLAN_INNER | \ ICE_INSET_DMAC | ICE_INSET_ETHERTYPE | ICE_INSET_PPPOE_SESSION) @@ -182,9 +188,14 @@ ice_pattern_match_item ice_switch_pattern_dist_list[] = { {pattern_eth_ipv6, ICE_SW_INSET_MAC_IPV6, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_udp, ICE_SW_INSET_MAC_IPV6_UDP, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_tcp, ICE_SW_INSET_MAC_IPV6_TCP, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_any, ICE_INSET_DMAC, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_vxlan_any, ICE_INSET_DMAC, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_INSET_IPV4_DST, ICE_SW_INSET_DIST_VXLAN_IPV4, ICE_INSET_NONE}, {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_INSET_IPV4_DST, ICE_SW_INSET_DIST_VXLAN_IPV4_UDP, ICE_INSET_NONE}, {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_INSET_IPV4_DST, ICE_SW_INSET_DIST_VXLAN_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv6, ICE_INSET_DMAC, ICE_SW_INSET_DIST_VXLAN_IPV6, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_vxlan_eth_ipv4, ICE_INSET_DMAC, ICE_SW_INSET_DIST_VXLAN_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_vxlan_eth_ipv6, ICE_INSET_DMAC, ICE_SW_INSET_DIST_VXLAN_IPV6, ICE_INSET_NONE}, {pattern_eth_ipv4_nvgre_eth_ipv4, ICE_INSET_IPV4_DST, ICE_SW_INSET_DIST_NVGRE_IPV4, ICE_INSET_NONE}, {pattern_eth_ipv4_nvgre_eth_ipv4_udp, ICE_INSET_IPV4_DST, ICE_SW_INSET_DIST_NVGRE_IPV4_UDP, ICE_INSET_NONE}, {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, ICE_INSET_IPV4_DST, ICE_SW_INSET_DIST_NVGRE_IPV4_TCP, ICE_INSET_NONE}, @@ -261,9 +272,14 @@ ice_pattern_match_item ice_switch_pattern_perm_list[] = { {pattern_eth_ipv6, ICE_SW_INSET_MAC_IPV6, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_udp, ICE_SW_INSET_MAC_IPV6_UDP, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_tcp, ICE_SW_INSET_MAC_IPV6_TCP, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_any, ICE_INSET_NONE, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_vxlan_any, ICE_INSET_NONE, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV4, ICE_INSET_NONE}, {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV4_UDP, ICE_INSET_NONE}, {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv6, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV6, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_vxlan_eth_ipv4, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_vxlan_eth_ipv6, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV6, ICE_INSET_NONE}, {pattern_eth_ipv4_nvgre_eth_ipv4, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV4, ICE_INSET_NONE}, {pattern_eth_ipv4_nvgre_eth_ipv4_udp, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV4_UDP, ICE_INSET_NONE}, {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, ICE_INSET_NONE, ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE}, @@ -480,6 +496,7 @@ ice_switch_parse_pattern(const struct rte_flow_item pattern[], bool inner_ipv6_valid = 0; bool inner_tcp_valid = 0; bool inner_udp_valid = 0; + bool any_valid = 0; uint16_t j, k, t = 0; if (*tun_type == ICE_SW_TUN_AND_NON_TUN_QINQ || @@ -1371,6 +1388,10 @@ ice_switch_parse_pattern(const struct rte_flow_item pattern[], gtpu_psc_valid = 1; break; + case RTE_FLOW_ITEM_TYPE_ANY: + any_valid = 1; + break; + case RTE_FLOW_ITEM_TYPE_VOID: break; @@ -1486,10 +1507,23 @@ ice_switch_parse_pattern(const struct rte_flow_item pattern[], } } + if (vxlan_valid) { + if (ipv4_valid && inner_ipv4_valid) + *tun_type = ICE_SW_TUN_PROFID_IPV4_VXLAN_IPV4; + if (ipv4_valid && inner_ipv6_valid) + *tun_type = ICE_SW_TUN_PROFID_IPV4_VXLAN_IPV6; + if (ipv6_valid && inner_ipv4_valid) + *tun_type = ICE_SW_TUN_PROFID_IPV6_VXLAN_IPV4; + if (ipv6_valid && inner_ipv6_valid) + *tun_type = ICE_SW_TUN_PROFID_IPV6_VXLAN_IPV6; + if (ipv6_valid && any_valid) + *tun_type = ICE_SW_TUN_PROFID_IPV6_VXLAN; + if (ipv4_valid && any_valid) + *tun_type = ICE_SW_TUN_PROFID_IPV4_VXLAN; + } + if (*tun_type == ICE_NON_TUN) { - if (vxlan_valid) - *tun_type = ICE_SW_TUN_VXLAN; - else if (nvgre_valid) + if (nvgre_valid) *tun_type = ICE_SW_TUN_NVGRE; else if (ipv4_valid && tcp_valid) *tun_type = ICE_SW_IPV4_TCP;