From patchwork Fri Apr 3 04:46:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhao1, Wei" X-Patchwork-Id: 67732 X-Patchwork-Delegate: xiaolong.ye@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D3481A0562; Fri, 3 Apr 2020 07:09:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 617A31C0CE; Fri, 3 Apr 2020 07:07:48 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 0C9781C0C5 for ; Fri, 3 Apr 2020 07:07:46 +0200 (CEST) IronPort-SDR: AJ/Dj6+dklNQhEvx4q4QCzlL2CgqBDKjfEqRjtX6zNknkMRKPNrwYxL8yCIS4of/mOk6rZdp9C NytXd8dkVdZA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Apr 2020 22:07:46 -0700 IronPort-SDR: L4uGD8/kHu3PdOs90QNAfu36MbGYPugfKsyhOEto8C03UY+elM5cAhgnQaADArlc+C71TOvpik xUhiitUu826Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,338,1580803200"; d="scan'208";a="451178833" Received: from unknown (HELO localhost.localdomain.bj.intel.com) ([172.16.182.123]) by fmsmga006.fm.intel.com with ESMTP; 02 Apr 2020 22:07:45 -0700 From: Wei Zhao To: dev@dpdk.org Cc: qi.z.zhang@intel.com, nannan.lu@intel.com, qi.fu@intel.com, yuan.peng@intel.com, Wei Zhao Date: Fri, 3 Apr 2020 12:46:05 +0800 Message-Id: <20200403044609.27512-10-wei.zhao1@intel.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20200403044609.27512-1-wei.zhao1@intel.com> References: <20200403024353.24681-1-wei.zhao1@intel.com> <20200403044609.27512-1-wei.zhao1@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 09/13] net/ice: add support for IPv6 NAT-T X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" This patch add switch filter support for IPv6 NAT-T packets, it enable swicth filter to direct ipv6 packets with NAT-T payload to specific action. Signed-off-by: Wei Zhao --- drivers/net/ice/ice_generic_flow.c | 14 ++++++++++++++ drivers/net/ice/ice_generic_flow.h | 2 ++ drivers/net/ice/ice_switch_filter.c | 19 +++++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c index 04dcaba08..3365aeb86 100644 --- a/drivers/net/ice/ice_generic_flow.c +++ b/drivers/net/ice/ice_generic_flow.c @@ -1394,6 +1394,20 @@ enum rte_flow_item_type pattern_eth_ipv6_ah[] = { RTE_FLOW_ITEM_TYPE_AH, RTE_FLOW_ITEM_TYPE_END, }; +enum rte_flow_item_type pattern_eth_ipv6_udp_esp[] = { + RTE_FLOW_ITEM_TYPE_ETH, + RTE_FLOW_ITEM_TYPE_IPV6, + RTE_FLOW_ITEM_TYPE_UDP, + RTE_FLOW_ITEM_TYPE_ESP, + RTE_FLOW_ITEM_TYPE_END, +}; +enum rte_flow_item_type pattern_eth_ipv6_udp_ah[] = { + RTE_FLOW_ITEM_TYPE_ETH, + RTE_FLOW_ITEM_TYPE_IPV6, + RTE_FLOW_ITEM_TYPE_UDP, + RTE_FLOW_ITEM_TYPE_AH, + RTE_FLOW_ITEM_TYPE_END, +}; enum rte_flow_item_type pattern_eth_ipv6_l2tp[] = { RTE_FLOW_ITEM_TYPE_ETH, RTE_FLOW_ITEM_TYPE_IPV6, diff --git a/drivers/net/ice/ice_generic_flow.h b/drivers/net/ice/ice_generic_flow.h index 8a866d2ee..9fe35df45 100644 --- a/drivers/net/ice/ice_generic_flow.h +++ b/drivers/net/ice/ice_generic_flow.h @@ -393,9 +393,11 @@ extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[]; /* ESP */ extern enum rte_flow_item_type pattern_eth_ipv6_esp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_udp_esp[]; /* AH */ extern enum rte_flow_item_type pattern_eth_ipv6_ah[]; +extern enum rte_flow_item_type pattern_eth_ipv6_udp_ah[]; /* L2TP */ extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[]; diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c index 9b4b9346c..4248b8911 100644 --- a/drivers/net/ice/ice_switch_filter.c +++ b/drivers/net/ice/ice_switch_filter.c @@ -150,8 +150,12 @@ ice_pattern_match_item ice_switch_pattern_dist_comms[] = { ICE_SW_INSET_MAC_PPPOE_PROTO, ICE_INSET_NONE}, {pattern_eth_ipv6_esp, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_esp, + ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_ah, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_ah, + ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_l2tp, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv4_pfcp, @@ -224,8 +228,12 @@ ice_pattern_match_item ice_switch_pattern_perm[] = { ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE}, {pattern_eth_ipv6_esp, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_esp, + ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_ah, ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_ah, + ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv6_l2tp, ICE_INSET_NONE, ICE_INSET_NONE}, {pattern_eth_ipv4_pfcp, @@ -364,6 +372,7 @@ ice_switch_inset_get(const struct rte_flow_item pattern[], uint16_t tunnel_valid = 0; uint16_t pppoe_valid = 0; uint16_t ipv6_valiad = 0; + uint16_t udp_valiad = 0; for (item = pattern; item->type != @@ -642,6 +651,7 @@ ice_switch_inset_get(const struct rte_flow_item pattern[], case RTE_FLOW_ITEM_TYPE_UDP: udp_spec = item->spec; udp_mask = item->mask; + udp_valiad = 1; if (udp_spec && udp_mask) { /* Check UDP mask and update input set*/ if (udp_mask->hdr.dgram_len || @@ -974,7 +984,9 @@ ice_switch_inset_get(const struct rte_flow_item pattern[], "Invalid esp item"); return -ENOTSUP; } - if (ipv6_valiad) + if (ipv6_valiad && udp_valiad) + *tun_type = ICE_SW_TUN_PROFID_IPV6_NAT_T; + else if (ipv6_valiad) *tun_type = ICE_SW_TUN_PROFID_IPV6_ESP; break; @@ -988,7 +1000,9 @@ ice_switch_inset_get(const struct rte_flow_item pattern[], "Invalid ah item"); return -ENOTSUP; } - if (ipv6_valiad) + if (ipv6_valiad && udp_valiad) + *tun_type = ICE_SW_TUN_PROFID_IPV6_NAT_T; + else if (ipv6_valiad) *tun_type = ICE_SW_TUN_PROFID_IPV6_AH; break; @@ -1237,6 +1251,7 @@ ice_is_profile_rule(enum ice_sw_tunnel_type tun_type) case ICE_SW_TUN_PROFID_IPV6_ESP: case ICE_SW_TUN_PROFID_IPV6_AH: case ICE_SW_TUN_PROFID_MAC_IPV6_L2TPV3: + case ICE_SW_TUN_PROFID_IPV6_NAT_T: case ICE_SW_TUN_PROFID_IPV4_PFCP_NODE: case ICE_SW_TUN_PROFID_IPV4_PFCP_SESSION: case ICE_SW_TUN_PROFID_IPV6_PFCP_NODE: