Lines Matching refs:vsocket
64 struct vhost_user_socket *vsocket; member
83 static int create_unix_socket(struct vhost_user_socket *vsocket);
84 static int vhost_user_start_client(struct vhost_user_socket *vsocket);
204 vhost_user_add_connection(int fd, struct vhost_user_socket *vsocket) in vhost_user_add_connection() argument
212 if (vsocket == NULL) in vhost_user_add_connection()
226 size = strnlen(vsocket->path, PATH_MAX); in vhost_user_add_connection()
227 vhost_set_ifname(vid, vsocket->path, size); in vhost_user_add_connection()
229 vhost_setup_virtio_net(vid, vsocket->use_builtin_virtio_net, in vhost_user_add_connection()
230 vsocket->net_compliant_ol_flags); in vhost_user_add_connection()
232 vhost_attach_vdpa_device(vid, vsocket->vdpa_dev); in vhost_user_add_connection()
234 if (vsocket->extbuf) in vhost_user_add_connection()
237 if (vsocket->linearbuf) in vhost_user_add_connection()
240 if (vsocket->async_copy) { in vhost_user_add_connection()
247 VHOST_LOG_CONFIG(INFO, "(%s) new device, handle is %d\n", vsocket->path, vid); in vhost_user_add_connection()
249 if (vsocket->notify_ops->new_connection) { in vhost_user_add_connection()
250 ret = vsocket->notify_ops->new_connection(vid); in vhost_user_add_connection()
254 vsocket->path, fd); in vhost_user_add_connection()
260 conn->vsocket = vsocket; in vhost_user_add_connection()
266 vsocket->path, fd); in vhost_user_add_connection()
268 if (vsocket->notify_ops->destroy_connection) in vhost_user_add_connection()
269 vsocket->notify_ops->destroy_connection(conn->vid); in vhost_user_add_connection()
274 pthread_mutex_lock(&vsocket->conn_mutex); in vhost_user_add_connection()
275 TAILQ_INSERT_TAIL(&vsocket->conn_list, conn, next); in vhost_user_add_connection()
276 pthread_mutex_unlock(&vsocket->conn_mutex); in vhost_user_add_connection()
292 struct vhost_user_socket *vsocket = dat; in vhost_user_server_new_connection() local
299 vsocket->path, fd); in vhost_user_server_new_connection()
300 vhost_user_add_connection(fd, vsocket); in vhost_user_server_new_connection()
307 struct vhost_user_socket *vsocket = conn->vsocket; in vhost_user_read_cb() local
320 if (vsocket->notify_ops->destroy_connection) in vhost_user_read_cb()
321 vsocket->notify_ops->destroy_connection(conn->vid); in vhost_user_read_cb()
325 if (vsocket->reconnect) { in vhost_user_read_cb()
326 create_unix_socket(vsocket); in vhost_user_read_cb()
327 vhost_user_start_client(vsocket); in vhost_user_read_cb()
330 pthread_mutex_lock(&vsocket->conn_mutex); in vhost_user_read_cb()
331 TAILQ_REMOVE(&vsocket->conn_list, conn, next); in vhost_user_read_cb()
332 pthread_mutex_unlock(&vsocket->conn_mutex); in vhost_user_read_cb()
339 create_unix_socket(struct vhost_user_socket *vsocket) in create_unix_socket() argument
342 struct sockaddr_un *un = &vsocket->un; in create_unix_socket()
348 vsocket->path, vsocket->is_server ? "server" : "client", fd); in create_unix_socket()
350 if (!vsocket->is_server && fcntl(fd, F_SETFL, O_NONBLOCK)) { in create_unix_socket()
353 vsocket->path, fd, strerror(errno)); in create_unix_socket()
360 strncpy(un->sun_path, vsocket->path, sizeof(un->sun_path)); in create_unix_socket()
363 vsocket->socket_fd = fd; in create_unix_socket()
368 vhost_user_start_server(struct vhost_user_socket *vsocket) in vhost_user_start_server() argument
371 int fd = vsocket->socket_fd; in vhost_user_start_server()
372 const char *path = vsocket->path; in vhost_user_start_server()
384 ret = bind(fd, (struct sockaddr *)&vsocket->un, sizeof(vsocket->un)); in vhost_user_start_server()
397 NULL, vsocket); in vhost_user_start_server()
415 struct vhost_user_socket *vsocket; member
468 ret = vhost_user_connect_nonblock(reconn->vsocket->path, reconn->fd, in vhost_user_client_reconnect()
474 reconn->vsocket->path, reconn->fd); in vhost_user_client_reconnect()
480 VHOST_LOG_CONFIG(INFO, "(%s) connected\n", reconn->vsocket->path); in vhost_user_client_reconnect()
481 vhost_user_add_connection(reconn->fd, reconn->vsocket); in vhost_user_client_reconnect()
518 vhost_user_start_client(struct vhost_user_socket *vsocket) in vhost_user_start_client() argument
521 int fd = vsocket->socket_fd; in vhost_user_start_client()
522 const char *path = vsocket->path; in vhost_user_start_client()
525 ret = vhost_user_connect_nonblock(vsocket->path, fd, (struct sockaddr *)&vsocket->un, in vhost_user_start_client()
526 sizeof(vsocket->un)); in vhost_user_start_client()
528 vhost_user_add_connection(fd, vsocket); in vhost_user_start_client()
534 if (ret == -2 || !vsocket->reconnect) { in vhost_user_start_client()
546 reconn->un = vsocket->un; in vhost_user_start_client()
548 reconn->vsocket = vsocket; in vhost_user_start_client()
565 struct vhost_user_socket *vsocket = vhost_user.vsockets[i]; in find_vhost_user_socket() local
567 if (!strcmp(vsocket->path, path)) in find_vhost_user_socket()
568 return vsocket; in find_vhost_user_socket()
578 struct vhost_user_socket *vsocket; in rte_vhost_driver_attach_vdpa_device() local
584 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_attach_vdpa_device()
585 if (vsocket) in rte_vhost_driver_attach_vdpa_device()
586 vsocket->vdpa_dev = dev; in rte_vhost_driver_attach_vdpa_device()
589 return vsocket ? 0 : -1; in rte_vhost_driver_attach_vdpa_device()
595 struct vhost_user_socket *vsocket; in rte_vhost_driver_detach_vdpa_device() local
598 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_detach_vdpa_device()
599 if (vsocket) in rte_vhost_driver_detach_vdpa_device()
600 vsocket->vdpa_dev = NULL; in rte_vhost_driver_detach_vdpa_device()
603 return vsocket ? 0 : -1; in rte_vhost_driver_detach_vdpa_device()
609 struct vhost_user_socket *vsocket; in rte_vhost_driver_get_vdpa_device() local
613 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_get_vdpa_device()
614 if (vsocket) in rte_vhost_driver_get_vdpa_device()
615 dev = vsocket->vdpa_dev; in rte_vhost_driver_get_vdpa_device()
624 struct vhost_user_socket *vsocket; in rte_vhost_driver_disable_features() local
627 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_disable_features()
634 if (vsocket) in rte_vhost_driver_disable_features()
635 vsocket->features &= ~features; in rte_vhost_driver_disable_features()
638 return vsocket ? 0 : -1; in rte_vhost_driver_disable_features()
644 struct vhost_user_socket *vsocket; in rte_vhost_driver_enable_features() local
647 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_enable_features()
648 if (vsocket) { in rte_vhost_driver_enable_features()
649 if ((vsocket->supported_features & features) != features) { in rte_vhost_driver_enable_features()
657 vsocket->features |= features; in rte_vhost_driver_enable_features()
661 return vsocket ? 0 : -1; in rte_vhost_driver_enable_features()
667 struct vhost_user_socket *vsocket; in rte_vhost_driver_set_features() local
670 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_set_features()
671 if (vsocket) { in rte_vhost_driver_set_features()
672 vsocket->supported_features = features; in rte_vhost_driver_set_features()
673 vsocket->features = features; in rte_vhost_driver_set_features()
678 vsocket->use_builtin_virtio_net = false; in rte_vhost_driver_set_features()
682 return vsocket ? 0 : -1; in rte_vhost_driver_set_features()
688 struct vhost_user_socket *vsocket; in rte_vhost_driver_get_features() local
694 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_get_features()
695 if (!vsocket) { in rte_vhost_driver_get_features()
701 vdpa_dev = vsocket->vdpa_dev; in rte_vhost_driver_get_features()
703 *features = vsocket->features; in rte_vhost_driver_get_features()
713 *features = vsocket->features & vdpa_features; in rte_vhost_driver_get_features()
724 struct vhost_user_socket *vsocket; in rte_vhost_driver_set_protocol_features() local
727 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_set_protocol_features()
728 if (vsocket) in rte_vhost_driver_set_protocol_features()
729 vsocket->protocol_features = protocol_features; in rte_vhost_driver_set_protocol_features()
731 return vsocket ? 0 : -1; in rte_vhost_driver_set_protocol_features()
738 struct vhost_user_socket *vsocket; in rte_vhost_driver_get_protocol_features() local
744 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_get_protocol_features()
745 if (!vsocket) { in rte_vhost_driver_get_protocol_features()
751 vdpa_dev = vsocket->vdpa_dev; in rte_vhost_driver_get_protocol_features()
753 *protocol_features = vsocket->protocol_features; in rte_vhost_driver_get_protocol_features()
765 *protocol_features = vsocket->protocol_features in rte_vhost_driver_get_protocol_features()
776 struct vhost_user_socket *vsocket; in rte_vhost_driver_get_queue_num() local
782 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_get_queue_num()
783 if (!vsocket) { in rte_vhost_driver_get_queue_num()
789 vdpa_dev = vsocket->vdpa_dev; in rte_vhost_driver_get_queue_num()
810 vhost_user_socket_mem_free(struct vhost_user_socket *vsocket) in vhost_user_socket_mem_free() argument
812 if (vsocket && vsocket->path) { in vhost_user_socket_mem_free()
813 free(vsocket->path); in vhost_user_socket_mem_free()
814 vsocket->path = NULL; in vhost_user_socket_mem_free()
817 if (vsocket) { in vhost_user_socket_mem_free()
818 free(vsocket); in vhost_user_socket_mem_free()
819 vsocket = NULL; in vhost_user_socket_mem_free()
832 struct vhost_user_socket *vsocket; in rte_vhost_driver_register() local
845 vsocket = malloc(sizeof(struct vhost_user_socket)); in rte_vhost_driver_register()
846 if (!vsocket) in rte_vhost_driver_register()
848 memset(vsocket, 0, sizeof(struct vhost_user_socket)); in rte_vhost_driver_register()
849 vsocket->path = strdup(path); in rte_vhost_driver_register()
850 if (vsocket->path == NULL) { in rte_vhost_driver_register()
852 vhost_user_socket_mem_free(vsocket); in rte_vhost_driver_register()
855 TAILQ_INIT(&vsocket->conn_list); in rte_vhost_driver_register()
856 ret = pthread_mutex_init(&vsocket->conn_mutex, NULL); in rte_vhost_driver_register()
861 vsocket->vdpa_dev = NULL; in rte_vhost_driver_register()
862 vsocket->extbuf = flags & RTE_VHOST_USER_EXTBUF_SUPPORT; in rte_vhost_driver_register()
863 vsocket->linearbuf = flags & RTE_VHOST_USER_LINEARBUF_SUPPORT; in rte_vhost_driver_register()
864 vsocket->async_copy = flags & RTE_VHOST_USER_ASYNC_COPY; in rte_vhost_driver_register()
865 vsocket->net_compliant_ol_flags = flags & RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS; in rte_vhost_driver_register()
867 if (vsocket->async_copy && in rte_vhost_driver_register()
887 vsocket->use_builtin_virtio_net = true; in rte_vhost_driver_register()
888 vsocket->supported_features = VIRTIO_NET_SUPPORTED_FEATURES; in rte_vhost_driver_register()
889 vsocket->features = VIRTIO_NET_SUPPORTED_FEATURES; in rte_vhost_driver_register()
890 vsocket->protocol_features = VHOST_USER_PROTOCOL_FEATURES; in rte_vhost_driver_register()
892 if (vsocket->async_copy) { in rte_vhost_driver_register()
893 vsocket->supported_features &= ~(1ULL << VHOST_F_LOG_ALL); in rte_vhost_driver_register()
894 vsocket->features &= ~(1ULL << VHOST_F_LOG_ALL); in rte_vhost_driver_register()
904 if (vsocket->linearbuf && !vsocket->extbuf) { in rte_vhost_driver_register()
914 vsocket->supported_features &= ~seg_offload_features; in rte_vhost_driver_register()
915 vsocket->features &= ~seg_offload_features; in rte_vhost_driver_register()
919 vsocket->supported_features &= ~(1ULL << VIRTIO_F_IOMMU_PLATFORM); in rte_vhost_driver_register()
920 vsocket->features &= ~(1ULL << VIRTIO_F_IOMMU_PLATFORM); in rte_vhost_driver_register()
924 vsocket->protocol_features &= in rte_vhost_driver_register()
935 vsocket->reconnect = !(flags & RTE_VHOST_USER_NO_RECONNECT); in rte_vhost_driver_register()
936 if (vsocket->reconnect && reconn_tid == 0) { in rte_vhost_driver_register()
941 vsocket->is_server = true; in rte_vhost_driver_register()
943 ret = create_unix_socket(vsocket); in rte_vhost_driver_register()
948 vhost_user.vsockets[vhost_user.vsocket_cnt++] = vsocket; in rte_vhost_driver_register()
954 if (pthread_mutex_destroy(&vsocket->conn_mutex)) { in rte_vhost_driver_register()
958 vhost_user_socket_mem_free(vsocket); in rte_vhost_driver_register()
966 vhost_user_remove_reconnect(struct vhost_user_socket *vsocket) in vhost_user_remove_reconnect() argument
977 if (reconn->vsocket == vsocket) { in vhost_user_remove_reconnect()
1006 struct vhost_user_socket *vsocket = vhost_user.vsockets[i]; in rte_vhost_driver_unregister() local
1007 if (strcmp(vsocket->path, path)) in rte_vhost_driver_unregister()
1010 if (vsocket->is_server) { in rte_vhost_driver_unregister()
1016 if (fdset_try_del(&vhost_user.fdset, vsocket->socket_fd) == -1) { in rte_vhost_driver_unregister()
1020 } else if (vsocket->reconnect) { in rte_vhost_driver_unregister()
1021 vhost_user_remove_reconnect(vsocket); in rte_vhost_driver_unregister()
1024 pthread_mutex_lock(&vsocket->conn_mutex); in rte_vhost_driver_unregister()
1025 for (conn = TAILQ_FIRST(&vsocket->conn_list); in rte_vhost_driver_unregister()
1038 pthread_mutex_unlock(&vsocket->conn_mutex); in rte_vhost_driver_unregister()
1046 TAILQ_REMOVE(&vsocket->conn_list, conn, next); in rte_vhost_driver_unregister()
1049 pthread_mutex_unlock(&vsocket->conn_mutex); in rte_vhost_driver_unregister()
1051 if (vsocket->is_server) { in rte_vhost_driver_unregister()
1052 close(vsocket->socket_fd); in rte_vhost_driver_unregister()
1056 pthread_mutex_destroy(&vsocket->conn_mutex); in rte_vhost_driver_unregister()
1057 vhost_user_socket_mem_free(vsocket); in rte_vhost_driver_unregister()
1077 struct vhost_user_socket *vsocket; in rte_vhost_driver_callback_register() local
1080 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_callback_register()
1081 if (vsocket) in rte_vhost_driver_callback_register()
1082 vsocket->notify_ops = ops; in rte_vhost_driver_callback_register()
1085 return vsocket ? 0 : -1; in rte_vhost_driver_callback_register()
1091 struct vhost_user_socket *vsocket; in vhost_driver_callback_get() local
1094 vsocket = find_vhost_user_socket(path); in vhost_driver_callback_get()
1097 return vsocket ? vsocket->notify_ops : NULL; in vhost_driver_callback_get()
1103 struct vhost_user_socket *vsocket; in rte_vhost_driver_start() local
1107 vsocket = find_vhost_user_socket(path); in rte_vhost_driver_start()
1110 if (!vsocket) in rte_vhost_driver_start()
1134 if (vsocket->is_server) in rte_vhost_driver_start()
1135 return vhost_user_start_server(vsocket); in rte_vhost_driver_start()
1137 return vhost_user_start_client(vsocket); in rte_vhost_driver_start()