From 8d54ede738691c656914228030ed463acb39b63e Mon Sep 17 00:00:00 2001 From: Ophir Munk Date: Tue, 8 May 2018 17:07:35 +0000 Subject: [PATCH] net/tap: report on supported RSS hash functions Report on TAP supported RSS functions as part of dev_infos_get callback: ETH_RSS_IP, ETH_RSS_UDP and ETH_RSS_TCP. Known limitation: TAP supports all of the above hash functions together and not in partial combinations. Previous to this commit RSS support was reported as none. Since the introduction of [1] it is required that all RSS configurations will be verified. [1] commit 8863a1fbfc66 ("ethdev: add supported hash function check") Signed-off-by: Ophir Munk Reviewed-by: Ferruh Yigit --- doc/guides/nics/tap.rst | 5 +++++ drivers/net/tap/rte_eth_tap.c | 8 ++++++++ drivers/net/tap/tap_bpf_program.c | 2 +- drivers/net/tap/tap_rss.h | 3 +++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/guides/nics/tap.rst b/doc/guides/nics/tap.rst index dca64c98d4..27148681c8 100644 --- a/doc/guides/nics/tap.rst +++ b/doc/guides/nics/tap.rst @@ -258,6 +258,11 @@ Please refer to ``iproute2`` package file ``lib/bpf.c`` function An example utility for eBPF instruction generation in the format of C arrays will be added in next releases +TAP reports on supported RSS functions as part of dev_infos_get callback: +``ETH_RSS_IP``, ``ETH_RSS_UDP`` and ``ETH_RSS_TCP``. +**Known limitation:** TAP supports all of the above hash functions together +and not in partial combinations. + Systems supporting flow API --------------------------- diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 172a7ba4c8..b9dac19ccd 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -35,6 +35,7 @@ #include #include +#include #include #include #include @@ -758,6 +759,13 @@ tap_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->tx_queue_offload_capa = tap_tx_offload_get_queue_capa(); dev_info->tx_offload_capa = tap_tx_offload_get_port_capa() | dev_info->tx_queue_offload_capa; + dev_info->hash_key_size = TAP_RSS_HASH_KEY_SIZE; + /* + * limitation: TAP suppors all of the following hash + * functions together and not in partial combinations + */ + dev_info->flow_type_rss_offloads = + ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP; } static int diff --git a/drivers/net/tap/tap_bpf_program.c b/drivers/net/tap/tap_bpf_program.c index dabbf7c24f..1cb73822f3 100644 --- a/drivers/net/tap/tap_bpf_program.c +++ b/drivers/net/tap/tap_bpf_program.c @@ -84,7 +84,7 @@ struct ipv6_l3_l4_tuple { __u16 sport; } __attribute__((packed)); -static const __u8 def_rss_key[] = { +static const __u8 def_rss_key[TAP_RSS_HASH_KEY_SIZE] = { 0xd1, 0x81, 0xc6, 0x2c, 0xf7, 0xf4, 0xdb, 0x5b, 0x19, 0x83, 0xa2, 0xfc, diff --git a/drivers/net/tap/tap_rss.h b/drivers/net/tap/tap_rss.h index 4ebb6535d2..bd6b97b4da 100644 --- a/drivers/net/tap/tap_rss.h +++ b/drivers/net/tap/tap_rss.h @@ -9,6 +9,9 @@ #define TAP_MAX_QUEUES 16 #endif +/* Fixed RSS hash key size in bytes. */ +#define TAP_RSS_HASH_KEY_SIZE 40 + /* hashed fields for RSS */ enum hash_field { HASH_FIELD_IPV4_L3, /* IPv4 src/dst addr */ -- 2.20.1