X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fice_hash.c;h=3bc16139d114f09f368526b11af5aca8d9f81dd5;hb=9ce0d199860f28c5920c4e2de3a43800f6daca12;hp=58a0c18d099ad7ebc7c3b09b40ea46c81b7fead2;hpb=817c9a047749332a5b8c3ebcf28e1fe9159e5b9d;p=dpdk.git diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index 58a0c18d09..3bc16139d1 100644 --- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c @@ -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,6 +145,14 @@ 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_HASH_ETH | ICE_FLOW_HASH_IPV6, ICE_RSS_ANY_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,7 +177,7 @@ 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 }; @@ -198,6 +209,7 @@ struct ice_rss_hash_cfg outer_ipv6_inner_ipv4_tmplt = { 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, @@ -220,6 +232,7 @@ struct ice_rss_hash_cfg outer_ipv4_inner_ipv6_tmplt = { 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, @@ -262,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 }; @@ -270,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 }; @@ -278,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 }; @@ -286,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 }; @@ -294,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 }; @@ -302,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 }; @@ -310,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 }; @@ -318,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 }; @@ -326,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 }; @@ -334,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 }; @@ -353,7 +366,8 @@ struct ice_rss_hash_cfg empty_tmplt = { }; /* IPv4 */ -#define ICE_RSS_TYPE_ETH_IPV4 (ETH_RSS_ETH | ETH_RSS_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 | \ @@ -370,6 +384,8 @@ struct ice_rss_hash_cfg empty_tmplt = { /* IPv6 */ #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 | \ @@ -386,7 +402,8 @@ struct ice_rss_hash_cfg empty_tmplt = { /* VLAN IPV4 */ #define ICE_RSS_TYPE_VLAN_IPV4 (ICE_RSS_TYPE_IPV4 | \ - ETH_RSS_S_VLAN | ETH_RSS_C_VLAN) + 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_IPV4_TCP | \ @@ -396,6 +413,9 @@ struct ice_rss_hash_cfg empty_tmplt = { /* VLAN 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_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_IPV6_TCP | \ @@ -485,10 +505,12 @@ static struct ice_pattern_match_item ice_hash_pattern_list[] = { {pattern_eth_ipv4_pfcp, ICE_RSS_TYPE_IPV4_PFCP, ICE_INSET_NONE, ð_ipv4_pfcp_tmplt}, /* IPV6 */ {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}, @@ -629,10 +651,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) @@ -648,10 +676,13 @@ 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_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) @@ -826,7 +857,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 @@ -865,6 +898,7 @@ ice_any_invalid_rss_type(enum rte_eth_hash_function rss_func, 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))) @@ -983,6 +1017,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) {