net/hns3: add L3 and L4 RSS types
When user set 'L3_SRC/DST_ONLY' or 'L4_SRC/DST_ONLY' to 'rss_hf' and
do not specify the packet type, these types will be set to hardware.
Fixes: 806f1d5ab0
("net/hns3: set RSS hash type input configuration")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
This commit is contained in:
parent
2bd90635bd
commit
13c3993240
@ -400,8 +400,34 @@ hns3_rss_reset_indir_table(struct hns3_hw *hw)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
hns3_rss_check_l3l4_types(struct hns3_hw *hw, uint64_t rss_hf)
|
||||
{
|
||||
uint64_t ip_mask = RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_FRAG_IPV4 |
|
||||
RTE_ETH_RSS_NONFRAG_IPV4_OTHER |
|
||||
RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_FRAG_IPV6 |
|
||||
RTE_ETH_RSS_NONFRAG_IPV6_OTHER;
|
||||
uint64_t l4_mask = RTE_ETH_RSS_NONFRAG_IPV4_TCP |
|
||||
RTE_ETH_RSS_NONFRAG_IPV4_UDP |
|
||||
RTE_ETH_RSS_NONFRAG_IPV4_SCTP |
|
||||
RTE_ETH_RSS_NONFRAG_IPV6_TCP |
|
||||
RTE_ETH_RSS_NONFRAG_IPV6_UDP |
|
||||
RTE_ETH_RSS_NONFRAG_IPV6_SCTP;
|
||||
uint64_t l3_src_dst_mask = RTE_ETH_RSS_L3_SRC_ONLY |
|
||||
RTE_ETH_RSS_L3_DST_ONLY;
|
||||
uint64_t l4_src_dst_mask = RTE_ETH_RSS_L4_SRC_ONLY |
|
||||
RTE_ETH_RSS_L4_DST_ONLY;
|
||||
|
||||
if (rss_hf & l3_src_dst_mask &&
|
||||
!(rss_hf & ip_mask || rss_hf & l4_mask))
|
||||
hns3_warn(hw, "packet type isn't specified, L3_SRC/DST_ONLY is ignored.");
|
||||
|
||||
if (rss_hf & l4_src_dst_mask && !(rss_hf & l4_mask))
|
||||
hns3_warn(hw, "packet type isn't specified, L4_SRC/DST_ONLY is ignored.");
|
||||
}
|
||||
|
||||
static uint64_t
|
||||
hns3_rss_calc_tuple_filed(uint64_t rss_hf)
|
||||
hns3_rss_calc_tuple_filed(struct hns3_hw *hw, uint64_t rss_hf)
|
||||
{
|
||||
uint64_t l3_only_mask = RTE_ETH_RSS_L3_SRC_ONLY |
|
||||
RTE_ETH_RSS_L3_DST_ONLY;
|
||||
@ -430,6 +456,7 @@ hns3_rss_calc_tuple_filed(uint64_t rss_hf)
|
||||
!has_l3_l4_only)
|
||||
tuple |= hns3_set_tuple_table[i].rss_field;
|
||||
}
|
||||
hns3_rss_check_l3l4_types(hw, rss_hf);
|
||||
|
||||
return tuple;
|
||||
}
|
||||
@ -445,7 +472,7 @@ hns3_set_rss_tuple_by_rss_hf(struct hns3_hw *hw, uint64_t rss_hf)
|
||||
hns3_cmd_setup_basic_desc(&desc, HNS3_OPC_RSS_INPUT_TUPLE, false);
|
||||
req = (struct hns3_rss_input_tuple_cmd *)desc.data;
|
||||
|
||||
tuple_field = hns3_rss_calc_tuple_filed(rss_hf);
|
||||
tuple_field = hns3_rss_calc_tuple_filed(hw, rss_hf);
|
||||
req->tuple_field = rte_cpu_to_le_64(tuple_field);
|
||||
ret = hns3_cmd_send(hw, &desc, 1);
|
||||
if (ret) {
|
||||
|
Loading…
Reference in New Issue
Block a user