X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fice_hash.c;h=2bf8983f5a6eea975daf28ab1dbcbb53fa9d053d;hb=c5a49265fc232ac382d4609b264b57b3d65dbbe3;hp=3940438c8121ecedd24aa25a8dab20b5c03adb14;hpb=68b6240ee9f0484ae7c75705c960922aa500544e;p=dpdk.git diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index 3940438c81..2bf8983f5a 100644 --- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include #include @@ -36,8 +36,8 @@ #define ICE_GTPU_EH_DWNLINK 0 #define ICE_GTPU_EH_UPLINK 1 -#define ICE_IPV4_PROT BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) -#define ICE_IPV6_PROT BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) +#define ICE_IPV4_PROT BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_PROT) +#define ICE_IPV6_PROT BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) #define VALID_RSS_IPV4_L4 (ETH_RSS_NONFRAG_IPV4_UDP | \ ETH_RSS_NONFRAG_IPV4_TCP | \ @@ -47,8 +47,10 @@ ETH_RSS_NONFRAG_IPV6_TCP | \ ETH_RSS_NONFRAG_IPV6_SCTP) -#define VALID_RSS_IPV4 (ETH_RSS_IPV4 | VALID_RSS_IPV4_L4) -#define VALID_RSS_IPV6 (ETH_RSS_IPV6 | VALID_RSS_IPV6_L4) +#define VALID_RSS_IPV4 (ETH_RSS_IPV4 | ETH_RSS_FRAG_IPV4 | \ + VALID_RSS_IPV4_L4) +#define VALID_RSS_IPV6 (ETH_RSS_IPV6 | ETH_RSS_FRAG_IPV6 | \ + VALID_RSS_IPV6_L4) #define VALID_RSS_L3 (VALID_RSS_IPV4 | VALID_RSS_IPV6) #define VALID_RSS_L4 (VALID_RSS_IPV4_L4 | VALID_RSS_IPV6_L4) @@ -102,15 +104,17 @@ ice_hash_parse_pattern_action(struct ice_adapter *ad, uint32_t array_len, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], + uint32_t priority, void **meta, struct rte_flow_error *error); /* Rss configuration template */ struct ice_rss_hash_cfg ipv4_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_FRAG | ICE_FLOW_SEG_HDR_IPV_OTHER, ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_IPV4, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -118,7 +122,7 @@ struct ice_rss_hash_cfg ipv4_udp_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, ICE_FLOW_HASH_ETH | ICE_HASH_UDP_IPV4 | ICE_IPV4_PROT, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -126,7 +130,7 @@ struct ice_rss_hash_cfg ipv4_tcp_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, ICE_FLOW_HASH_ETH | ICE_HASH_TCP_IPV4 | ICE_IPV4_PROT, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -134,7 +138,7 @@ struct ice_rss_hash_cfg ipv4_sctp_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP, ICE_FLOW_HASH_ETH | ICE_HASH_SCTP_IPV4 | ICE_IPV4_PROT, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -142,6 +146,15 @@ struct ice_rss_hash_cfg ipv6_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_IPV6, + ICE_RSS_OUTER_HEADERS, + 0 +}; + +struct ice_rss_hash_cfg ipv6_frag_tmplt = { + ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_FRAG | + ICE_FLOW_SEG_HDR_IPV_OTHER, + ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_IPV6, ICE_RSS_ANY_HEADERS, 0 }; @@ -150,7 +163,7 @@ struct ice_rss_hash_cfg ipv6_udp_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, ICE_FLOW_HASH_ETH | ICE_HASH_UDP_IPV6 | ICE_IPV6_PROT, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -158,7 +171,7 @@ struct ice_rss_hash_cfg ipv6_tcp_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, ICE_FLOW_HASH_ETH | ICE_HASH_TCP_IPV6 | ICE_IPV6_PROT, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -166,17 +179,17 @@ struct ice_rss_hash_cfg ipv6_sctp_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP, ICE_FLOW_HASH_ETH | ICE_HASH_SCTP_IPV6 | ICE_IPV6_PROT, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; -struct ice_rss_hash_cfg eth_inner_ipv4_tmplt = { +struct ice_rss_hash_cfg outer_ipv4_inner_ipv4_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, ICE_FLOW_HASH_IPV4, ICE_RSS_INNER_HEADERS_W_OUTER_IPV4, 0 }; -struct ice_rss_hash_cfg eth_inner_ipv4_udp_tmplt = { +struct ice_rss_hash_cfg outer_ipv4_inner_ipv4_udp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, ICE_HASH_UDP_IPV4 | ICE_IPV4_PROT, @@ -184,7 +197,7 @@ struct ice_rss_hash_cfg eth_inner_ipv4_udp_tmplt = { 0 }; -struct ice_rss_hash_cfg eth_inner_ipv4_tcp_tmplt = { +struct ice_rss_hash_cfg outer_ipv4_inner_ipv4_tcp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, ICE_HASH_TCP_IPV4 | ICE_IPV4_PROT, @@ -192,13 +205,59 @@ struct ice_rss_hash_cfg eth_inner_ipv4_tcp_tmplt = { 0 }; -struct ice_rss_hash_cfg eth_inner_ipv6_tmplt = { +struct ice_rss_hash_cfg outer_ipv6_inner_ipv4_tmplt = { + ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, + ICE_FLOW_HASH_IPV4, + ICE_RSS_INNER_HEADERS_W_OUTER_IPV6, + 0 +}; + +struct ice_rss_hash_cfg outer_ipv6_inner_ipv4_udp_tmplt = { + ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | + ICE_FLOW_SEG_HDR_UDP, + ICE_HASH_UDP_IPV4 | ICE_IPV4_PROT, + ICE_RSS_INNER_HEADERS_W_OUTER_IPV6, + 0 +}; + +struct ice_rss_hash_cfg outer_ipv6_inner_ipv4_tcp_tmplt = { + ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | + ICE_FLOW_SEG_HDR_TCP, + ICE_HASH_TCP_IPV4 | ICE_IPV4_PROT, + ICE_RSS_INNER_HEADERS_W_OUTER_IPV6, + 0 +}; + +struct ice_rss_hash_cfg outer_ipv4_inner_ipv6_tmplt = { + ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, + ICE_FLOW_HASH_IPV6, + ICE_RSS_INNER_HEADERS_W_OUTER_IPV4, + 0 +}; + +struct ice_rss_hash_cfg outer_ipv4_inner_ipv6_udp_tmplt = { + ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | + ICE_FLOW_SEG_HDR_UDP, + ICE_HASH_UDP_IPV6 | ICE_IPV6_PROT, + ICE_RSS_INNER_HEADERS_W_OUTER_IPV4, + 0 +}; + +struct ice_rss_hash_cfg outer_ipv4_inner_ipv6_tcp_tmplt = { + ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | + ICE_FLOW_SEG_HDR_TCP, + ICE_HASH_TCP_IPV6 | ICE_IPV6_PROT, + ICE_RSS_INNER_HEADERS_W_OUTER_IPV4, + 0 +}; + +struct ice_rss_hash_cfg outer_ipv6_inner_ipv6_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, ICE_FLOW_HASH_IPV6, ICE_RSS_INNER_HEADERS_W_OUTER_IPV6, 0 }; -struct ice_rss_hash_cfg eth_inner_ipv6_udp_tmplt = { +struct ice_rss_hash_cfg outer_ipv6_inner_ipv6_udp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP, ICE_HASH_UDP_IPV6 | ICE_IPV6_PROT, @@ -206,7 +265,7 @@ struct ice_rss_hash_cfg eth_inner_ipv6_udp_tmplt = { 0 }; -struct ice_rss_hash_cfg eth_inner_ipv6_tcp_tmplt = { +struct ice_rss_hash_cfg outer_ipv6_inner_ipv6_tcp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP, ICE_HASH_TCP_IPV6 | ICE_IPV6_PROT, @@ -218,7 +277,7 @@ struct ice_rss_hash_cfg eth_ipv4_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_ESP, ICE_FLOW_HASH_ESP_SPI, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -226,7 +285,7 @@ struct ice_rss_hash_cfg eth_ipv4_udp_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_NAT_T_ESP, ICE_FLOW_HASH_NAT_T_ESP_SPI, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -234,7 +293,7 @@ struct ice_rss_hash_cfg eth_ipv4_ah_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_AH, ICE_FLOW_HASH_AH_SPI, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -242,7 +301,7 @@ struct ice_rss_hash_cfg eth_ipv4_l2tpv3_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_L2TPV3, ICE_FLOW_HASH_L2TPV3_SESS_ID, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -250,7 +309,7 @@ struct ice_rss_hash_cfg eth_ipv4_pfcp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_PFCP_SESSION, ICE_FLOW_HASH_PFCP_SEID, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -258,7 +317,7 @@ struct ice_rss_hash_cfg eth_ipv6_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_ESP, ICE_FLOW_HASH_ESP_SPI, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -266,7 +325,7 @@ struct ice_rss_hash_cfg eth_ipv6_udp_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_NAT_T_ESP, ICE_FLOW_HASH_NAT_T_ESP_SPI, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -274,7 +333,7 @@ struct ice_rss_hash_cfg eth_ipv6_ah_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_AH, ICE_FLOW_HASH_AH_SPI, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -282,7 +341,7 @@ struct ice_rss_hash_cfg eth_ipv6_l2tpv3_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_L2TPV3, ICE_FLOW_HASH_L2TPV3_SESS_ID, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -290,14 +349,14 @@ struct ice_rss_hash_cfg eth_ipv6_pfcp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_PFCP_SESSION, ICE_FLOW_HASH_PFCP_SEID, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; struct ice_rss_hash_cfg pppoe_tmplt = { ICE_FLOW_SEG_HDR_ETH, ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_PPPOE_SESS_ID, - ICE_RSS_ANY_HEADERS, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -308,88 +367,107 @@ struct ice_rss_hash_cfg empty_tmplt = { 0 }; -/* rss type super set */ -/* Empty rss type to support simple_xor. */ -#define ICE_RSS_TYPE_EMPTY 0ULL - -/* IPv4 outer*/ -#define ICE_RSS_TYPE_OUTER_IPV4 (ETH_RSS_ETH | ETH_RSS_IPV4) -#define ICE_RSS_TYPE_OUTER_IPV4_UDP (ICE_RSS_TYPE_OUTER_IPV4 | \ - ETH_RSS_NONFRAG_IPV4_UDP) -#define ICE_RSS_TYPE_OUTER_IPV4_TCP (ICE_RSS_TYPE_OUTER_IPV4 | \ - ETH_RSS_NONFRAG_IPV4_TCP) -#define ICE_RSS_TYPE_OUTER_IPV4_SCTP (ICE_RSS_TYPE_OUTER_IPV4 | \ - ETH_RSS_NONFRAG_IPV4_SCTP) +/* IPv4 */ +#define ICE_RSS_TYPE_ETH_IPV4 (ETH_RSS_ETH | ETH_RSS_IPV4 | \ + ETH_RSS_FRAG_IPV4) +#define ICE_RSS_TYPE_ETH_IPV4_UDP (ICE_RSS_TYPE_ETH_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_UDP) +#define ICE_RSS_TYPE_ETH_IPV4_TCP (ICE_RSS_TYPE_ETH_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_TCP) +#define ICE_RSS_TYPE_ETH_IPV4_SCTP (ICE_RSS_TYPE_ETH_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_SCTP) +#define ICE_RSS_TYPE_IPV4 ETH_RSS_IPV4 +#define ICE_RSS_TYPE_IPV4_UDP (ETH_RSS_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_UDP) +#define ICE_RSS_TYPE_IPV4_TCP (ETH_RSS_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_TCP) +#define ICE_RSS_TYPE_IPV4_SCTP (ETH_RSS_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_SCTP) + /* IPv6 */ -#define ICE_RSS_TYPE_OUTER_IPV6 (ETH_RSS_ETH | ETH_RSS_IPV6) -#define ICE_RSS_TYPE_OUTER_IPV6_UDP (ICE_RSS_TYPE_OUTER_IPV6 | \ - ETH_RSS_NONFRAG_IPV6_UDP) -#define ICE_RSS_TYPE_OUTER_IPV6_TCP (ICE_RSS_TYPE_OUTER_IPV6 | \ - ETH_RSS_NONFRAG_IPV6_TCP) -#define ICE_RSS_TYPE_OUTER_IPV6_SCTP (ICE_RSS_TYPE_OUTER_IPV6 | \ - ETH_RSS_NONFRAG_IPV6_SCTP) +#define ICE_RSS_TYPE_ETH_IPV6 (ETH_RSS_ETH | ETH_RSS_IPV6) +#define ICE_RSS_TYPE_ETH_IPV6_FRAG (ETH_RSS_ETH | ETH_RSS_IPV6 | \ + ETH_RSS_FRAG_IPV6) +#define ICE_RSS_TYPE_ETH_IPV6_UDP (ICE_RSS_TYPE_ETH_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_UDP) +#define ICE_RSS_TYPE_ETH_IPV6_TCP (ICE_RSS_TYPE_ETH_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_TCP) +#define ICE_RSS_TYPE_ETH_IPV6_SCTP (ICE_RSS_TYPE_ETH_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_SCTP) +#define ICE_RSS_TYPE_IPV6 ETH_RSS_IPV6 +#define ICE_RSS_TYPE_IPV6_UDP (ETH_RSS_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_UDP) +#define ICE_RSS_TYPE_IPV6_TCP (ETH_RSS_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_TCP) +#define ICE_RSS_TYPE_IPV6_SCTP (ETH_RSS_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_SCTP) /* VLAN IPV4 */ -#define ICE_RSS_TYPE_VLAN_IPV4 (ICE_RSS_TYPE_OUTER_IPV4 | \ - ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) -#define ICE_RSS_TYPE_VLAN_IPV4_UDP (ICE_RSS_TYPE_OUTER_IPV4_UDP | \ +#define ICE_RSS_TYPE_VLAN_IPV4 (ICE_RSS_TYPE_IPV4 | \ + ETH_RSS_S_VLAN | ETH_RSS_C_VLAN | \ + ETH_RSS_FRAG_IPV4) +#define ICE_RSS_TYPE_VLAN_IPV4_UDP (ICE_RSS_TYPE_IPV4_UDP | \ ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) -#define ICE_RSS_TYPE_VLAN_IPV4_TCP (ICE_RSS_TYPE_OUTER_IPV4_TCP | \ +#define ICE_RSS_TYPE_VLAN_IPV4_TCP (ICE_RSS_TYPE_IPV4_TCP | \ ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) -#define ICE_RSS_TYPE_VLAN_IPV4_SCTP (ICE_RSS_TYPE_OUTER_IPV4_SCTP | \ +#define ICE_RSS_TYPE_VLAN_IPV4_SCTP (ICE_RSS_TYPE_IPV4_SCTP | \ ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) /* VLAN IPv6 */ -#define ICE_RSS_TYPE_VLAN_IPV6 (ICE_RSS_TYPE_OUTER_IPV6 | \ +#define ICE_RSS_TYPE_VLAN_IPV6 (ICE_RSS_TYPE_IPV6 | \ ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) -#define ICE_RSS_TYPE_VLAN_IPV6_UDP (ICE_RSS_TYPE_OUTER_IPV6_UDP | \ +#define ICE_RSS_TYPE_VLAN_IPV6_FRAG (ICE_RSS_TYPE_IPV6 | \ + ETH_RSS_S_VLAN | ETH_RSS_C_VLAN | \ + ETH_RSS_FRAG_IPV6) +#define ICE_RSS_TYPE_VLAN_IPV6_UDP (ICE_RSS_TYPE_IPV6_UDP | \ ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) -#define ICE_RSS_TYPE_VLAN_IPV6_TCP (ICE_RSS_TYPE_OUTER_IPV6_TCP | \ +#define ICE_RSS_TYPE_VLAN_IPV6_TCP (ICE_RSS_TYPE_IPV6_TCP | \ ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) -#define ICE_RSS_TYPE_VLAN_IPV6_SCTP (ICE_RSS_TYPE_OUTER_IPV6_SCTP | \ +#define ICE_RSS_TYPE_VLAN_IPV6_SCTP (ICE_RSS_TYPE_IPV6_SCTP | \ ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) -/* IPv4 inner */ -#define ICE_RSS_TYPE_INNER_IPV4 ETH_RSS_IPV4 -#define ICE_RSS_TYPE_INNER_IPV4_UDP (ETH_RSS_IPV4 | \ - ETH_RSS_NONFRAG_IPV4_UDP) -#define ICE_RSS_TYPE_INNER_IPV4_TCP (ETH_RSS_IPV4 | \ - ETH_RSS_NONFRAG_IPV4_TCP) -#define ICE_RSS_TYPE_INNER_IPV4_SCTP (ETH_RSS_IPV4 | \ - ETH_RSS_NONFRAG_IPV4_SCTP) -/* IPv6 inner */ -#define ICE_RSS_TYPE_INNER_IPV6 ETH_RSS_IPV6 -#define ICE_RSS_TYPE_INNER_IPV6_UDP (ETH_RSS_IPV6 | \ - ETH_RSS_NONFRAG_IPV6_UDP) -#define ICE_RSS_TYPE_INNER_IPV6_TCP (ETH_RSS_IPV6 | \ - ETH_RSS_NONFRAG_IPV6_TCP) -#define ICE_RSS_TYPE_INNER_IPV6_SCTP (ETH_RSS_IPV6 | \ - ETH_RSS_NONFRAG_IPV6_SCTP) - /* GTPU IPv4 */ -#define ICE_RSS_TYPE_GTPU_IPV4 (ICE_RSS_TYPE_INNER_IPV4 | \ +#define ICE_RSS_TYPE_GTPU_IPV4 (ICE_RSS_TYPE_IPV4 | \ ETH_RSS_GTPU) -#define ICE_RSS_TYPE_GTPU_IPV4_UDP (ICE_RSS_TYPE_INNER_IPV4_UDP | \ +#define ICE_RSS_TYPE_GTPU_IPV4_UDP (ICE_RSS_TYPE_IPV4_UDP | \ ETH_RSS_GTPU) -#define ICE_RSS_TYPE_GTPU_IPV4_TCP (ICE_RSS_TYPE_INNER_IPV4_TCP | \ +#define ICE_RSS_TYPE_GTPU_IPV4_TCP (ICE_RSS_TYPE_IPV4_TCP | \ ETH_RSS_GTPU) /* GTPU IPv6 */ -#define ICE_RSS_TYPE_GTPU_IPV6 (ICE_RSS_TYPE_INNER_IPV6 | \ +#define ICE_RSS_TYPE_GTPU_IPV6 (ICE_RSS_TYPE_IPV6 | \ ETH_RSS_GTPU) -#define ICE_RSS_TYPE_GTPU_IPV6_UDP (ICE_RSS_TYPE_INNER_IPV6_UDP | \ +#define ICE_RSS_TYPE_GTPU_IPV6_UDP (ICE_RSS_TYPE_IPV6_UDP | \ ETH_RSS_GTPU) -#define ICE_RSS_TYPE_GTPU_IPV6_TCP (ICE_RSS_TYPE_INNER_IPV6_TCP | \ +#define ICE_RSS_TYPE_GTPU_IPV6_TCP (ICE_RSS_TYPE_IPV6_TCP | \ ETH_RSS_GTPU) -/* ESP, AH, L2TPV3, PFCP and PPPOE */ +/* PPPOE */ +#define ICE_RSS_TYPE_PPPOE (ETH_RSS_ETH | ETH_RSS_PPPOE) + +/* PPPOE IPv4 */ +#define ICE_RSS_TYPE_PPPOE_IPV4 (ICE_RSS_TYPE_IPV4 | \ + ICE_RSS_TYPE_PPPOE) +#define ICE_RSS_TYPE_PPPOE_IPV4_UDP (ICE_RSS_TYPE_IPV4_UDP | \ + ICE_RSS_TYPE_PPPOE) +#define ICE_RSS_TYPE_PPPOE_IPV4_TCP (ICE_RSS_TYPE_IPV4_TCP | \ + ICE_RSS_TYPE_PPPOE) + +/* PPPOE IPv6 */ +#define ICE_RSS_TYPE_PPPOE_IPV6 (ICE_RSS_TYPE_IPV6 | \ + ICE_RSS_TYPE_PPPOE) +#define ICE_RSS_TYPE_PPPOE_IPV6_UDP (ICE_RSS_TYPE_IPV6_UDP | \ + ICE_RSS_TYPE_PPPOE) +#define ICE_RSS_TYPE_PPPOE_IPV6_TCP (ICE_RSS_TYPE_IPV6_TCP | \ + ICE_RSS_TYPE_PPPOE) + +/* ESP, AH, L2TPV3 and PFCP */ #define ICE_RSS_TYPE_IPV4_ESP (ETH_RSS_ESP | ETH_RSS_IPV4) -#define ICE_RSS_TYPE_IPV4_AH (ETH_RSS_AH | ETH_RSS_IPV4) #define ICE_RSS_TYPE_IPV6_ESP (ETH_RSS_ESP | ETH_RSS_IPV6) +#define ICE_RSS_TYPE_IPV4_AH (ETH_RSS_AH | ETH_RSS_IPV4) #define ICE_RSS_TYPE_IPV6_AH (ETH_RSS_AH | ETH_RSS_IPV6) #define ICE_RSS_TYPE_IPV4_L2TPV3 (ETH_RSS_L2TPV3 | ETH_RSS_IPV4) #define ICE_RSS_TYPE_IPV6_L2TPV3 (ETH_RSS_L2TPV3 | ETH_RSS_IPV6) #define ICE_RSS_TYPE_IPV4_PFCP (ETH_RSS_PFCP | ETH_RSS_IPV4) #define ICE_RSS_TYPE_IPV6_PFCP (ETH_RSS_PFCP | ETH_RSS_IPV6) -#define ICE_RSS_TYPE_PPPOE (ETH_RSS_ETH | ETH_RSS_PPPOE) /** * Supported pattern for hash. @@ -399,67 +477,69 @@ struct ice_rss_hash_cfg empty_tmplt = { */ static struct ice_pattern_match_item ice_hash_pattern_list[] = { /* IPV4 */ - {pattern_eth_ipv4, ICE_RSS_TYPE_OUTER_IPV4, &ipv4_tmplt}, - {pattern_eth_ipv4_udp, ICE_RSS_TYPE_OUTER_IPV4_UDP, &ipv4_udp_tmplt}, - {pattern_eth_ipv4_tcp, ICE_RSS_TYPE_OUTER_IPV4_TCP, &ipv4_tcp_tmplt}, - {pattern_eth_ipv4_sctp, ICE_RSS_TYPE_OUTER_IPV4_SCTP, &ipv4_sctp_tmplt}, - {pattern_eth_vlan_ipv4, ICE_RSS_TYPE_VLAN_IPV4, &ipv4_tmplt}, - {pattern_eth_vlan_ipv4_udp, ICE_RSS_TYPE_VLAN_IPV4_UDP, &ipv4_udp_tmplt}, - {pattern_eth_vlan_ipv4_tcp, ICE_RSS_TYPE_VLAN_IPV4_TCP, &ipv4_tcp_tmplt}, - {pattern_eth_vlan_ipv4_sctp, ICE_RSS_TYPE_VLAN_IPV4_SCTP, &ipv4_sctp_tmplt}, - {pattern_eth_ipv4_gtpu_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ð_inner_ipv4_tmplt}, - {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ð_inner_ipv4_udp_tmplt}, - {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ð_inner_ipv4_tcp_tmplt}, - {pattern_eth_ipv6_gtpu_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ð_inner_ipv4_tmplt}, - {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ð_inner_ipv4_udp_tmplt}, - {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ð_inner_ipv4_tcp_tmplt}, - {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ð_inner_ipv4_tmplt}, - {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ð_inner_ipv4_udp_tmplt}, - {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ð_inner_ipv4_tcp_tmplt}, - {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ð_inner_ipv4_tmplt}, - {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ð_inner_ipv4_udp_tmplt}, - {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ð_inner_ipv4_tcp_tmplt}, - {pattern_eth_pppoes_ipv4, ICE_RSS_TYPE_OUTER_IPV4, &ipv4_tmplt}, - {pattern_eth_pppoes_ipv4_udp, ICE_RSS_TYPE_OUTER_IPV4_UDP, &ipv4_udp_tmplt}, - {pattern_eth_pppoes_ipv4_tcp, ICE_RSS_TYPE_OUTER_IPV4_TCP, &ipv4_tcp_tmplt}, - {pattern_eth_ipv4_esp, ICE_RSS_TYPE_IPV4_ESP, ð_ipv4_esp_tmplt}, - {pattern_eth_ipv4_udp_esp, ICE_RSS_TYPE_IPV4_ESP, ð_ipv4_udp_esp_tmplt}, - {pattern_eth_ipv4_ah, ICE_RSS_TYPE_IPV4_AH, ð_ipv4_ah_tmplt}, - {pattern_eth_ipv4_l2tp, ICE_RSS_TYPE_IPV4_L2TPV3, ð_ipv4_l2tpv3_tmplt}, - {pattern_eth_ipv4_pfcp, ICE_RSS_TYPE_IPV4_PFCP, ð_ipv4_pfcp_tmplt}, + {pattern_eth_ipv4, ICE_RSS_TYPE_ETH_IPV4, ICE_INSET_NONE, &ipv4_tmplt}, + {pattern_eth_ipv4_udp, ICE_RSS_TYPE_ETH_IPV4_UDP, ICE_INSET_NONE, &ipv4_udp_tmplt}, + {pattern_eth_ipv4_tcp, ICE_RSS_TYPE_ETH_IPV4_TCP, ICE_INSET_NONE, &ipv4_tcp_tmplt}, + {pattern_eth_ipv4_sctp, ICE_RSS_TYPE_ETH_IPV4_SCTP, ICE_INSET_NONE, &ipv4_sctp_tmplt}, + {pattern_eth_vlan_ipv4, ICE_RSS_TYPE_VLAN_IPV4, ICE_INSET_NONE, &ipv4_tmplt}, + {pattern_eth_vlan_ipv4_udp, ICE_RSS_TYPE_VLAN_IPV4_UDP, ICE_INSET_NONE, &ipv4_udp_tmplt}, + {pattern_eth_vlan_ipv4_tcp, ICE_RSS_TYPE_VLAN_IPV4_TCP, ICE_INSET_NONE, &ipv4_tcp_tmplt}, + {pattern_eth_vlan_ipv4_sctp, ICE_RSS_TYPE_VLAN_IPV4_SCTP, ICE_INSET_NONE, &ipv4_sctp_tmplt}, + {pattern_eth_ipv4_gtpu_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ICE_INSET_NONE, &outer_ipv4_inner_ipv4_tmplt}, + {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ICE_INSET_NONE, &outer_ipv4_inner_ipv4_udp_tmplt}, + {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ICE_INSET_NONE, &outer_ipv4_inner_ipv4_tcp_tmplt}, + {pattern_eth_ipv6_gtpu_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ICE_INSET_NONE, &outer_ipv6_inner_ipv4_tmplt}, + {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ICE_INSET_NONE, &outer_ipv6_inner_ipv4_udp_tmplt}, + {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ICE_INSET_NONE, &outer_ipv6_inner_ipv4_tcp_tmplt}, + {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ICE_INSET_NONE, &outer_ipv4_inner_ipv4_tmplt}, + {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ICE_INSET_NONE, &outer_ipv4_inner_ipv4_udp_tmplt}, + {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ICE_INSET_NONE, &outer_ipv4_inner_ipv4_tcp_tmplt}, + {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_RSS_TYPE_GTPU_IPV4, ICE_INSET_NONE, &outer_ipv6_inner_ipv4_tmplt}, + {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_RSS_TYPE_GTPU_IPV4_UDP, ICE_INSET_NONE, &outer_ipv6_inner_ipv4_udp_tmplt}, + {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_RSS_TYPE_GTPU_IPV4_TCP, ICE_INSET_NONE, &outer_ipv6_inner_ipv4_tcp_tmplt}, + {pattern_eth_pppoes_ipv4, ICE_RSS_TYPE_PPPOE_IPV4, ICE_INSET_NONE, &ipv4_tmplt}, + {pattern_eth_pppoes_ipv4_udp, ICE_RSS_TYPE_PPPOE_IPV4_UDP, ICE_INSET_NONE, &ipv4_udp_tmplt}, + {pattern_eth_pppoes_ipv4_tcp, ICE_RSS_TYPE_PPPOE_IPV4_TCP, ICE_INSET_NONE, &ipv4_tcp_tmplt}, + {pattern_eth_ipv4_esp, ICE_RSS_TYPE_IPV4_ESP, ICE_INSET_NONE, ð_ipv4_esp_tmplt}, + {pattern_eth_ipv4_udp_esp, ICE_RSS_TYPE_IPV4_ESP, ICE_INSET_NONE, ð_ipv4_udp_esp_tmplt}, + {pattern_eth_ipv4_ah, ICE_RSS_TYPE_IPV4_AH, ICE_INSET_NONE, ð_ipv4_ah_tmplt}, + {pattern_eth_ipv4_l2tp, ICE_RSS_TYPE_IPV4_L2TPV3, ICE_INSET_NONE, ð_ipv4_l2tpv3_tmplt}, + {pattern_eth_ipv4_pfcp, ICE_RSS_TYPE_IPV4_PFCP, ICE_INSET_NONE, ð_ipv4_pfcp_tmplt}, /* IPV6 */ - {pattern_eth_ipv6, ICE_RSS_TYPE_OUTER_IPV6, &ipv6_tmplt}, - {pattern_eth_ipv6_udp, ICE_RSS_TYPE_OUTER_IPV6_UDP, &ipv6_udp_tmplt}, - {pattern_eth_ipv6_tcp, ICE_RSS_TYPE_OUTER_IPV6_TCP, &ipv6_tcp_tmplt}, - {pattern_eth_ipv6_sctp, ICE_RSS_TYPE_OUTER_IPV6_SCTP, &ipv6_sctp_tmplt}, - {pattern_eth_vlan_ipv6, ICE_RSS_TYPE_VLAN_IPV6, &ipv6_tmplt}, - {pattern_eth_vlan_ipv6_udp, ICE_RSS_TYPE_VLAN_IPV6_UDP, &ipv6_udp_tmplt}, - {pattern_eth_vlan_ipv6_tcp, ICE_RSS_TYPE_VLAN_IPV6_TCP, &ipv6_tcp_tmplt}, - {pattern_eth_vlan_ipv6_sctp, ICE_RSS_TYPE_VLAN_IPV6_SCTP, &ipv6_sctp_tmplt}, - {pattern_eth_ipv4_gtpu_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ð_inner_ipv6_tmplt}, - {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ð_inner_ipv6_udp_tmplt}, - {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ð_inner_ipv6_tcp_tmplt}, - {pattern_eth_ipv6_gtpu_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ð_inner_ipv6_tmplt}, - {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ð_inner_ipv6_udp_tmplt}, - {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ð_inner_ipv6_tcp_tmplt}, - {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ð_inner_ipv6_tmplt}, - {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ð_inner_ipv6_udp_tmplt}, - {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ð_inner_ipv6_tcp_tmplt}, - {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ð_inner_ipv6_tmplt}, - {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ð_inner_ipv6_udp_tmplt}, - {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ð_inner_ipv6_tcp_tmplt}, - {pattern_eth_pppoes_ipv6, ICE_RSS_TYPE_OUTER_IPV6, &ipv6_tmplt}, - {pattern_eth_pppoes_ipv6_udp, ICE_RSS_TYPE_OUTER_IPV6_UDP, &ipv6_udp_tmplt}, - {pattern_eth_pppoes_ipv6_tcp, ICE_RSS_TYPE_OUTER_IPV6_TCP, &ipv6_tcp_tmplt}, - {pattern_eth_ipv6_esp, ICE_RSS_TYPE_IPV6_ESP, ð_ipv6_esp_tmplt}, - {pattern_eth_ipv6_udp_esp, ICE_RSS_TYPE_IPV6_ESP, ð_ipv6_udp_esp_tmplt}, - {pattern_eth_ipv6_ah, ICE_RSS_TYPE_IPV6_AH, ð_ipv6_ah_tmplt}, - {pattern_eth_ipv6_l2tp, ICE_RSS_TYPE_IPV6_L2TPV3, ð_ipv6_l2tpv3_tmplt}, - {pattern_eth_ipv6_pfcp, ICE_RSS_TYPE_IPV6_PFCP, ð_ipv6_pfcp_tmplt}, + {pattern_eth_ipv6, ICE_RSS_TYPE_ETH_IPV6, ICE_INSET_NONE, &ipv6_tmplt}, + {pattern_eth_ipv6_frag_ext, ICE_RSS_TYPE_ETH_IPV6_FRAG, ICE_INSET_NONE, &ipv6_frag_tmplt}, + {pattern_eth_ipv6_udp, ICE_RSS_TYPE_ETH_IPV6_UDP, ICE_INSET_NONE, &ipv6_udp_tmplt}, + {pattern_eth_ipv6_tcp, ICE_RSS_TYPE_ETH_IPV6_TCP, ICE_INSET_NONE, &ipv6_tcp_tmplt}, + {pattern_eth_ipv6_sctp, ICE_RSS_TYPE_ETH_IPV6_SCTP, ICE_INSET_NONE, &ipv6_sctp_tmplt}, + {pattern_eth_vlan_ipv6, ICE_RSS_TYPE_VLAN_IPV6, ICE_INSET_NONE, &ipv6_tmplt}, + {pattern_eth_vlan_ipv6_frag_ext, ICE_RSS_TYPE_VLAN_IPV6_FRAG, ICE_INSET_NONE, &ipv6_frag_tmplt}, + {pattern_eth_vlan_ipv6_udp, ICE_RSS_TYPE_VLAN_IPV6_UDP, ICE_INSET_NONE, &ipv6_udp_tmplt}, + {pattern_eth_vlan_ipv6_tcp, ICE_RSS_TYPE_VLAN_IPV6_TCP, ICE_INSET_NONE, &ipv6_tcp_tmplt}, + {pattern_eth_vlan_ipv6_sctp, ICE_RSS_TYPE_VLAN_IPV6_SCTP, ICE_INSET_NONE, &ipv6_sctp_tmplt}, + {pattern_eth_ipv4_gtpu_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ICE_INSET_NONE, &outer_ipv4_inner_ipv6_tmplt}, + {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ICE_INSET_NONE, &outer_ipv4_inner_ipv6_udp_tmplt}, + {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ICE_INSET_NONE, &outer_ipv4_inner_ipv6_tcp_tmplt}, + {pattern_eth_ipv6_gtpu_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ICE_INSET_NONE, &outer_ipv6_inner_ipv6_tmplt}, + {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ICE_INSET_NONE, &outer_ipv6_inner_ipv6_udp_tmplt}, + {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ICE_INSET_NONE, &outer_ipv6_inner_ipv6_tcp_tmplt}, + {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ICE_INSET_NONE, &outer_ipv4_inner_ipv6_tmplt}, + {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ICE_INSET_NONE, &outer_ipv4_inner_ipv6_udp_tmplt}, + {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ICE_INSET_NONE, &outer_ipv4_inner_ipv6_tcp_tmplt}, + {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_RSS_TYPE_GTPU_IPV6, ICE_INSET_NONE, &outer_ipv6_inner_ipv6_tmplt}, + {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_RSS_TYPE_GTPU_IPV6_UDP, ICE_INSET_NONE, &outer_ipv6_inner_ipv6_udp_tmplt}, + {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_RSS_TYPE_GTPU_IPV6_TCP, ICE_INSET_NONE, &outer_ipv6_inner_ipv6_tcp_tmplt}, + {pattern_eth_pppoes_ipv6, ICE_RSS_TYPE_PPPOE_IPV6, ICE_INSET_NONE, &ipv6_tmplt}, + {pattern_eth_pppoes_ipv6_udp, ICE_RSS_TYPE_PPPOE_IPV6_UDP, ICE_INSET_NONE, &ipv6_udp_tmplt}, + {pattern_eth_pppoes_ipv6_tcp, ICE_RSS_TYPE_PPPOE_IPV6_TCP, ICE_INSET_NONE, &ipv6_tcp_tmplt}, + {pattern_eth_ipv6_esp, ICE_RSS_TYPE_IPV6_ESP, ICE_INSET_NONE, ð_ipv6_esp_tmplt}, + {pattern_eth_ipv6_udp_esp, ICE_RSS_TYPE_IPV6_ESP, ICE_INSET_NONE, ð_ipv6_udp_esp_tmplt}, + {pattern_eth_ipv6_ah, ICE_RSS_TYPE_IPV6_AH, ICE_INSET_NONE, ð_ipv6_ah_tmplt}, + {pattern_eth_ipv6_l2tp, ICE_RSS_TYPE_IPV6_L2TPV3, ICE_INSET_NONE, ð_ipv6_l2tpv3_tmplt}, + {pattern_eth_ipv6_pfcp, ICE_RSS_TYPE_IPV6_PFCP, ICE_INSET_NONE, ð_ipv6_pfcp_tmplt}, /* PPPOE */ - {pattern_eth_pppoes, ICE_RSS_TYPE_PPPOE, &pppoe_tmplt}, + {pattern_eth_pppoes, ICE_RSS_TYPE_PPPOE, ICE_INSET_NONE, &pppoe_tmplt}, /* EMPTY */ - {pattern_empty, ICE_RSS_TYPE_EMPTY, &empty_tmplt}, + {pattern_empty, ICE_INSET_NONE, ICE_INSET_NONE, &empty_tmplt}, }; static struct ice_flow_engine ice_hash_engine = { @@ -573,11 +653,14 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, if (*addl_hdrs & ICE_FLOW_SEG_HDR_IPV4) { if (rss_type & - (ETH_RSS_IPV4 | + (ETH_RSS_IPV4 | ETH_RSS_FRAG_IPV4 | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV4_SCTP)) { - if (rss_type & ETH_RSS_L3_SRC_ONLY) + if (rss_type & ETH_RSS_FRAG_IPV4) + *hash_flds &= + ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID)); + else if (rss_type & ETH_RSS_L3_SRC_ONLY) *hash_flds &= ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_DA)); else if (rss_type & ETH_RSS_L3_DST_ONLY) *hash_flds &= ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_SA)); @@ -592,11 +675,14 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, if (*addl_hdrs & ICE_FLOW_SEG_HDR_IPV6) { if (rss_type & - (ETH_RSS_IPV6 | + (ETH_RSS_IPV6 | ETH_RSS_FRAG_IPV6 | ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_NONFRAG_IPV6_SCTP)) { - if (rss_type & ETH_RSS_L3_SRC_ONLY) + if (rss_type & ETH_RSS_FRAG_IPV6) + *hash_flds &= + ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_ID)); + else if (rss_type & ETH_RSS_L3_SRC_ONLY) *hash_flds &= ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)); else if (rss_type & ETH_RSS_L3_DST_ONLY) *hash_flds &= ~(BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA)); @@ -770,7 +856,9 @@ static void ice_refine_hash_cfg(struct ice_rss_hash_cfg *hash_cfg, static uint64_t invalid_rss_comb[] = { ETH_RSS_IPV4 | ETH_RSS_NONFRAG_IPV4_UDP, + ETH_RSS_IPV4 | ETH_RSS_NONFRAG_IPV4_TCP, ETH_RSS_IPV6 | ETH_RSS_NONFRAG_IPV6_UDP, + ETH_RSS_IPV6 | ETH_RSS_NONFRAG_IPV6_TCP, RTE_ETH_RSS_L3_PRE40 | RTE_ETH_RSS_L3_PRE56 | RTE_ETH_RSS_L3_PRE96 @@ -806,6 +894,14 @@ ice_any_invalid_rss_type(enum rte_eth_hash_function rss_func, if (rss_type & (ETH_RSS_L3_SRC_ONLY | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY | ETH_RSS_L4_DST_ONLY)) return true; + + if (!(rss_type & + (ETH_RSS_IPV4 | ETH_RSS_IPV6 | + ETH_RSS_FRAG_IPV4 | ETH_RSS_FRAG_IPV6 | + ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP | + ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP | + ETH_RSS_NONFRAG_IPV4_SCTP | ETH_RSS_NONFRAG_IPV6_SCTP))) + return true; } /* check invalid combination */ @@ -891,7 +987,7 @@ ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item, rss_type = rte_eth_rss_hf_refine(rss_type); if (ice_any_invalid_rss_type(rss->func, rss_type, - pattern_match_item->input_set_mask)) + pattern_match_item->input_set_mask_o)) return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, action, "RSS type not supported"); @@ -899,7 +995,6 @@ ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item, rss_meta->cfg = *cfg; ice_refine_hash_cfg(&rss_meta->cfg, rss_type, pattern_hint); - break; case RTE_FLOW_ACTION_TYPE_END: break; @@ -921,6 +1016,7 @@ ice_hash_parse_pattern_action(__rte_unused struct ice_adapter *ad, uint32_t array_len, const struct rte_flow_item pattern[], const struct rte_flow_action actions[], + uint32_t priority __rte_unused, void **meta, struct rte_flow_error *error) {