X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fice_hash.c;h=20a3204fab7e1462dcd9ec715ecb868e22417ae0;hb=292be511d2909c14db3c9ceaffa317f2beee67a0;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..20a3204fab 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,6 +104,7 @@ 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); @@ -110,7 +113,7 @@ struct ice_rss_hash_cfg ipv4_tmplt = { ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | 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 +121,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 +129,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 +137,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,7 +145,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_ANY_HEADERS, + 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_HASH_ETH | ICE_FLOW_HASH_IPV6, + ICE_RSS_OUTER_HEADERS, 0 }; @@ -150,7 +161,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 +169,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 +177,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 +195,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 +203,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 +263,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 +275,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 +283,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 +291,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 +299,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 +307,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 +315,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 +323,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 +331,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 +339,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 +347,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 +365,124 @@ 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) +struct ice_rss_hash_cfg eth_tmplt = { + ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_ETH_NON_IP, + ICE_FLOW_HASH_ETH, + ICE_RSS_OUTER_HEADERS, + 0 +}; + +/* IPv4 */ +#define ICE_RSS_TYPE_ETH_IPV4 (ETH_RSS_ETH | ETH_RSS_IPV4 | \ + ETH_RSS_FRAG_IPV4 | \ + ETH_RSS_IPV4_CHKSUM) +#define ICE_RSS_TYPE_ETH_IPV4_UDP (ICE_RSS_TYPE_ETH_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_UDP | \ + ETH_RSS_L4_CHKSUM) +#define ICE_RSS_TYPE_ETH_IPV4_TCP (ICE_RSS_TYPE_ETH_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_TCP | \ + ETH_RSS_L4_CHKSUM) +#define ICE_RSS_TYPE_ETH_IPV4_SCTP (ICE_RSS_TYPE_ETH_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_SCTP | \ + ETH_RSS_L4_CHKSUM) +#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 | \ + ETH_RSS_L4_CHKSUM) +#define ICE_RSS_TYPE_ETH_IPV6_TCP (ICE_RSS_TYPE_ETH_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_TCP | \ + ETH_RSS_L4_CHKSUM) +#define ICE_RSS_TYPE_ETH_IPV6_SCTP (ICE_RSS_TYPE_ETH_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_SCTP | \ + ETH_RSS_L4_CHKSUM) +#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) + +/* MAC */ +#define ICE_RSS_TYPE_ETH ETH_RSS_ETH /** * Supported pattern for hash. @@ -399,67 +492,71 @@ 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}, + /* MAC */ + {pattern_ethertype, ICE_RSS_TYPE_ETH, ICE_INSET_NONE, ð_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 = { @@ -529,9 +626,9 @@ ice_hash_parse_pattern(const struct rte_flow_item pattern[], uint64_t *phint, psc = item->spec; if (!psc) break; - else if (psc->pdu_type == ICE_GTPU_EH_UPLINK) + else if (psc->hdr.type == ICE_GTPU_EH_UPLINK) *phint |= ICE_PHINT_GTPU_EH_UP; - else if (psc->pdu_type == ICE_GTPU_EH_DWNLINK) + else if (psc->hdr.type == ICE_GTPU_EH_DWNLINK) *phint |= ICE_PHINT_GTPU_EH_DWN; break; default: @@ -559,6 +656,11 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, *addl_hdrs &= ~ICE_FLOW_SEG_HDR_ETH; } + if (*addl_hdrs & ICE_FLOW_SEG_HDR_ETH_NON_IP) { + if (rss_type & ETH_RSS_ETH) + *hash_flds |= BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_TYPE); + } + if (*addl_hdrs & ICE_FLOW_SEG_HDR_VLAN) { if (rss_type & ETH_RSS_C_VLAN) *hash_flds |= BIT_ULL(ICE_FLOW_FIELD_IDX_C_VLAN); @@ -573,10 +675,16 @@ 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_FRAG_IPV4) { + *addl_hdrs |= ICE_FLOW_SEG_HDR_IPV_FRAG; + *addl_hdrs &= ~(ICE_FLOW_SEG_HDR_IPV_OTHER); + *hash_flds |= + BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_ID); + } 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) @@ -588,14 +696,20 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, } else { *hash_flds &= ~ICE_FLOW_HASH_IPV4; } + + if (rss_type & ETH_RSS_IPV4_CHKSUM) + *hash_flds |= BIT_ULL(ICE_FLOW_FIELD_IDX_IPV4_CHKSUM); } 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_FRAG_IPV6) + *hash_flds |= + BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_ID); 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) @@ -661,6 +775,9 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, } else { *hash_flds &= ~ICE_FLOW_HASH_UDP_PORT; } + + if (rss_type & ETH_RSS_L4_CHKSUM) + *hash_flds |= BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_CHKSUM); } if (*addl_hdrs & ICE_FLOW_SEG_HDR_TCP) { @@ -678,6 +795,9 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, } else { *hash_flds &= ~ICE_FLOW_HASH_TCP_PORT; } + + if (rss_type & ETH_RSS_L4_CHKSUM) + *hash_flds |= BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_CHKSUM); } if (*addl_hdrs & ICE_FLOW_SEG_HDR_SCTP) { @@ -695,6 +815,9 @@ ice_refine_hash_cfg_l234(struct ice_rss_hash_cfg *hash_cfg, } else { *hash_flds &= ~ICE_FLOW_HASH_SCTP_PORT; } + + if (rss_type & ETH_RSS_L4_CHKSUM) + *hash_flds |= BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_CHKSUM); } if (*addl_hdrs & ICE_FLOW_SEG_HDR_L2TPV3) { @@ -770,7 +893,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 +931,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 +1024,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 +1032,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 +1053,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, void **meta, struct rte_flow_error *error) { @@ -929,6 +1062,9 @@ ice_hash_parse_pattern_action(__rte_unused struct ice_adapter *ad, struct ice_rss_meta *rss_meta_ptr; uint64_t phint = ICE_PHINT_NONE; + if (priority >= 1) + return -rte_errno; + rss_meta_ptr = rte_zmalloc(NULL, sizeof(*rss_meta_ptr), 0); if (!rss_meta_ptr) { rte_flow_error_set(error, EINVAL,