From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D7B37A0562; Fri, 3 Apr 2020 05:06:31 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B41441C122; Fri, 3 Apr 2020 05:05:23 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 7154D1C120 for ; Fri, 3 Apr 2020 05:05:22 +0200 (CEST) IronPort-SDR: eYvNI5JyLWburfugxZxHKxp78OlAwvWZWbiJYJIq3YwA7BN8MbrLrEyJL10U988tg8YUoNyZ22 7abPuQvkgriQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Apr 2020 20:05:22 -0700 IronPort-SDR: DUSe3y4p6vGjf4FYjdRJ9GtLodlgujYlNl7Pvg3Dg1F8+cyzShHLLz6rlU/0fH7ZsrLrWXJPfe MtiJi12h+EBA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,337,1580803200"; d="scan'208";a="250034486" Received: from unknown (HELO localhost.localdomain.bj.intel.com) ([172.16.182.123]) by orsmga003.jf.intel.com with ESMTP; 02 Apr 2020 20:05:20 -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 10:43:49 +0800 Message-Id: <20200403024353.24681-10-wei.zhao1@intel.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20200403024353.24681-1-wei.zhao1@intel.com> References: <20200402064620.47668-1-wei.zhao1@intel.com> <20200403024353.24681-1-wei.zhao1@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v3 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 65cd64c7f..25badf192 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: -- 2.19.1