Some protocol don't support symmetric hash, need to handle these cases. When set an invalid symmetric hash rule, just return failed.
Fixes: 7d0824387e63 ("net/ice: fix invalid RSS type") Signed-off-by: Jeff Guo <jia....@intel.com> --- drivers/net/ice/ice_hash.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index 13f88d37c..e535e4b95 100644 --- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c @@ -1026,6 +1026,7 @@ ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item, const struct rte_flow_action *action; uint64_t rss_attr_src_dst; uint64_t rss_attr_l3_pre; + uint64_t rss_attr_symm; uint64_t rss_attr_all; uint64_t rss_type; uint16_t i; @@ -1089,6 +1090,15 @@ ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item, RTE_ETH_RSS_L3_PRE48 | RTE_ETH_RSS_L3_PRE64; + rss_attr_symm = ETH_RSS_IPV4 | + ETH_RSS_NONFRAG_IPV4_UDP | + ETH_RSS_NONFRAG_IPV4_TCP | + ETH_RSS_NONFRAG_IPV4_SCTP | + ETH_RSS_IPV6 | + ETH_RSS_NONFRAG_IPV6_UDP | + ETH_RSS_NONFRAG_IPV6_TCP | + ETH_RSS_NONFRAG_IPV6_SCTP; + rss_attr_all = rss_attr_src_dst | rss_attr_l3_pre; /* Check if only SRC/DST_ONLY or ipv6 prefix exists. */ @@ -1103,7 +1113,8 @@ ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item, */ if (rss->func == RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ) { - if (rss_type & rss_attr_src_dst) + if (rss_type & (rss_attr_src_dst | + ~rss_attr_symm)) return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, -- 2.20.1