diff options
Diffstat (limited to 'src/vlib')
-rw-r--r-- | src/vlib/linux/vmbus.c | 22 | ||||
-rw-r--r-- | src/vlib/vmbus/vmbus.c | 15 | ||||
-rw-r--r-- | src/vlib/vmbus/vmbus.h | 6 |
3 files changed, 33 insertions, 10 deletions
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); diff --git a/src/vlib/vmbus/vmbus.c b/src/vlib/vmbus/vmbus.c index eadf5f176d6..045e2dd9503 100644 --- a/src/vlib/vmbus/vmbus.c +++ b/src/vlib/vmbus/vmbus.c @@ -25,11 +25,24 @@ #include <net/if.h> /* this is a stub replaced by the Linux specfic version */ -vlib_vmbus_addr_t * __attribute__ ((weak)) vlib_vmbus_get_all_dev_addrs () +vlib_vmbus_addr_t *__clib_weak +vlib_vmbus_get_all_dev_addrs () { return NULL; } +u8 *__clib_weak +format_vlib_vmbus_addr (u8 *s, va_list *va) +{ + return 0; +} + +uword __clib_weak +unformat_vlib_vmbus_addr (unformat_input_t *input, va_list *args) +{ + return 0; +} + clib_error_t * vmbus_bus_init (vlib_main_t * vm) { diff --git a/src/vlib/vmbus/vmbus.h b/src/vlib/vmbus/vmbus.h index 0927b8990d6..7df62ab4d16 100644 --- a/src/vlib/vmbus/vmbus.h +++ b/src/vlib/vmbus/vmbus.h @@ -21,10 +21,12 @@ #include <vlib/vlib.h> -typedef struct +typedef union { u8 guid[16]; + u32 as_u32[4]; } vlib_vmbus_addr_t; + typedef u32 vlib_vmbus_dev_handle_t; vlib_vmbus_addr_t *vlib_vmbus_get_all_dev_addrs (); @@ -33,6 +35,8 @@ uword vlib_vmbus_get_private_data (vlib_vmbus_dev_handle_t h); void vlib_vmbus_set_private_data (vlib_vmbus_dev_handle_t h, uword private_data); +format_function_t format_vlib_vmbus_addr; +unformat_function_t unformat_vlib_vmbus_addr; clib_error_t *vlib_vmbus_bind_to_uio (vlib_vmbus_addr_t * addr); #endif /* included_vlib_vmbus_h */ |