summaryrefslogtreecommitdiffstats
path: root/src/vnet/interface.c
diff options
context:
space:
mode:
authorChenmin Sun <chenmin.sun@intel.com>2020-07-06 08:20:39 +0800
committerDamjan Marion <dmarion@me.com>2020-09-09 10:12:06 +0000
commitc4665093cdb0a8122d9640b6f5b3acd627918f32 (patch)
tree08a3babefc4f126dec07740628d094fd24413e36 /src/vnet/interface.c
parent765008670bec75cab679c4f549c5dac744842887 (diff)
interface: support configuring RSS steering queues
This patch adds the RSS steering queues set interface, and it's implementation in DPDK device: /* Interface to set rss queues of the interface */ typedef clib_error_t *(vnet_interface_rss_queues_set_t) (struct vnet_main_t * vnm, struct vnet_hw_interface_t * hi, clib_bitmap_t *bitmap); This patch also introduces a command line to set the RSS queues: set interface rss queues <interface> <list <queue-list>> To display the rss queues, use "show hardware-interfaces" Below is the example to configure rss queues for interface Gig0: vpp# set interface rss queues Gig0 list 0,2,4-7 vpp# show hardware-interfaces brief Name Idx Link Hardware VirtualFunctionEthernet18/1/0 1 down VirtualFunctionEthernet18/1/0 Link speed: unknown RSS queues: 0 2 4 5 6 7 local0 0 down local0 Link speed: unknown vpp# Users can also configure the rss queues on a dpdk interface in startup.conf: dpdk { dev 0000:18:01.0 { rss-queues 0,2,5-7 } } Type: feature Signed-off-by: Chenmin Sun <chenmin.sun@intel.com> Change-Id: I1835595a1c54016a84eabee9fd62ce137935385d
Diffstat (limited to 'src/vnet/interface.c')
-rw-r--r--src/vnet/interface.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/vnet/interface.c b/src/vnet/interface.c
index 6d5b3561f19..18c7696e9a4 100644
--- a/src/vnet/interface.c
+++ b/src/vnet/interface.c
@@ -1692,6 +1692,42 @@ default_update_adjacency (vnet_main_t * vnm, u32 sw_if_index, u32 ai)
}
}
+clib_error_t *
+vnet_hw_interface_set_rss_queues (vnet_main_t * vnm,
+ vnet_hw_interface_t * hi,
+ clib_bitmap_t * bitmap)
+{
+ clib_error_t *error = 0;
+ vnet_device_class_t *dev_class =
+ vnet_get_device_class (vnm, hi->dev_class_index);
+
+ if (dev_class->set_rss_queues_function)
+ {
+ if (clib_bitmap_count_set_bits (bitmap) == 0)
+ {
+ error = clib_error_return (0,
+ "must assign at least one valid rss queue");
+ goto done;
+ }
+
+ error = dev_class->set_rss_queues_function (vnm, hi, bitmap);
+ }
+ else
+ {
+ error = clib_error_return (0,
+ "setting rss queues is not supported on this interface");
+ }
+
+ if (!error)
+ {
+ clib_bitmap_free (hi->rss_queues);
+ hi->rss_queues = clib_bitmap_dup (bitmap);
+ }
+
+done:
+ return error;
+}
+
int collect_detailed_interface_stats_flag = 0;
void