From: Jeff Guo <jia.guo@intel.com>
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, simei.su@intel.com
Subject: [dpdk-dev] [dpdk-dev v3 3/3] net/ice: refactor PTYPE parsing
Date: Tue, 12 Jan 2021 17:32:43 +0800 [thread overview]
Message-ID: <20210112093243.40840-4-jia.guo@intel.com> (raw)
In-Reply-To: <20210112093243.40840-1-jia.guo@intel.com>
If the capability of a PTYPE within a specific package could be
negotiated, no need to maintain a different PTYPE list for each
type of the package when parsing PTYPE. So refactor the PTYPE
parsing mechanism for each flow engines.
Signed-off-by: Jeff Guo <jia.guo@intel.com>
---
drivers/net/ice/ice_acl_filter.c | 3 +-
drivers/net/ice/ice_fdir_filter.c | 63 ++-----------
drivers/net/ice/ice_generic_flow.c | 132 ++++++++++++++++++++++++--
drivers/net/ice/ice_generic_flow.h | 9 +-
drivers/net/ice/ice_hash.c | 47 ++--------
drivers/net/ice/ice_switch_filter.c | 139 ++++------------------------
6 files changed, 165 insertions(+), 228 deletions(-)
diff --git a/drivers/net/ice/ice_acl_filter.c b/drivers/net/ice/ice_acl_filter.c
index f7dbe53574..363ce68318 100644
--- a/drivers/net/ice/ice_acl_filter.c
+++ b/drivers/net/ice/ice_acl_filter.c
@@ -914,7 +914,8 @@ ice_acl_parse(struct ice_adapter *ad,
int ret;
memset(filter, 0, sizeof(*filter));
- item = ice_search_pattern_match_item(pattern, array, array_len, error);
+ item = ice_search_pattern_match_item(ad, pattern, array, array_len,
+ error);
if (!item)
return -rte_errno;
diff --git a/drivers/net/ice/ice_fdir_filter.c b/drivers/net/ice/ice_fdir_filter.c
index 175abcdd5c..ce6aa09d3d 100644
--- a/drivers/net/ice/ice_fdir_filter.c
+++ b/drivers/net/ice/ice_fdir_filter.c
@@ -84,34 +84,7 @@
ICE_INSET_IPV6_SRC | ICE_INSET_IPV6_DST | \
ICE_INSET_GTPU_TEID | ICE_INSET_GTPU_QFI)
-static struct ice_pattern_match_item ice_fdir_pattern_os[] = {
- {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},
-};
-
-static struct ice_pattern_match_item ice_fdir_pattern_comms[] = {
+static struct ice_pattern_match_item ice_fdir_pattern_list[] = {
{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},
@@ -143,8 +116,7 @@ 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_flow_parser ice_fdir_parser_os;
-static struct ice_flow_parser ice_fdir_parser_comms;
+static struct ice_flow_parser ice_fdir_parser;
static int
ice_fdir_is_tunnel_profile(enum ice_fdir_tunnel_type tunnel_type);
@@ -1111,12 +1083,7 @@ ice_fdir_init(struct ice_adapter *ad)
if (ret)
return ret;
- if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS)
- parser = &ice_fdir_parser_comms;
- else if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT)
- parser = &ice_fdir_parser_os;
- else
- return -EINVAL;
+ parser = &ice_fdir_parser;
return ice_register_parser(parser, ad);
}
@@ -1124,16 +1091,13 @@ ice_fdir_init(struct ice_adapter *ad)
static void
ice_fdir_uninit(struct ice_adapter *ad)
{
- struct ice_pf *pf = &ad->pf;
struct ice_flow_parser *parser;
+ struct ice_pf *pf = &ad->pf;
if (ad->hw.dcf_enabled)
return;
- if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS)
- parser = &ice_fdir_parser_comms;
- else
- parser = &ice_fdir_parser_os;
+ parser = &ice_fdir_parser;
ice_unregister_parser(parser, ad);
@@ -2039,7 +2003,8 @@ ice_fdir_parse(struct ice_adapter *ad,
int ret;
memset(filter, 0, sizeof(*filter));
- item = ice_search_pattern_match_item(pattern, array, array_len, error);
+ item = ice_search_pattern_match_item(ad, pattern, array, array_len,
+ error);
if (!item)
return -rte_errno;
@@ -2067,18 +2032,10 @@ ice_fdir_parse(struct ice_adapter *ad,
return ret;
}
-static struct ice_flow_parser ice_fdir_parser_os = {
- .engine = &ice_fdir_engine,
- .array = ice_fdir_pattern_os,
- .array_len = RTE_DIM(ice_fdir_pattern_os),
- .parse_pattern_action = ice_fdir_parse,
- .stage = ICE_FLOW_STAGE_DISTRIBUTOR,
-};
-
-static struct ice_flow_parser ice_fdir_parser_comms = {
+static struct ice_flow_parser ice_fdir_parser = {
.engine = &ice_fdir_engine,
- .array = ice_fdir_pattern_comms,
- .array_len = RTE_DIM(ice_fdir_pattern_comms),
+ .array = ice_fdir_pattern_list,
+ .array_len = RTE_DIM(ice_fdir_pattern_list),
.parse_pattern_action = ice_fdir_parse,
.stage = ICE_FLOW_STAGE_DISTRIBUTOR,
};
diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c
index 1429cbc3b6..4313aae183 100644
--- a/drivers/net/ice/ice_generic_flow.c
+++ b/drivers/net/ice/ice_generic_flow.c
@@ -2046,17 +2046,127 @@ ice_match_pattern(enum rte_flow_item_type *item_array,
item->type == RTE_FLOW_ITEM_TYPE_END);
}
+struct ice_ptype_match {
+ enum rte_flow_item_type *pattern_list;
+ uint16_t hw_ptype;
+};
+
+static struct ice_ptype_match ice_ptype_map[] = {
+ {pattern_eth_ipv4, ICE_PTYPE_IPV4_PAY},
+ {pattern_eth_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
+ {pattern_eth_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
+ {pattern_eth_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY},
+ {pattern_eth_ipv4_gtpu, ICE_MAC_IPV4_GTPU},
+ {pattern_eth_ipv4_gtpu_eh, ICE_MAC_IPV4_GTPU},
+ {pattern_eth_ipv4_gtpu_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY},
+ {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY},
+ {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP},
+ {pattern_eth_ipv4_gtpu_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY},
+ {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY},
+ {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP},
+ {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY},
+ {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY},
+ {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP},
+ {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY},
+ {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY},
+ {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP},
+ {pattern_eth_ipv4_esp, ICE_MAC_IPV4_ESP},
+ {pattern_eth_ipv4_udp_esp, ICE_MAC_IPV4_NAT_T_ESP},
+ {pattern_eth_ipv4_ah, ICE_MAC_IPV4_AH},
+ {pattern_eth_ipv4_l2tp, ICE_MAC_IPV4_L2TPV3},
+ {pattern_eth_ipv4_pfcp, ICE_MAC_IPV4_PFCP_SESSION},
+ {pattern_eth_ipv6, ICE_PTYPE_IPV6_PAY},
+ {pattern_eth_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
+ {pattern_eth_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
+ {pattern_eth_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY},
+ {pattern_eth_ipv6_gtpu, ICE_MAC_IPV6_GTPU},
+ {pattern_eth_ipv6_gtpu_eh, ICE_MAC_IPV6_GTPU},
+ {pattern_eth_ipv6_gtpu_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY},
+ {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY},
+ {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP},
+ {pattern_eth_ipv6_gtpu_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY},
+ {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY},
+ {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP},
+ {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY},
+ {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY},
+ {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP},
+ {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY},
+ {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY},
+ {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP},
+ {pattern_eth_ipv6_esp, ICE_MAC_IPV6_ESP},
+ {pattern_eth_ipv6_udp_esp, ICE_MAC_IPV6_NAT_T_ESP},
+ {pattern_eth_ipv6_ah, ICE_MAC_IPV6_AH},
+ {pattern_eth_ipv6_l2tp, ICE_MAC_IPV6_L2TPV3},
+ {pattern_eth_ipv6_pfcp, ICE_MAC_IPV6_PFCP_SESSION},
+ {pattern_ethertype, ICE_PTYPE_MAC_PAY},
+ {pattern_ethertype_vlan, ICE_PTYPE_MAC_PAY},
+ {pattern_eth_arp, ICE_PTYPE_MAC_PAY},
+ {pattern_eth_vlan_ipv4, ICE_PTYPE_IPV4_PAY},
+ {pattern_eth_vlan_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY},
+ {pattern_eth_vlan_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY},
+ {pattern_eth_vlan_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY},
+ {pattern_eth_vlan_ipv6, ICE_PTYPE_IPV6_PAY},
+ {pattern_eth_vlan_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY},
+ {pattern_eth_vlan_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY},
+ {pattern_eth_vlan_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY},
+ {pattern_eth_pppoes, ICE_MAC_PPPOE_PAY},
+ {pattern_eth_vlan_pppoes, ICE_MAC_PPPOE_PAY},
+ {pattern_eth_pppoes_proto, ICE_MAC_PPPOE_PAY},
+ {pattern_eth_vlan_pppoes_proto, ICE_MAC_PPPOE_PAY},
+ {pattern_eth_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
+ {pattern_eth_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY},
+ {pattern_eth_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP},
+ {pattern_eth_vlan_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY},
+ {pattern_eth_vlan_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP},
+ {pattern_eth_vlan_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY},
+ {pattern_eth_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY},
+ {pattern_eth_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY},
+ {pattern_eth_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP},
+ {pattern_eth_vlan_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_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_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},
+};
+
+static bool
+ice_pattern_is_supported(__rte_unused struct ice_adapter *ad,
+ const struct rte_flow_item *pattern)
+{
+ uint16_t i;
+
+ for (i = 0; i < RTE_DIM(ice_ptype_map); i++) {
+ if (ice_match_pattern(ice_ptype_map[i].pattern_list,
+ pattern)) {
+ return ice_hw_ptype_ena(&ad->hw,
+ ice_ptype_map[i].hw_ptype);
+ }
+ }
+
+ return false;
+}
+
struct ice_pattern_match_item *
-ice_search_pattern_match_item(const struct rte_flow_item pattern[],
- struct ice_pattern_match_item *array,
- uint32_t array_len,
- struct rte_flow_error *error)
+ice_search_pattern_match_item(struct ice_adapter *ad,
+ const struct rte_flow_item pattern[],
+ struct ice_pattern_match_item *array,
+ uint32_t array_len,
+ struct rte_flow_error *error)
{
- uint16_t i = 0;
struct ice_pattern_match_item *pattern_match_item;
/* need free by each filter */
struct rte_flow_item *items; /* used for pattern without VOID items */
uint32_t item_num = 0; /* non-void item number */
+ uint16_t i = 0;
/* Get the non-void item number of pattern */
while ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_END) {
@@ -2078,14 +2188,18 @@ ice_search_pattern_match_item(const struct rte_flow_item pattern[],
if (!pattern_match_item) {
rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE,
NULL, "Failed to allocate memory.");
+ rte_free(items);
return NULL;
}
ice_pattern_skip_void_item(items, pattern);
- for (i = 0; i < array_len; i++)
+ if (!ice_pattern_is_supported(ad, pattern))
+ goto unsupported;
+
+ for (i = 0; i < array_len; i++) {
if (ice_match_pattern(array[i].pattern_list,
- items)) {
+ items)) {
pattern_match_item->input_set_mask =
array[i].input_set_mask;
pattern_match_item->pattern_list =
@@ -2094,9 +2208,11 @@ ice_search_pattern_match_item(const struct rte_flow_item pattern[],
rte_free(items);
return pattern_match_item;
}
+ }
+
+unsupported:
rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM,
pattern, "Unsupported pattern");
-
rte_free(items);
rte_free(pattern_match_item);
return NULL;
diff --git a/drivers/net/ice/ice_generic_flow.h b/drivers/net/ice/ice_generic_flow.h
index 434d2f425d..0dcb620809 100644
--- a/drivers/net/ice/ice_generic_flow.h
+++ b/drivers/net/ice/ice_generic_flow.h
@@ -593,10 +593,11 @@ int ice_register_parser(struct ice_flow_parser *parser,
void ice_unregister_parser(struct ice_flow_parser *parser,
struct ice_adapter *ad);
struct ice_pattern_match_item *
-ice_search_pattern_match_item(const struct rte_flow_item pattern[],
- struct ice_pattern_match_item *array,
- uint32_t array_len,
- struct rte_flow_error *error);
+ice_search_pattern_match_item(struct ice_adapter *ad,
+ const struct rte_flow_item pattern[],
+ struct ice_pattern_match_item *array,
+ uint32_t array_len,
+ struct rte_flow_error *error);
int
ice_flow_redirect(struct ice_adapter *ad,
struct ice_flow_redirect *rd);
diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c
index fe3e06c579..fab2d397b7 100644
--- a/drivers/net/ice/ice_hash.c
+++ b/drivers/net/ice/ice_hash.c
@@ -313,21 +313,7 @@ struct rss_type_match_hdr hint_eth_pppoes = {
ICE_FLOW_SEG_HDR_PPPOE,
ETH_RSS_ETH | ETH_RSS_PPPOE};
-/* Supported pattern for os default package. */
-static struct ice_pattern_match_item ice_hash_pattern_list_os[] = {
- {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_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_empty, ICE_INSET_NONE, &hint_empty},
-};
-
-/* Supported pattern for comms package. */
-static struct ice_pattern_match_item ice_hash_pattern_list_comms[] = {
+static struct ice_pattern_match_item ice_hash_pattern_list[] = {
{pattern_empty, ICE_INSET_NONE,
&hint_empty},
{pattern_eth_ipv4, ICE_INSET_NONE,
@@ -915,19 +901,10 @@ static struct ice_flow_engine ice_hash_engine = {
};
/* Register parser for os package. */
-static struct ice_flow_parser ice_hash_parser_os = {
- .engine = &ice_hash_engine,
- .array = ice_hash_pattern_list_os,
- .array_len = RTE_DIM(ice_hash_pattern_list_os),
- .parse_pattern_action = ice_hash_parse_pattern_action,
- .stage = ICE_FLOW_STAGE_RSS,
-};
-
-/* Register parser for comms package. */
-static struct ice_flow_parser ice_hash_parser_comms = {
+static struct ice_flow_parser ice_hash_parser = {
.engine = &ice_hash_engine,
- .array = ice_hash_pattern_list_comms,
- .array_len = RTE_DIM(ice_hash_pattern_list_comms),
+ .array = ice_hash_pattern_list,
+ .array_len = RTE_DIM(ice_hash_pattern_list),
.parse_pattern_action = ice_hash_parse_pattern_action,
.stage = ICE_FLOW_STAGE_RSS,
};
@@ -946,12 +923,7 @@ ice_hash_init(struct ice_adapter *ad)
if (ad->hw.dcf_enabled)
return 0;
- if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT)
- parser = &ice_hash_parser_os;
- else if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS)
- parser = &ice_hash_parser_comms;
- else
- return -EINVAL;
+ parser = &ice_hash_parser;
return ice_register_parser(parser, ad);
}
@@ -1211,8 +1183,8 @@ ice_hash_parse_pattern_action(__rte_unused struct ice_adapter *ad,
}
/* Check rss supported pattern and find matched pattern. */
- pattern_match_item = ice_search_pattern_match_item(pattern,
- array, array_len, error);
+ pattern_match_item = ice_search_pattern_match_item(ad, pattern, array,
+ array_len, error);
if (!pattern_match_item) {
ret = -rte_errno;
goto error;
@@ -1352,10 +1324,7 @@ ice_hash_uninit(struct ice_adapter *ad)
if (ad->hw.dcf_enabled)
return;
- if (ad->active_pkg_type == ICE_PKG_TYPE_OS_DEFAULT)
- 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);
+ ice_unregister_parser(&ice_hash_parser, ad);
}
static void
diff --git a/drivers/net/ice/ice_switch_filter.c b/drivers/net/ice/ice_switch_filter.c
index 8cba6eb7b1..e5b7d56068 100644
--- a/drivers/net/ice/ice_switch_filter.c
+++ b/drivers/net/ice/ice_switch_filter.c
@@ -137,47 +137,11 @@ struct sw_meta {
struct ice_adv_rule_info rule_info;
};
-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_perm_parser_os;
-static struct ice_flow_parser ice_switch_perm_parser_comms;
+static struct ice_flow_parser ice_switch_dist_parser;
+static struct ice_flow_parser ice_switch_perm_parser;
static struct
-ice_pattern_match_item ice_switch_pattern_dist_os[] = {
- {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},
-};
-
-static struct
-ice_pattern_match_item ice_switch_pattern_dist_comms[] = {
+ice_pattern_match_item ice_switch_pattern_dist_list[] = {
{pattern_ethertype,
ICE_SW_INSET_ETHER, ICE_INSET_NONE},
{pattern_ethertype_vlan,
@@ -265,41 +229,7 @@ ice_pattern_match_item ice_switch_pattern_dist_comms[] = {
};
static struct
-ice_pattern_match_item ice_switch_pattern_perm_os[] = {
- {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},
-};
-
-static struct
-ice_pattern_match_item ice_switch_pattern_perm_comms[] = {
+ice_pattern_match_item ice_switch_pattern_perm_list[] = {
{pattern_ethertype,
ICE_SW_INSET_ETHER, ICE_INSET_NONE},
{pattern_ethertype_vlan,
@@ -1699,7 +1629,8 @@ ice_switch_parse_pattern_action(struct ice_adapter *ad,
}
pattern_match_item =
- ice_search_pattern_match_item(pattern, array, array_len, error);
+ ice_search_pattern_match_item(ad, pattern, array, array_len,
+ error);
if (!pattern_match_item) {
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
@@ -1859,21 +1790,11 @@ ice_switch_init(struct ice_adapter *ad)
struct ice_flow_parser *dist_parser;
struct ice_flow_parser *perm_parser;
- 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_OS_DEFAULT)
- dist_parser = &ice_switch_dist_parser_os;
- else
- return -EINVAL;
-
if (ad->devargs.pipe_mode_support) {
- if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS)
- perm_parser = &ice_switch_perm_parser_comms;
- else
- perm_parser = &ice_switch_perm_parser_os;
-
+ perm_parser = &ice_switch_perm_parser;
ret = ice_register_parser(perm_parser, ad);
} else {
+ dist_parser = &ice_switch_dist_parser;
ret = ice_register_parser(dist_parser, ad);
}
return ret;
@@ -1885,21 +1806,11 @@ ice_switch_uninit(struct ice_adapter *ad)
struct ice_flow_parser *dist_parser;
struct ice_flow_parser *perm_parser;
- 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_OS_DEFAULT)
- dist_parser = &ice_switch_dist_parser_os;
- else
- return;
-
if (ad->devargs.pipe_mode_support) {
- if (ad->active_pkg_type == ICE_PKG_TYPE_COMMS)
- perm_parser = &ice_switch_perm_parser_comms;
- else
- perm_parser = &ice_switch_perm_parser_os;
-
+ perm_parser = &ice_switch_perm_parser;
ice_unregister_parser(perm_parser, ad);
} else {
+ dist_parser = &ice_switch_dist_parser;
ice_unregister_parser(dist_parser, ad);
}
}
@@ -1917,37 +1828,19 @@ ice_flow_engine ice_switch_engine = {
};
static struct
-ice_flow_parser ice_switch_dist_parser_os = {
+ice_flow_parser ice_switch_dist_parser = {
.engine = &ice_switch_engine,
- .array = ice_switch_pattern_dist_os,
- .array_len = RTE_DIM(ice_switch_pattern_dist_os),
+ .array = ice_switch_pattern_dist_list,
+ .array_len = RTE_DIM(ice_switch_pattern_dist_list),
.parse_pattern_action = ice_switch_parse_pattern_action,
.stage = ICE_FLOW_STAGE_DISTRIBUTOR,
};
static struct
-ice_flow_parser ice_switch_dist_parser_comms = {
- .engine = &ice_switch_engine,
- .array = ice_switch_pattern_dist_comms,
- .array_len = RTE_DIM(ice_switch_pattern_dist_comms),
- .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,
- .array = ice_switch_pattern_perm_os,
- .array_len = RTE_DIM(ice_switch_pattern_perm_os),
- .parse_pattern_action = ice_switch_parse_pattern_action,
- .stage = ICE_FLOW_STAGE_PERMISSION,
-};
-
-static struct
-ice_flow_parser ice_switch_perm_parser_comms = {
+ice_flow_parser ice_switch_perm_parser = {
.engine = &ice_switch_engine,
- .array = ice_switch_pattern_perm_comms,
- .array_len = RTE_DIM(ice_switch_pattern_perm_comms),
+ .array = ice_switch_pattern_perm_list,
+ .array_len = RTE_DIM(ice_switch_pattern_perm_list),
.parse_pattern_action = ice_switch_parse_pattern_action,
.stage = ICE_FLOW_STAGE_PERMISSION,
};
--
2.20.1
next prev parent reply other threads:[~2021-01-12 9:39 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-16 8:58 [dpdk-dev] [dpdk-dev 21.02 0/5] enable UDP ecpri configure in dcf Jeff Guo
2020-12-16 8:58 ` [dpdk-dev] [dpdk-dev 21.02 1/5] ethdev: add new tunnel type for ecpri Jeff Guo
2020-12-23 9:28 ` Zhang, Qi Z
2020-12-16 8:58 ` [dpdk-dev] [dpdk-dev 21.02 2/5] net/ice/base: add new UDP " Jeff Guo
2020-12-16 8:58 ` [dpdk-dev] [dpdk-dev 21.02 3/5] net/ice: add ecpri package type Jeff Guo
2020-12-16 8:58 ` [dpdk-dev] [dpdk-dev 21.02 4/5] net/ice: enable ecpri tunnel port configure in dcf Jeff Guo
2020-12-16 8:58 ` [dpdk-dev] [dpdk-dev 21.02 5/5] app/testpmd: add new UDP tunnel port for ecpri Jeff Guo
2020-12-24 6:59 ` [dpdk-dev] [dpdk-dev v2 0/2] " Jeff Guo
2020-12-24 6:59 ` [dpdk-dev] [dpdk-dev v2 1/2] ethdev: add new tunnel type " Jeff Guo
2021-01-06 22:12 ` Thomas Monjalon
2021-01-07 9:32 ` Guo, Jia
2021-01-07 10:09 ` Andrew Rybchenko
2021-01-07 10:11 ` Thomas Monjalon
2021-01-07 12:47 ` Zhang, Qi Z
2021-01-07 13:33 ` Thomas Monjalon
2021-01-07 13:45 ` David Marchand
2021-01-07 14:27 ` Dodji Seketeli
2021-01-07 15:24 ` Zhang, Qi Z
2021-01-07 16:58 ` Thomas Monjalon
2021-01-08 1:41 ` Zhang, Qi Z
2021-01-08 8:57 ` Ferruh Yigit
2021-01-08 9:29 ` Andrew Rybchenko
2021-01-08 10:36 ` Thomas Monjalon
2021-01-09 1:01 ` Zhang, Qi Z
2021-01-10 10:46 ` Ori Kam
2021-01-11 9:23 ` Thomas Monjalon
2021-01-11 11:26 ` Zhang, Qi Z
2021-01-11 11:37 ` Thomas Monjalon
2021-01-11 14:02 ` Zhang, Qi Z
2021-01-11 14:53 ` Thomas Monjalon
2021-01-12 2:14 ` Zhang, Qi Z
2021-01-15 15:15 ` Thomas Monjalon
2021-01-08 9:22 ` Ferruh Yigit
2021-01-08 10:23 ` Thomas Monjalon
2021-01-08 10:43 ` Ferruh Yigit
2021-01-08 14:06 ` Thomas Monjalon
2021-01-08 14:07 ` Kinsella, Ray
2021-01-08 14:10 ` Thomas Monjalon
2021-01-08 12:38 ` Kinsella, Ray
2021-01-08 14:27 ` Ferruh Yigit
2021-01-08 14:31 ` Kinsella, Ray
2021-01-08 17:34 ` Kinsella, Ray
2021-01-14 14:34 ` Ferruh Yigit
2021-01-15 2:51 ` Guo, Jia
2020-12-24 6:59 ` [dpdk-dev] [dpdk-dev v2 2/2] app/testpmd: add new UDP tunnel port " Jeff Guo
2021-01-14 14:33 ` Ferruh Yigit
2021-01-15 2:13 ` Guo, Jia
2020-12-24 13:40 ` [dpdk-dev] [dpdk-dev v2 0/2] " Zhang, Qi Z
2020-12-24 7:01 ` [dpdk-dev] [dpdk-dev v2 0/6] enable UDP ecpri configure in dcf Jeff Guo
2020-12-24 7:01 ` [dpdk-dev] [dpdk-dev v2 1/6] net/ice/base: add package PTYPE enable information Jeff Guo
2020-12-24 7:01 ` [dpdk-dev] [dpdk-dev v2 2/6] net/ice: refactor package type parsing Jeff Guo
2020-12-24 7:01 ` [dpdk-dev] [dpdk-dev v2 3/6] net/ice/base: add new UDP tunnel type for ecpri Jeff Guo
2020-12-24 7:01 ` [dpdk-dev] [dpdk-dev v2 4/6] net/ice: add PTYPE mapping " Jeff Guo
2020-12-24 7:01 ` [dpdk-dev] [dpdk-dev v2 5/6] net/iavf: " Jeff Guo
2020-12-24 7:01 ` [dpdk-dev] [dpdk-dev v2 6/6] net/ice: enable ecpri tunnel port configure in dcf Jeff Guo
2021-01-12 9:32 ` [dpdk-dev] [dpdk-dev v3 0/3] net/ice: refactor PTYPE parsing Jeff Guo
2021-01-12 9:32 ` [dpdk-dev] [dpdk-dev v3 1/3] net/ice/base: add package PTYPE enable information Jeff Guo
2021-01-12 9:32 ` [dpdk-dev] [dpdk-dev v3 2/3] net/ice/base: add PTYPE value Jeff Guo
2021-01-12 9:32 ` Jeff Guo [this message]
2021-01-13 5:31 ` [dpdk-dev] [dpdk-dev v4 0/2] net/ice: refactor PTYPE parsing Jeff Guo
2021-01-13 5:31 ` [dpdk-dev] [dpdk-dev v4 1/2] net/ice/base: add PTYPE value Jeff Guo
2021-01-13 5:31 ` [dpdk-dev] [dpdk-dev v4 2/2] net/ice: refactor PTYPE parsing Jeff Guo
2021-01-13 6:07 ` [dpdk-dev] [dpdk-dev v4 0/2] " Zhang, Qi Z
2021-01-13 14:05 ` [dpdk-dev] [dpdk-dev v3 0/3] enable UDP ecpri configure in dcf Jeff Guo
2021-01-13 14:05 ` [dpdk-dev] [dpdk-dev v3 1/3] net/ice: add PTYPE mapping for ecpri Jeff Guo
2021-01-13 14:05 ` [dpdk-dev] [dpdk-dev v3 2/3] net/iavf: " Jeff Guo
2021-01-13 14:05 ` [dpdk-dev] [dpdk-dev v3 3/3] net/ice: enable ecpri tunnel port configure in dcf Jeff Guo
2021-01-14 4:18 ` [dpdk-dev] [dpdk-dev v3 0/3] enable UDP ecpri " Zhang, Qi Z
2021-01-18 9:28 ` Ferruh Yigit
2021-01-15 2:42 ` [dpdk-dev] [dpdk-dev v3 0/2] add new UDP tunnel port for ecpri Jeff Guo
2021-01-15 2:42 ` [dpdk-dev] [dpdk-dev v3 1/2] ethdev: add new tunnel type " Jeff Guo
2021-01-15 2:42 ` [dpdk-dev] [dpdk-dev v3 2/2] app/testpmd: add new UDP tunnel port " Jeff Guo
2021-01-15 4:35 ` [dpdk-dev] [dpdk-dev v4 0/2] add new UDP tunnel port configure for eCPRI Jeff Guo
2021-01-15 4:35 ` [dpdk-dev] [dpdk-dev v4 1/2] ethdev: add new tunnel type " Jeff Guo
2021-01-15 4:35 ` [dpdk-dev] [dpdk-dev v4 2/2] app/testpmd: add new UDP tunnel port " Jeff Guo
2021-01-15 5:15 ` [dpdk-dev] [dpdk-dev v5 0/2] add new UDP tunnel port configure " Jeff Guo
2021-01-15 5:15 ` [dpdk-dev] [dpdk-dev v5 1/2] ethdev: add new tunnel type " Jeff Guo
2021-01-15 12:23 ` Ferruh Yigit
2021-01-18 2:40 ` Guo, Jia
2021-01-15 5:15 ` [dpdk-dev] [dpdk-dev v5 2/2] app/testpmd: add new UDP tunnel port " Jeff Guo
2021-01-15 12:24 ` Ferruh Yigit
2021-01-15 12:28 ` [dpdk-dev] [dpdk-dev v5 0/2] add new UDP tunnel port configure " Ferruh Yigit
2021-01-19 3:59 ` [dpdk-dev] [dpdk-dev v4] net/ice: enable eCPRI tunnel port configure in dcf Jeff Guo
2021-01-19 4:15 ` Jeff Guo
2021-01-19 4:19 ` [dpdk-dev] [dpdk-dev v5] " Jeff Guo
2021-01-20 10:14 ` Zhang, Qi Z
2021-01-20 10:19 ` Thomas Monjalon
2021-01-20 10:23 ` Zhang, Qi Z
2021-01-20 10:30 ` Thomas Monjalon
2021-01-20 10:36 ` Zhang, Qi Z
2021-01-20 10:39 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210112093243.40840-4-jia.guo@intel.com \
--to=jia.guo@intel.com \
--cc=dev@dpdk.org \
--cc=haiyue.wang@intel.com \
--cc=jingjing.wu@intel.com \
--cc=qi.z.zhang@intel.com \
--cc=qiming.yang@intel.com \
--cc=simei.su@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).