diff options
-rw-r--r-- | src/basic/socket-util.c | 15 | ||||
-rw-r--r-- | src/basic/socket-util.h | 2 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index 9c87fb4ce8..9b991b6f69 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -1753,3 +1753,18 @@ int socket_address_parse_vsock(SocketAddress *ret_address, const char *s) { return 0; } + +int vsock_get_local_cid(unsigned *ret) { + _cleanup_close_ int vsock_fd = -EBADF; + + assert(ret); + + vsock_fd = open("/dev/vsock", O_RDONLY|O_CLOEXEC); + if (vsock_fd < 0) + return log_debug_errno(errno, "Failed to open /dev/vsock: %m"); + + if (ioctl(vsock_fd, IOCTL_VM_SOCKETS_GET_LOCAL_CID, ret) < 0) + return log_debug_errno(errno, "Failed to query local AF_VSOCK CID: %m"); + + return 0; +} diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h index 39a6677c12..47a9a35c95 100644 --- a/src/basic/socket-util.h +++ b/src/basic/socket-util.h @@ -389,3 +389,5 @@ int socket_address_parse_vsock(SocketAddress *ret_address, const char *s); * /proc/sys/net/core/somaxconn anyway, thus by setting this to unbounded we just make that sysctl file * authoritative. */ #define SOMAXCONN_DELUXE INT_MAX + +int vsock_get_local_cid(unsigned *ret); |