net/hns3: fix IPv4 RSS
When user only use 'ipv4' to set 'rss_hf', hns3 will enable all tuple fields for 'ipv4' flow. But if user use 'ipv4-tcp' , 'ipv4' and 'l4-src-only' to set 'rss_hf', driver does not enable all tuple fields for 'ipv4' flow. Fixes: 806f1d5ab0e3 ("net/hns3: set RSS hash type input configuration") Cc: stable@dpdk.org Signed-off-by: Huisong Li <lihuisong@huawei.com> Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
This commit is contained in:
parent
2ecfc36ce1
commit
2bd90635bd
@ -70,130 +70,209 @@ enum hns3_tuple_field {
|
||||
HNS3_RSS_FIELD_IPV6_FRAG_IP_S
|
||||
};
|
||||
|
||||
static const struct {
|
||||
uint64_t rss_types;
|
||||
uint64_t rss_field;
|
||||
} hns3_set_tuple_table[] = {
|
||||
{ RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) },
|
||||
{ RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D) },
|
||||
{ RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
|
||||
enum hns3_rss_tuple_type {
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
};
|
||||
|
||||
static const struct {
|
||||
uint64_t rss_types;
|
||||
uint16_t tuple_type;
|
||||
uint64_t rss_field;
|
||||
} hns3_set_rss_types[] = {
|
||||
{ RTE_ETH_RSS_FRAG_IPV4, BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) |
|
||||
} hns3_set_tuple_table[] = {
|
||||
/* IPV4-FRAG */
|
||||
{ RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) |
|
||||
{ RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_FRAG_IPV4,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_FRAG_IP_D) },
|
||||
|
||||
/* IPV4 */
|
||||
{ RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_IPV4,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
|
||||
/* IPV4-OTHER */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_OTHER | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_OTHER,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
|
||||
/* IPV4-TCP */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_TCP,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_IP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_TCP_EN_TCP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) |
|
||||
|
||||
/* IPV4-UDP */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_UDP,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_IP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_UDP_EN_UDP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) |
|
||||
|
||||
/* IPV4-SCTP */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_SCTP,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_VER) },
|
||||
{ RTE_ETH_RSS_IPV4,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV4_OTHER,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_FRAG_IPV6, BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) |
|
||||
|
||||
/* IPV6-FRAG */
|
||||
{ RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP, BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) |
|
||||
{ RTE_ETH_RSS_FRAG_IPV6,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_FRAG_IP_D) },
|
||||
|
||||
/* IPV6 */
|
||||
{ RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_IPV6,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
|
||||
|
||||
/* IPV6-OTHER */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_OTHER | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_OTHER,
|
||||
HNS3_RSS_IP_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
|
||||
|
||||
/* IPV6-TCP */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_TCP,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_IP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_TCP_EN_TCP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP, BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) |
|
||||
|
||||
/* IPV6-UDP */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_UDP,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_IP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_UDP_EN_UDP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP, BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) |
|
||||
|
||||
/* IPV6-SCTP */
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L3_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_SRC_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_L4_DST_ONLY,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_SCTP,
|
||||
HNS3_RSS_IP_L4_TUPLE,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_VER) },
|
||||
{ RTE_ETH_RSS_IPV6,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) },
|
||||
{ RTE_ETH_RSS_NONFRAG_IPV6_OTHER,
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_S) |
|
||||
BIT_ULL(HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D) }
|
||||
};
|
||||
|
||||
/*
|
||||
@ -321,46 +400,53 @@ hns3_rss_reset_indir_table(struct hns3_hw *hw)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
hns3_rss_calc_tuple_filed(uint64_t rss_hf)
|
||||
{
|
||||
uint64_t l3_only_mask = RTE_ETH_RSS_L3_SRC_ONLY |
|
||||
RTE_ETH_RSS_L3_DST_ONLY;
|
||||
uint64_t l4_only_mask = RTE_ETH_RSS_L4_SRC_ONLY |
|
||||
RTE_ETH_RSS_L4_DST_ONLY;
|
||||
uint64_t l3_l4_only_mask = l3_only_mask | l4_only_mask;
|
||||
bool has_l3_l4_only = !!(rss_hf & l3_l4_only_mask);
|
||||
bool has_l3_only = !!(rss_hf & l3_only_mask);
|
||||
uint64_t tuple = 0;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < RTE_DIM(hns3_set_tuple_table); i++) {
|
||||
if ((rss_hf & hns3_set_tuple_table[i].rss_types) !=
|
||||
hns3_set_tuple_table[i].rss_types)
|
||||
continue;
|
||||
|
||||
if (hns3_set_tuple_table[i].tuple_type == HNS3_RSS_IP_TUPLE) {
|
||||
if (hns3_set_tuple_table[i].rss_types & l3_only_mask ||
|
||||
!has_l3_only)
|
||||
tuple |= hns3_set_tuple_table[i].rss_field;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* For IP types with L4, we need check both L3 and L4 */
|
||||
if (hns3_set_tuple_table[i].rss_types & l3_l4_only_mask ||
|
||||
!has_l3_l4_only)
|
||||
tuple |= hns3_set_tuple_table[i].rss_field;
|
||||
}
|
||||
|
||||
return tuple;
|
||||
}
|
||||
|
||||
int
|
||||
hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf)
|
||||
{
|
||||
struct hns3_rss_input_tuple_cmd *req;
|
||||
struct hns3_cmd_desc desc;
|
||||
uint32_t fields_count = 0; /* count times for setting tuple fields */
|
||||
uint32_t i;
|
||||
uint64_t tuple_field;
|
||||
int ret;
|
||||
|
||||
hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_RSS_INPUT_TUPLE, false);
|
||||
|
||||
req = (struct hns3_rss_input_tuple_cmd *)desc.data;
|
||||
|
||||
for (i = 0; i < RTE_DIM(hns3_set_tuple_table); i++) {
|
||||
if ((rss_hf & hns3_set_tuple_table[i].rss_types) ==
|
||||
hns3_set_tuple_table[i].rss_types) {
|
||||
req->tuple_field |=
|
||||
rte_cpu_to_le_64(hns3_set_tuple_table[i].rss_field);
|
||||
fields_count++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* When user does not specify the following types or a combination of
|
||||
* the following types, it enables all fields for the supported RSS
|
||||
* types. the following types as:
|
||||
* - RTE_ETH_RSS_L3_SRC_ONLY
|
||||
* - RTE_ETH_RSS_L3_DST_ONLY
|
||||
* - RTE_ETH_RSS_L4_SRC_ONLY
|
||||
* - RTE_ETH_RSS_L4_DST_ONLY
|
||||
*/
|
||||
if (fields_count == 0) {
|
||||
for (i = 0; i < RTE_DIM(hns3_set_rss_types); i++) {
|
||||
if ((rss_hf & hns3_set_rss_types[i].rss_types) ==
|
||||
hns3_set_rss_types[i].rss_types)
|
||||
req->tuple_field |= rte_cpu_to_le_64(
|
||||
hns3_set_rss_types[i].rss_field);
|
||||
}
|
||||
}
|
||||
|
||||
tuple_field = hns3_rss_calc_tuple_filed(rss_hf);
|
||||
req->tuple_field = rte_cpu_to_le_64(tuple_field);
|
||||
ret = hns3_cmd_send(hw, &desc, 1);
|
||||
if (ret) {
|
||||
hns3_err(hw, "Update RSS flow types tuples failed %d", ret);
|
||||
|
Loading…
x
Reference in New Issue
Block a user