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 2274FA09EF; Wed, 16 Dec 2020 10:02:47 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 644FFC9D3; Wed, 16 Dec 2020 10:01:55 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id BA071C9C2 for ; Wed, 16 Dec 2020 10:01:53 +0100 (CET) IronPort-SDR: l0IQl4WUQxTqSfqqBHDfTiEFiERTboTg0PcFRyMSlYsmJHytQ6GzrjaC6rYTJ2x7EG0HKwtsre wSj76bvsNdsw== X-IronPort-AV: E=McAfee;i="6000,8403,9836"; a="175135857" X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="175135857" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Dec 2020 01:01:51 -0800 IronPort-SDR: tPtaDfF73Nw1TqhXpu0VKywcDbChWBINTsibMJX/2po6pP9oIyCQZb+Ck65rB2UIWY95xpp5r4 oUEkdJzXIMTA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,424,1599548400"; d="scan'208";a="368826960" Received: from npg-dpdk-cvl-jeffguo-01.sh.intel.com ([10.67.111.128]) by orsmga008.jf.intel.com with ESMTP; 16 Dec 2020 01:01:49 -0800 From: Jeff Guo To: qi.z.zhang@intel.com, jingjing.wu@intel.com, qiming.yang@intel.com, haiyue.wang@intel.com Cc: dev@dpdk.org, jia.guo@intel.com Date: Wed, 16 Dec 2020 16:58:52 +0800 Message-Id: <20201216085854.7842-4-jia.guo@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201216085854.7842-1-jia.guo@intel.com> References: <20201216085854.7842-1-jia.guo@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [dpdk-dev 21.02 3/5] net/ice: add ecpri package type 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" Add new ecpri package type and process the new package type when handle each flow engines. Signed-off-by: Jeff Guo --- drivers/net/ice/ice_ethdev.c | 7 +- drivers/net/ice/ice_ethdev.h | 1 + drivers/net/ice/ice_fdir_filter.c | 66 +++++++++++++++ drivers/net/ice/ice_hash.c | 111 +++++++++++++++++++++++++ drivers/net/ice/ice_rxtx.c | 32 +++++++ drivers/net/ice/ice_switch_filter.c | 124 ++++++++++++++++++++++++++++ 6 files changed, 340 insertions(+), 1 deletion(-) diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 9a5d6a559f..ae1a22572f 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -71,7 +71,8 @@ static struct proto_xtr_ol_flag ice_proto_xtr_ol_flag_params[] = { #define ICE_DFLT_OUTER_TAG_TYPE ICE_AQ_VSI_OUTER_TAG_VLAN_9100 #define ICE_OS_DEFAULT_PKG_NAME "ICE OS Default Package" -#define ICE_COMMS_PKG_NAME "ICE COMMS Package" +#define ICE_COMMS_PKG_NAME "ICE COMMS Package" +#define ICE_WIRELESS_EDGE_PKG_NAME "ICE Wireless Edge Package" #define ICE_MAX_RES_DESC_NUM 1024 static int ice_dev_configure(struct rte_eth_dev *dev); @@ -1807,6 +1808,10 @@ ice_load_pkg_type(struct ice_hw *hw) else if (!strncmp((char *)hw->active_pkg_name, ICE_COMMS_PKG_NAME, ICE_PKG_NAME_SIZE)) package_type = ICE_PKG_TYPE_COMMS; + else if (!strncmp((char *)hw->active_pkg_name, + ICE_WIRELESS_EDGE_PKG_NAME, + ICE_PKG_NAME_SIZE)) + package_type = ICE_PKG_TYPE_WIRELESS_EDGE; else package_type = ICE_PKG_TYPE_UNKNOWN; diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h index 899f446cde..7f8d0e9087 100644 --- a/drivers/net/ice/ice_ethdev.h +++ b/drivers/net/ice/ice_ethdev.h @@ -147,6 +147,7 @@ enum ice_pkg_type { ICE_PKG_TYPE_UNKNOWN, ICE_PKG_TYPE_OS_DEFAULT, ICE_PKG_TYPE_COMMS, + ICE_PKG_TYPE_WIRELESS_EDGE, }; struct ice_adapter; diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c index 175abcdd5c..5ca74bfb71 100644 --- a/drivers/net/ice/ice_fdir_filter.c +++ b/drivers/net/ice/ice_fdir_filter.c @@ -143,8 +143,62 @@ static struct ice_pattern_match_item ice_fdir_pattern_comms[] = { {pattern_eth_ipv6_gtpu_eh, ICE_FDIR_INSET_IPV6_GTPU_EH, ICE_INSET_NONE}, }; +static struct ice_pattern_match_item ice_fdir_pattern_wireless_edge[] = { + {pattern_ethertype, ICE_FDIR_INSET_ETH, + ICE_INSET_NONE}, + {pattern_eth_ipv4, ICE_FDIR_INSET_ETH_IPV4, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp, ICE_FDIR_INSET_ETH_IPV4_UDP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_tcp, ICE_FDIR_INSET_ETH_IPV4_TCP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_sctp, ICE_FDIR_INSET_ETH_IPV4_SCTP, + ICE_INSET_NONE}, + {pattern_eth_ipv6, ICE_FDIR_INSET_ETH_IPV6, + ICE_INSET_NONE}, + {pattern_eth_ipv6_udp, ICE_FDIR_INSET_ETH_IPV6_UDP, + ICE_INSET_NONE}, + {pattern_eth_ipv6_tcp, ICE_FDIR_INSET_ETH_IPV6_TCP, + ICE_INSET_NONE}, + {pattern_eth_ipv6_sctp, ICE_FDIR_INSET_ETH_IPV6_SCTP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_ipv4, + ICE_FDIR_INSET_VXLAN_IPV4, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_ipv4_udp, + ICE_FDIR_INSET_VXLAN_IPV4_UDP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_ipv4_tcp, + ICE_FDIR_INSET_VXLAN_IPV4_TCP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_ipv4_sctp, + ICE_FDIR_INSET_VXLAN_IPV4_SCTP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4, + ICE_FDIR_INSET_VXLAN_IPV4, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, + ICE_FDIR_INSET_VXLAN_IPV4_UDP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, + ICE_FDIR_INSET_VXLAN_IPV4_TCP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, + ICE_FDIR_INSET_VXLAN_IPV4_SCTP, + ICE_INSET_NONE}, + {pattern_eth_ipv4_gtpu, ICE_FDIR_INSET_IPV4_GTPU, + ICE_INSET_NONE}, + {pattern_eth_ipv4_gtpu_eh, ICE_FDIR_INSET_IPV4_GTPU_EH, + ICE_INSET_NONE}, + {pattern_eth_ipv6_gtpu, ICE_FDIR_INSET_IPV6_GTPU, + ICE_INSET_NONE}, + {pattern_eth_ipv6_gtpu_eh, ICE_FDIR_INSET_IPV6_GTPU_EH, + ICE_INSET_NONE}, +}; + static struct ice_flow_parser ice_fdir_parser_os; static struct ice_flow_parser ice_fdir_parser_comms; +static struct ice_flow_parser ice_fdir_parser_wireless_edge; static int ice_fdir_is_tunnel_profile(enum ice_fdir_tunnel_type tunnel_type); @@ -1113,6 +1167,8 @@ ice_fdir_init(struct ice_adapter *ad) if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) parser = &ice_fdir_parser_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + parser = &ice_fdir_parser_wireless_edge; else if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) parser = &ice_fdir_parser_os; else @@ -1132,6 +1188,8 @@ ice_fdir_uninit(struct ice_adapter *ad) if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) parser = &ice_fdir_parser_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + parser = &ice_fdir_parser_wireless_edge; else parser = &ice_fdir_parser_os; @@ -2083,6 +2141,14 @@ static struct ice_flow_parser ice_fdir_parser_comms = { .stage = ICE_FLOW_STAGE_DISTRIBUTOR, }; +static struct ice_flow_parser ice_fdir_parser_wireless_edge = { + .engine = &ice_fdir_engine, + .array = ice_fdir_pattern_wireless_edge, + .array_len = RTE_DIM(ice_fdir_pattern_wireless_edge), + .parse_pattern_action = ice_fdir_parse, + .stage = ICE_FLOW_STAGE_DISTRIBUTOR, +}; + RTE_INIT(ice_fdir_engine_register) { ice_register_flow_engine(&ice_fdir_engine); diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index fe3e06c579..a52ede0173 100644 --- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c @@ -446,6 +446,104 @@ static struct ice_pattern_match_item ice_hash_pattern_list_comms[] = { &hint_eth_pppoes}, }; +/* Supported pattern for wireless edge package. */ +static struct ice_pattern_match_item ice_hash_pattern_list_wireless_edge[] = { + {pattern_empty, ICE_INSET_NONE, + &hint_empty}, + {pattern_eth_ipv4, ICE_INSET_NONE, + &hint_eth_ipv4}, + {pattern_eth_ipv4_udp, ICE_INSET_NONE, + &hint_eth_ipv4_udp}, + {pattern_eth_ipv4_tcp, ICE_INSET_NONE, + &hint_eth_ipv4_tcp}, + {pattern_eth_ipv4_sctp, ICE_INSET_NONE, + &hint_eth_ipv4_sctp}, + {pattern_eth_ipv4_gtpu_ipv4, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_ipv4}, + {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_ipv4_udp}, + {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_ipv4_tcp}, + {pattern_eth_ipv4_gtpu_ipv6, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_ipv6}, + {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_ipv6_udp}, + {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_ipv6_tcp}, + {pattern_eth_ipv6_gtpu_ipv4, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_ipv4}, + {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_ipv4_udp}, + {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_ipv4_tcp}, + {pattern_eth_ipv6_gtpu_ipv6, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_ipv6}, + {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_ipv6_udp}, + {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_ipv6_tcp}, + {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_eh_ipv4}, + {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_eh_ipv4_udp}, + {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_eh_ipv4_tcp}, + {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_eh_ipv6}, + {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_eh_ipv6_udp}, + {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_INSET_NONE, + &hint_eth_ipv4_gtpu_eh_ipv6_tcp}, + {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_eh_ipv4}, + {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_eh_ipv4_udp}, + {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_eh_ipv4_tcp}, + {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_eh_ipv6}, + {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_eh_ipv6_udp}, + {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_INSET_NONE, + &hint_eth_ipv6_gtpu_eh_ipv6_tcp}, + {pattern_eth_ipv4_esp, ICE_INSET_NONE, + &hint_eth_ipv4_esp}, + {pattern_eth_ipv4_udp_esp, ICE_INSET_NONE, + &hint_eth_ipv4_udp_esp}, + {pattern_eth_ipv4_ah, ICE_INSET_NONE, + &hint_eth_ipv4_ah}, + {pattern_eth_vlan_ipv4, ICE_INSET_NONE, + &hint_eth_vlan_ipv4}, + {pattern_eth_vlan_ipv4_udp, ICE_INSET_NONE, + &hint_eth_vlan_ipv4_udp}, + {pattern_eth_vlan_ipv4_tcp, ICE_INSET_NONE, + &hint_eth_vlan_ipv4_tcp}, + {pattern_eth_vlan_ipv4_sctp, ICE_INSET_NONE, + &hint_eth_vlan_ipv4_sctp}, + {pattern_eth_ipv6, ICE_INSET_NONE, + &hint_eth_ipv6}, + {pattern_eth_ipv6_udp, ICE_INSET_NONE, + &hint_eth_ipv6_udp}, + {pattern_eth_ipv6_tcp, ICE_INSET_NONE, + &hint_eth_ipv6_tcp}, + {pattern_eth_ipv6_sctp, ICE_INSET_NONE, + &hint_eth_ipv6_sctp}, + {pattern_eth_ipv6_esp, ICE_INSET_NONE, + &hint_eth_ipv6_esp}, + {pattern_eth_ipv6_udp_esp, ICE_INSET_NONE, + &hint_eth_ipv6_udp_esp}, + {pattern_eth_ipv6_ah, ICE_INSET_NONE, + &hint_eth_ipv6_ah}, + {pattern_eth_vlan_ipv6, ICE_INSET_NONE, + &hint_eth_vlan_ipv6}, + {pattern_eth_vlan_ipv6_udp, ICE_INSET_NONE, + &hint_eth_vlan_ipv6_udp}, + {pattern_eth_vlan_ipv6_tcp, ICE_INSET_NONE, + &hint_eth_vlan_ipv6_tcp}, + {pattern_eth_vlan_ipv6_sctp, ICE_INSET_NONE, + &hint_eth_vlan_ipv6_sctp}, +}; + /** * The first member is input set combination, * the second member is hash fields. @@ -932,6 +1030,15 @@ static struct ice_flow_parser ice_hash_parser_comms = { .stage = ICE_FLOW_STAGE_RSS, }; +/* Register parser for wireless edge package. */ +static struct ice_flow_parser ice_hash_parser_wireless_edge = { + .engine = &ice_hash_engine, + .array = ice_hash_pattern_list_wireless_edge, + .array_len = RTE_DIM(ice_hash_pattern_list_wireless_edge), + .parse_pattern_action = ice_hash_parse_pattern_action, + .stage = ICE_FLOW_STAGE_RSS, +}; + RTE_INIT(ice_hash_engine_init) { struct ice_flow_engine *engine = &ice_hash_engine; @@ -950,6 +1057,8 @@ ice_hash_init(struct ice_adapter *ad) parser = &ice_hash_parser_os; else if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) parser = &ice_hash_parser_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + parser = &ice_hash_parser_wireless_edge; else return -EINVAL; @@ -1356,6 +1465,8 @@ ice_hash_uninit(struct ice_adapter *ad) ice_unregister_parser(&ice_hash_parser_os, ad); else if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) ice_unregister_parser(&ice_hash_parser_comms, ad); + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + ice_unregister_parser(&ice_hash_parser_wireless_edge, ad); } static void diff --git a/drivers/net/ice/ice_rxtx.c b/drivers/net/ice/ice_rxtx.c index d052bd0f1b..0cf7d6abb8 100644 --- a/drivers/net/ice/ice_rxtx.c +++ b/drivers/net/ice/ice_rxtx.c @@ -1948,8 +1948,40 @@ ice_dev_supported_ptypes_get(struct rte_eth_dev *dev) RTE_PTYPE_UNKNOWN }; + static const uint32_t ptypes_wireless_edge[] = { + /* refers to ice_get_default_pkt_type() */ + RTE_PTYPE_L2_ETHER, + RTE_PTYPE_L2_ETHER_TIMESYNC, + RTE_PTYPE_L2_ETHER_LLDP, + RTE_PTYPE_L2_ETHER_ARP, + RTE_PTYPE_L3_IPV4_EXT_UNKNOWN, + RTE_PTYPE_L3_IPV6_EXT_UNKNOWN, + RTE_PTYPE_L4_FRAG, + RTE_PTYPE_L4_ICMP, + RTE_PTYPE_L4_NONFRAG, + RTE_PTYPE_L4_SCTP, + RTE_PTYPE_L4_TCP, + RTE_PTYPE_L4_UDP, + RTE_PTYPE_TUNNEL_GRENAT, + RTE_PTYPE_TUNNEL_IP, + RTE_PTYPE_INNER_L2_ETHER, + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN, + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN, + RTE_PTYPE_INNER_L4_FRAG, + RTE_PTYPE_INNER_L4_ICMP, + RTE_PTYPE_INNER_L4_NONFRAG, + RTE_PTYPE_INNER_L4_SCTP, + RTE_PTYPE_INNER_L4_TCP, + RTE_PTYPE_INNER_L4_UDP, + RTE_PTYPE_TUNNEL_GTPC, + RTE_PTYPE_TUNNEL_GTPU, + RTE_PTYPE_UNKNOWN + }; + if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) ptypes = ptypes_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + ptypes = ptypes_wireless_edge; else ptypes = ptypes_os; diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c index 8cba6eb7b1..dc8578d5aa 100644 --- a/drivers/net/ice/ice_switch_filter.c +++ b/drivers/net/ice/ice_switch_filter.c @@ -139,8 +139,10 @@ struct sw_meta { static struct ice_flow_parser ice_switch_dist_parser_os; static struct ice_flow_parser ice_switch_dist_parser_comms; +static struct ice_flow_parser ice_switch_dist_parser_wireless_edge; static struct ice_flow_parser ice_switch_perm_parser_os; static struct ice_flow_parser ice_switch_perm_parser_comms; +static struct ice_flow_parser ice_switch_perm_parser_wireless_edge; static struct ice_pattern_match_item ice_switch_pattern_dist_os[] = { @@ -264,6 +266,54 @@ ice_pattern_match_item ice_switch_pattern_dist_comms[] = { ICE_INSET_NONE, ICE_INSET_NONE}, }; +static struct +ice_pattern_match_item ice_switch_pattern_dist_wireless_edge[] = { + {pattern_ethertype, + ICE_SW_INSET_ETHER, ICE_INSET_NONE}, + {pattern_ethertype_vlan, + ICE_SW_INSET_MAC_VLAN, ICE_INSET_NONE}, + {pattern_eth_arp, + ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv4, + ICE_SW_INSET_MAC_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp, + ICE_SW_INSET_MAC_IPV4_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv4_tcp, + ICE_SW_INSET_MAC_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv6, + ICE_SW_INSET_MAC_IPV6, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp, + ICE_SW_INSET_MAC_IPV6_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv6_tcp, + ICE_SW_INSET_MAC_IPV6_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4, + ICE_SW_INSET_DIST_VXLAN_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, + ICE_SW_INSET_DIST_VXLAN_IPV4_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, + ICE_SW_INSET_DIST_VXLAN_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_nvgre_eth_ipv4, + ICE_SW_INSET_DIST_NVGRE_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv4_nvgre_eth_ipv4_udp, + ICE_SW_INSET_DIST_NVGRE_IPV4_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, + ICE_SW_INSET_DIST_NVGRE_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_esp, + ICE_SW_INSET_MAC_IPV4_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_esp, + ICE_SW_INSET_MAC_IPV4_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv6_esp, + ICE_SW_INSET_MAC_IPV6_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_esp, + ICE_SW_INSET_MAC_IPV6_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv4_ah, + ICE_SW_INSET_MAC_IPV4_AH, ICE_INSET_NONE}, + {pattern_eth_ipv6_ah, + ICE_SW_INSET_MAC_IPV6_AH, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_ah, + ICE_INSET_NONE, ICE_INSET_NONE}, +}; + static struct ice_pattern_match_item ice_switch_pattern_perm_os[] = { {pattern_ethertype, @@ -386,6 +436,54 @@ ice_pattern_match_item ice_switch_pattern_perm_comms[] = { ICE_INSET_NONE, ICE_INSET_NONE}, }; +static struct +ice_pattern_match_item ice_switch_pattern_perm_wireless_edge[] = { + {pattern_ethertype, + ICE_SW_INSET_ETHER, ICE_INSET_NONE}, + {pattern_ethertype_vlan, + ICE_SW_INSET_MAC_VLAN, ICE_INSET_NONE}, + {pattern_eth_arp, + ICE_INSET_NONE, ICE_INSET_NONE}, + {pattern_eth_ipv4, + ICE_SW_INSET_MAC_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp, + ICE_SW_INSET_MAC_IPV4_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv4_tcp, + ICE_SW_INSET_MAC_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv6, + ICE_SW_INSET_MAC_IPV6, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp, + ICE_SW_INSET_MAC_IPV6_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv6_tcp, + ICE_SW_INSET_MAC_IPV6_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4, + ICE_SW_INSET_PERM_TUNNEL_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, + ICE_SW_INSET_PERM_TUNNEL_IPV4_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, + ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_nvgre_eth_ipv4, + ICE_SW_INSET_PERM_TUNNEL_IPV4, ICE_INSET_NONE}, + {pattern_eth_ipv4_nvgre_eth_ipv4_udp, + ICE_SW_INSET_PERM_TUNNEL_IPV4_UDP, ICE_INSET_NONE}, + {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, + ICE_SW_INSET_PERM_TUNNEL_IPV4_TCP, ICE_INSET_NONE}, + {pattern_eth_ipv4_esp, + ICE_SW_INSET_MAC_IPV4_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv4_udp_esp, + ICE_SW_INSET_MAC_IPV4_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv6_esp, + ICE_SW_INSET_MAC_IPV6_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_esp, + ICE_SW_INSET_MAC_IPV6_ESP, ICE_INSET_NONE}, + {pattern_eth_ipv4_ah, + ICE_SW_INSET_MAC_IPV4_AH, ICE_INSET_NONE}, + {pattern_eth_ipv6_ah, + ICE_SW_INSET_MAC_IPV6_AH, ICE_INSET_NONE}, + {pattern_eth_ipv6_udp_ah, + ICE_INSET_NONE, ICE_INSET_NONE}, +}; + static int ice_switch_create(struct ice_adapter *ad, struct rte_flow *flow, @@ -1861,6 +1959,8 @@ ice_switch_init(struct ice_adapter *ad) if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) dist_parser = &ice_switch_dist_parser_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + dist_parser = &ice_switch_dist_parser_wireless_edge; else if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) dist_parser = &ice_switch_dist_parser_os; else @@ -1869,6 +1969,8 @@ ice_switch_init(struct ice_adapter *ad) if (ad->devargs.pipe_mode_support) { if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) perm_parser = &ice_switch_perm_parser_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + perm_parser = &ice_switch_perm_parser_wireless_edge; else perm_parser = &ice_switch_perm_parser_os; @@ -1887,6 +1989,8 @@ ice_switch_uninit(struct ice_adapter *ad) if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) dist_parser = &ice_switch_dist_parser_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + dist_parser = &ice_switch_dist_parser_wireless_edge; else if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT) dist_parser = &ice_switch_dist_parser_os; else @@ -1895,6 +1999,8 @@ ice_switch_uninit(struct ice_adapter *ad) if (ad->devargs.pipe_mode_support) { if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS) perm_parser = &ice_switch_perm_parser_comms; + else if (ad->active_pkg_type == ICE_PKG_TYPE_WIRELESS_EDGE) + perm_parser = &ice_switch_perm_parser_wireless_edge; else perm_parser = &ice_switch_perm_parser_os; @@ -1934,6 +2040,15 @@ ice_flow_parser ice_switch_dist_parser_comms = { .stage = ICE_FLOW_STAGE_DISTRIBUTOR, }; +static struct +ice_flow_parser ice_switch_dist_parser_wireless_edge = { + .engine = &ice_switch_engine, + .array = ice_switch_pattern_dist_wireless_edge, + .array_len = RTE_DIM(ice_switch_pattern_dist_wireless_edge), + .parse_pattern_action = ice_switch_parse_pattern_action, + .stage = ICE_FLOW_STAGE_DISTRIBUTOR, +}; + static struct ice_flow_parser ice_switch_perm_parser_os = { .engine = &ice_switch_engine, @@ -1952,6 +2067,15 @@ ice_flow_parser ice_switch_perm_parser_comms = { .stage = ICE_FLOW_STAGE_PERMISSION, }; +static struct +ice_flow_parser ice_switch_perm_parser_wireless_edge = { + .engine = &ice_switch_engine, + .array = ice_switch_pattern_perm_wireless_edge, + .array_len = RTE_DIM(ice_switch_pattern_perm_wireless_edge), + .parse_pattern_action = ice_switch_parse_pattern_action, + .stage = ICE_FLOW_STAGE_PERMISSION, +}; + RTE_INIT(ice_sw_engine_init) { struct ice_flow_engine *engine = &ice_switch_engine; -- 2.20.1