static void dpdk_ethdev_reta_show(uint8_t port_id, uint16_t reta_size) { int nb_entries = reta_size/RTE_RETA_GROUP_SIZE; struct rte_eth_rss_reta_entry64 reta_entries[nb_entries]; struct rte_eth_rss_reta_entry64 *reta; uint16_t i, idx, shift; int ret, entry; for (entry = 0; entry < nb_entries; entry++) { reta = &reta_entries[entry]; /* reset RSS redirection table */ memset(reta, 0, sizeof(*reta)); reta->mask = 0xffffffffffffffffULL; } ret = rte_eth_dev_rss_reta_query(port_id, reta_entries, reta_size); if (ret != 0) { RTE_LOG(ERR, VROUTER, "Error getting RSS RETA info: %s (%d)\n", rte_strerror(ret), ret); return; } for (i = 0; i < reta_size; i++) { idx = i / RTE_RETA_GROUP_SIZE; shift = i % RTE_RETA_GROUP_SIZE; if (!(reta_entries[idx].mask & (1ULL << shift))) continue; RTE_LOG(DEBUG, VROUTER, " hash index=%u, queue=%u\n", i, reta_entries[idx].reta[shift]); } }
static void port_rss_reta_info(portid_t port_id, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t nb_entries) { uint16_t i, idx, shift; int ret; ret = rte_eth_dev_rss_reta_query(port_id, reta_conf, nb_entries); if (ret != 0) { RTE_LOG(ERR, CMDLINE1, "Failed to get RSS RETA info, return code = %d\n", ret); return; } for (i = 0; i < nb_entries; i++) { idx = i / RTE_RETA_GROUP_SIZE; shift = i % RTE_RETA_GROUP_SIZE; if (!(reta_conf[idx].mask & (1ULL << shift))) { continue; } RTE_LOG(ERR, CMDLINE1, "RSS RETA configuration: hash index=%u, queue=%u\n", i, reta_conf[idx].reta[shift]); } }