diff options
author | Robert Wing <rew@FreeBSD.org> | 2022-04-28 15:43:01 +0000 |
---|---|---|
committer | Robert Wing <rew@FreeBSD.org> | 2022-04-28 15:43:01 +0000 |
commit | 690b7ea081790eef2c890f63a4fe7e195cf51df0 (patch) | |
tree | 771d4b69ecb8536bd20bc7caf7308ca0c49ee386 /usr.sbin | |
parent | 25768526bbedf2ae8ba35001d53c4a5eb09c36d8 (diff) | |
download | src-690b7ea081790eef2c890f63a4fe7e195cf51df0.tar.gz src-690b7ea081790eef2c890f63a4fe7e195cf51df0.zip |
bhyve/snapshot: ..back to SOCK_STREAM
Now that nvlist_send()/nvlist_recv() are being used, ditch the datagram
socket.
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D34863
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bhyve/snapshot.c | 14 | ||||
-rw-r--r-- | usr.sbin/bhyvectl/bhyvectl.c | 9 |
2 files changed, 16 insertions, 7 deletions
diff --git a/usr.sbin/bhyve/snapshot.c b/usr.sbin/bhyve/snapshot.c index f17a3f2dd2df..37486ba368e3 100644 --- a/usr.sbin/bhyve/snapshot.c +++ b/usr.sbin/bhyve/snapshot.c @@ -1450,19 +1450,21 @@ handle_message(struct vmctx *ctx, nvlist_t *nvl) void * checkpoint_thread(void *param) { + int fd; struct checkpoint_thread_info *thread_info; nvlist_t *nvl; pthread_set_name_np(pthread_self(), "checkpoint thread"); thread_info = (struct checkpoint_thread_info *)param; - for (;;) { - nvl = nvlist_recv(thread_info->socket_fd, 0); + while ((fd = accept(thread_info->socket_fd, NULL, NULL)) != -1) { + nvl = nvlist_recv(fd, 0); if (nvl != NULL) handle_message(thread_info->ctx, nvl); else EPRINTLN("nvlist_recv() failed: %s", strerror(errno)); + close(fd); nvlist_destroy(nvl); } @@ -1515,7 +1517,7 @@ init_checkpoint_thread(struct vmctx *ctx) memset(&addr, 0, sizeof(addr)); - socket_fd = socket(PF_UNIX, SOCK_DGRAM, 0); + socket_fd = socket(PF_UNIX, SOCK_STREAM, 0); if (socket_fd < 0) { EPRINTLN("Socket creation failed: %s", strerror(errno)); err = -1; @@ -1536,6 +1538,12 @@ init_checkpoint_thread(struct vmctx *ctx) goto fail; } + if (listen(socket_fd, 10) < 0) { + EPRINTLN("ipc socket listen: %s\n", strerror(errno)); + err = errno; + goto fail; + } + checkpoint_info = calloc(1, sizeof(*checkpoint_info)); checkpoint_info->ctx = ctx; checkpoint_info->socket_fd = socket_fd; diff --git a/usr.sbin/bhyvectl/bhyvectl.c b/usr.sbin/bhyvectl/bhyvectl.c index 06ab05cd48e1..14ab6c7ad33e 100644 --- a/usr.sbin/bhyvectl/bhyvectl.c +++ b/usr.sbin/bhyvectl/bhyvectl.c @@ -1687,7 +1687,7 @@ send_message(const char *vmname, nvlist_t *nvl) struct sockaddr_un addr; int err, socket_fd; - socket_fd = socket(PF_UNIX, SOCK_DGRAM, 0); + socket_fd = socket(PF_UNIX, SOCK_STREAM, 0); if (socket_fd < 0) { perror("Error creating bhyvectl socket"); err = -1; @@ -1695,11 +1695,12 @@ send_message(const char *vmname, nvlist_t *nvl) } memset(&addr, 0, sizeof(struct sockaddr_un)); + snprintf(addr.sun_path, sizeof(addr.sun_path), "%s%s", + BHYVE_RUN_DIR, vmname); addr.sun_family = AF_UNIX; + addr.sun_len = SUN_LEN(&addr); - snprintf(addr.sun_path, sizeof(addr.sun_path), "%s%s", BHYVE_RUN_DIR, vmname); - - if (connect(socket_fd, (struct sockaddr *)&addr, SUN_LEN(&addr)) != 0) { + if (connect(socket_fd, (struct sockaddr *)&addr, addr.sun_len) != 0) { perror("connect() failed"); err = errno; goto done; |