From 9822729742168c877a301ff50a3a1067b90a89ad Mon Sep 17 00:00:00 2001 From: Vladimir Ratnikov Date: Wed, 11 Nov 2020 08:00:48 -0500 Subject: dpdk: allow configure individual VMBUS devices now startup.conf supports confuguration for VMBUS devices as for PCI devices for whitelisting/blacklisting dpdk { dev fa5a6e7a-cf3a-4b98-9569-addb479b84bc } with sub-configuration as for PCI devices dpdk { blacklist fa5a6e7a-cf3a-4b98-9569-addb479b84bc } where fa5a6e7a-cf3a-4b98-9569-addb479b84bc - example of UUID struct vlib_vmbus_addr_t changed to union with UUID described fields Added device_config_index_by_vmbus_addr blacklist_by_vmbus_addr to enumerate available device configs hash_key is as_u32[0] field(last 4 bytes of UUID) Lost of precision against full UUID, but 2^32 is enough to handle all the devices available Added is_blacklisted check while creating vnet devices in order to supress creation of dev if it's blacklisted Type: feature Signed-off-by: Vladimir Ratnikov Change-Id: Id82611e54fed082190e488c7e5fbe14ecbe5b2ab --- src/vlib/linux/vmbus.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/vlib/linux/vmbus.c') diff --git a/src/vlib/linux/vmbus.c b/src/vlib/linux/vmbus.c index 2fc438b4778..d50b539910b 100644 --- a/src/vlib/linux/vmbus.c +++ b/src/vlib/linux/vmbus.c @@ -118,8 +118,8 @@ linux_vmbus_main_t linux_vmbus_main; * "f2c086b2-ff2e-11e8-88de-7bad0a57de05" and convert * it to u8[16] */ -static uword -unformat_vlib_vmbus_addr (unformat_input_t * input, va_list * args) +uword +unformat_vlib_vmbus_addr (unformat_input_t *input, va_list *args) { vlib_vmbus_addr_t *addr = va_arg (*args, vlib_vmbus_addr_t *); uword ret = 0; @@ -137,8 +137,8 @@ unformat_vlib_vmbus_addr (unformat_input_t * input, va_list * args) } /* Convert bus address to standard UUID string */ -static u8 * -format_vlib_vmbus_addr (u8 * s, va_list * va) +u8 * +format_vlib_vmbus_addr (u8 *s, va_list *va) { vlib_vmbus_addr_t *addr = va_arg (*va, vlib_vmbus_addr_t *); char tmp[40]; @@ -297,15 +297,21 @@ vlib_vmbus_bind_to_uio (vlib_vmbus_addr_t * addr) vec_reset_length (s); s = format (s, "%s/%s/new_id%c", sysfs_vmbus_drv_path, uio_drv_name, 0); error = clib_sysfs_write ((char *) s, "%s", netvsc_uuid); - + /* If device already exists, we can bind/unbind/override driver */ if (error) { - close (fd); - goto done; + if (error->code == EEXIST) + { + clib_error_free (error); + } + else + { + close (fd); + goto done; + } } uio_new_id_needed = 0; - } error = vlib_vmbus_raise_lower (fd, ifname); -- cgit 1.2.3-korg