Add dpdk per-interface startup config parameter to support rss-flag
New parameter allows specifying rss-flag - one or more of following ipv4-frag ipv4-tcp ipv4-udp ipv4-sctp ipv4-other ipv4 ipv6-tcp-ex ipv6-udp-ex ipv6-frag ipv6-tcp ipv6-udp ipv6-sctp ipv6-other l2-payload ipv6-ex ipv6 Sample config: dpdk { dev 0000:86:00.0 { rss { ipv4 ipv4-tcp ipv4-udp } } } Change-Id: I33c047d69ef8710b8ba3c7e1a1964d5d54f6e880 Signed-off-by: Srivatsa Sangli <srivrama@cisco.com>
This commit is contained in:
@ -315,7 +315,8 @@ typedef struct dpdk_efd_t {
|
||||
_ (num_rx_queues) \
|
||||
_ (num_tx_queues) \
|
||||
_ (num_rx_desc) \
|
||||
_ (num_tx_desc)
|
||||
_ (num_tx_desc) \
|
||||
_ (rss_fn)
|
||||
|
||||
typedef struct {
|
||||
vlib_pci_addr_t pci_addr;
|
||||
@ -617,6 +618,7 @@ format_function_t format_dpdk_rx_dma_trace;
|
||||
format_function_t format_dpdk_rte_mbuf;
|
||||
format_function_t format_dpdk_rx_rte_mbuf;
|
||||
unformat_function_t unformat_socket_mem;
|
||||
clib_error_t * unformat_rss_fn(unformat_input_t * input, uword * rss_fn);
|
||||
|
||||
|
||||
static inline void
|
||||
|
@ -72,13 +72,14 @@
|
||||
_ (rx_errors, q_errors)
|
||||
|
||||
#define foreach_dpdk_rss_hf \
|
||||
_(ETH_RSS_IPV4, "ipv4") \
|
||||
_(ETH_RSS_FRAG_IPV4, "ipv4-frag") \
|
||||
_(ETH_RSS_NONFRAG_IPV4_TCP, "ipv4-tcp") \
|
||||
_(ETH_RSS_NONFRAG_IPV4_UDP, "ipv4-udp") \
|
||||
_(ETH_RSS_NONFRAG_IPV4_SCTP, "ipv4-sctp") \
|
||||
_(ETH_RSS_NONFRAG_IPV4_OTHER, "ipv4-other") \
|
||||
_(ETH_RSS_IPV6, "ipv6") \
|
||||
_(ETH_RSS_IPV4, "ipv4") \
|
||||
_(ETH_RSS_IPV6_TCP_EX, "ipv6-tcp-ex") \
|
||||
_(ETH_RSS_IPV6_UDP_EX, "ipv6-udp-ex") \
|
||||
_(ETH_RSS_FRAG_IPV6, "ipv6-frag") \
|
||||
_(ETH_RSS_NONFRAG_IPV6_TCP, "ipv6-tcp") \
|
||||
_(ETH_RSS_NONFRAG_IPV6_UDP, "ipv6-udp") \
|
||||
@ -86,8 +87,8 @@
|
||||
_(ETH_RSS_NONFRAG_IPV6_OTHER, "ipv6-other") \
|
||||
_(ETH_RSS_L2_PAYLOAD, "l2-payload") \
|
||||
_(ETH_RSS_IPV6_EX, "ipv6-ex") \
|
||||
_(ETH_RSS_IPV6_TCP_EX, "ipv6-tcp-ex") \
|
||||
_(ETH_RSS_IPV6_UDP_EX, "ipv6-udp-ex")
|
||||
_(ETH_RSS_IPV6, "ipv6")
|
||||
|
||||
|
||||
#define foreach_dpdk_rx_offload_caps \
|
||||
_(DEV_RX_OFFLOAD_VLAN_STRIP, "vlan-strip") \
|
||||
@ -833,3 +834,27 @@ unformat_socket_mem (unformat_input_t * input, va_list * va)
|
||||
done:
|
||||
return 1;
|
||||
}
|
||||
|
||||
clib_error_t *
|
||||
unformat_rss_fn (unformat_input_t * input, uword * rss_fn)
|
||||
{
|
||||
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
|
||||
{
|
||||
if (0)
|
||||
;
|
||||
#undef _
|
||||
#define _(f, s) \
|
||||
else if (unformat (input, s)) \
|
||||
*rss_fn |= f;
|
||||
|
||||
foreach_dpdk_rss_hf
|
||||
#undef _
|
||||
|
||||
else
|
||||
{
|
||||
return clib_error_return (0, "unknown input `%U'",
|
||||
format_unformat_error, input);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -355,7 +355,10 @@ dpdk_lib_init (dpdk_main_t * dm)
|
||||
{
|
||||
xd->rx_q_used = devconf->num_rx_queues;
|
||||
xd->port_conf.rxmode.mq_mode = ETH_MQ_RX_RSS;
|
||||
xd->port_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP;
|
||||
if (devconf->rss_fn == 0)
|
||||
xd->port_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP;
|
||||
else
|
||||
xd->port_conf.rx_adv_conf.rss_conf.rss_hf = devconf->rss_fn;
|
||||
}
|
||||
else
|
||||
xd->rx_q_used = 1;
|
||||
@ -854,6 +857,7 @@ dpdk_device_config (dpdk_config_main_t * conf, vlib_pci_addr_t pci_addr, unforma
|
||||
clib_error_t * error = 0;
|
||||
uword * p;
|
||||
dpdk_device_config_t * devconf;
|
||||
unformat_input_t sub_input;
|
||||
|
||||
if (is_default)
|
||||
{
|
||||
@ -891,6 +895,12 @@ dpdk_device_config (dpdk_config_main_t * conf, vlib_pci_addr_t pci_addr, unforma
|
||||
else if (unformat (input, "workers %U", unformat_bitmap_list,
|
||||
&devconf->workers))
|
||||
;
|
||||
else if (unformat (input, "rss %U", unformat_vlib_cli_sub_input, &sub_input))
|
||||
{
|
||||
error = unformat_rss_fn(&sub_input, &devconf->rss_fn);
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
error = clib_error_return (0, "unknown input `%U'",
|
||||
|
Reference in New Issue
Block a user