// init server socket on specified sock_filename
static int vhost_user_init_server_sock(const char * sock_filename, int *sockfd)
{
- int rv = 0, len;
- struct sockaddr_un un;
+ int rv = 0;
+ struct sockaddr_un un = {};
int fd;
/* create listening socket */
fd = socket(AF_UNIX, SOCK_STREAM, 0);
/* remove if exists */
unlink( (char *) sock_filename);
- len = strlen((char *) un.sun_path) + strlen((char *) sock_filename);
-
- if (bind(fd, (struct sockaddr *) &un, len) == -1) {
+ if (bind(fd, (struct sockaddr *) &un, sizeof(un)) == -1) {
rv = VNET_API_ERROR_SYSCALL_ERROR_2;
goto error;
}
if (tm->n_vlib_mains == 1)
vlib_node_set_state (vm, vhost_user_input_node.index,
VLIB_NODE_STATE_POLLING);
- else if (!dm->have_io_threads)
+ else
vlib_node_set_state (vlib_mains[cpu_index], vhost_user_input_node.index,
VLIB_NODE_STATE_POLLING);
u8 *hwaddr)
{
vhost_user_intf_t * vui = NULL;
- dpdk_main_t * dm = &dpdk_main;
- vlib_thread_main_t * tm = vlib_get_thread_main();
u32 sw_if_idx = ~0;
int sockfd = -1;
int rv = 0;
- if (tm->n_vlib_mains > 1 && dm->have_io_threads)
- {
- clib_warning("vhost-user interfaces are not supported with multiple io threads");
- return -1;
- }
-
if (is_server) {
if ((rv = vhost_user_init_server_sock (sock_filename, &sockfd)) != 0) {
return rv;
vnet_main_t *vnm = vnet_get_main();
- vhost_user_create_if(vnm, vm, (char *)sock_filename,
+ int rv;
+ if ((rv = vhost_user_create_if(vnm, vm, (char *)sock_filename,
is_server, &sw_if_index, feature_mask,
- renumber, custom_dev_instance, hw);
+ renumber, custom_dev_instance, hw))) {
+ vec_free(sock_filename);
+ return clib_error_return (0, "vhost_user_create_if returned %d", rv);
+ }
vec_free(sock_filename);
vlib_cli_output(vm, "%U\n", format_vnet_sw_if_index_name, vnet_get_main(), sw_if_index);