* [PATCH v2 1/6] util/qemu-sockets: Replace the call to close a socket with closesocket()
2022-07-27 13:27 [PATCH v2 0/6] Enable unix socket support on Windows Bin Meng
@ 2022-07-27 13:27 ` Bin Meng
2022-07-28 12:51 ` Marc-André Lureau
2022-07-27 13:27 ` [PATCH v2 2/6] util/oslib-win32: Add a helper to get the Windows version Bin Meng
` (4 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Bin Meng @ 2022-07-27 13:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Daniel P. Berrangé
From: Bin Meng <bin.meng@windriver.com>
close() is a *nix function. It works on any file descriptor, and
sockets in *nix are an example of a file descriptor.
closesocket() is a Windows-specific function, which works only
specifically with sockets. Sockets on Windows do not use *nix-style
file descriptors, and socket() returns a handle to a kernel object
instead, so it must be closed with closesocket().
In QEMU there is already a logic to handle such platform difference
in os-posix.h and os-win32.h, that:
* closesocket maps to close on POSIX
* closesocket maps to a wrapper that calls the real closesocket()
on Windows
Replace the call to close a socket with closesocket() instead.
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
(no changes since v1)
util/qemu-sockets.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 13b5b197f9..0e2298278f 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -487,7 +487,7 @@ int inet_connect_saddr(InetSocketAddress *saddr, Error **errp)
if (ret < 0) {
error_setg_errno(errp, errno, "Unable to set KEEPALIVE");
- close(sock);
+ closesocket(sock);
return -1;
}
}
@@ -1050,7 +1050,7 @@ static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)
return sock;
err:
- close(sock);
+ closesocket(sock);
return -1;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/6] util/qemu-sockets: Replace the call to close a socket with closesocket()
2022-07-27 13:27 ` [PATCH v2 1/6] util/qemu-sockets: Replace the call to close a socket with closesocket() Bin Meng
@ 2022-07-28 12:51 ` Marc-André Lureau
0 siblings, 0 replies; 11+ messages in thread
From: Marc-André Lureau @ 2022-07-28 12:51 UTC (permalink / raw)
To: Bin Meng; +Cc: qemu-devel, Bin Meng, Daniel P. Berrangé
[-- Attachment #1: Type: text/plain, Size: 1862 bytes --]
On Wed, Jul 27, 2022 at 5:28 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> From: Bin Meng <bin.meng@windriver.com>
>
> close() is a *nix function. It works on any file descriptor, and
> sockets in *nix are an example of a file descriptor.
>
> closesocket() is a Windows-specific function, which works only
> specifically with sockets. Sockets on Windows do not use *nix-style
> file descriptors, and socket() returns a handle to a kernel object
> instead, so it must be closed with closesocket().
>
> In QEMU there is already a logic to handle such platform difference
> in os-posix.h and os-win32.h, that:
>
> * closesocket maps to close on POSIX
> * closesocket maps to a wrapper that calls the real closesocket()
> on Windows
>
> Replace the call to close a socket with closesocket() instead.
>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
>
This is a fix, could go in 7.1. Daniel, do you take it?
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Thanks
---
>
> (no changes since v1)
>
> util/qemu-sockets.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index 13b5b197f9..0e2298278f 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -487,7 +487,7 @@ int inet_connect_saddr(InetSocketAddress *saddr, Error
> **errp)
>
> if (ret < 0) {
> error_setg_errno(errp, errno, "Unable to set KEEPALIVE");
> - close(sock);
> + closesocket(sock);
> return -1;
> }
> }
> @@ -1050,7 +1050,7 @@ static int unix_connect_saddr(UnixSocketAddress
> *saddr, Error **errp)
> return sock;
>
> err:
> - close(sock);
> + closesocket(sock);
> return -1;
> }
>
> --
> 2.34.1
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 2822 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 2/6] util/oslib-win32: Add a helper to get the Windows version
2022-07-27 13:27 [PATCH v2 0/6] Enable unix socket support on Windows Bin Meng
2022-07-27 13:27 ` [PATCH v2 1/6] util/qemu-sockets: Replace the call to close a socket with closesocket() Bin Meng
@ 2022-07-27 13:27 ` Bin Meng
2022-07-28 12:54 ` Marc-André Lureau
2022-07-27 13:27 ` [PATCH v2 3/6] qga/commands-win32: Use os_get_win_version() Bin Meng
` (3 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Bin Meng @ 2022-07-27 13:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Xuzhou Cheng, Stefan Weil
From: Bin Meng <bin.meng@windriver.com>
This adds a helper to get the Windows version via the RtlGetVersion
call, for QEMU codes to determine the Windows version at run-time.
Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
(no changes since v1)
include/sysemu/os-win32.h | 2 ++
util/oslib-win32.c | 15 +++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index edc3b38a57..1e324026a4 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -204,6 +204,8 @@ ssize_t qemu_recv_wrap(int sockfd, void *buf, size_t len, int flags);
ssize_t qemu_recvfrom_wrap(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *addr, socklen_t *addrlen);
+void os_get_win_version(RTL_OSVERSIONINFOEXW *info);
+
#ifdef __cplusplus
}
#endif
diff --git a/util/oslib-win32.c b/util/oslib-win32.c
index 5723d3eb4c..6d2387b9ff 100644
--- a/util/oslib-win32.c
+++ b/util/oslib-win32.c
@@ -547,3 +547,18 @@ int qemu_msync(void *addr, size_t length, int fd)
*/
return qemu_fdatasync(fd);
}
+
+void os_get_win_version(RTL_OSVERSIONINFOEXW *info)
+{
+ typedef LONG (WINAPI *rtl_get_version_t)(PRTL_OSVERSIONINFOEXW);
+
+ /* RtlGetVersion is available starting with Windows 2000 */
+ HMODULE module = GetModuleHandle("ntdll");
+ PVOID fun = GetProcAddress(module, "RtlGetVersion");
+ rtl_get_version_t rtl_get_version = (rtl_get_version_t)fun;
+
+ info->dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
+ rtl_get_version(info);
+
+ return;
+}
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/6] util/oslib-win32: Add a helper to get the Windows version
2022-07-27 13:27 ` [PATCH v2 2/6] util/oslib-win32: Add a helper to get the Windows version Bin Meng
@ 2022-07-28 12:54 ` Marc-André Lureau
0 siblings, 0 replies; 11+ messages in thread
From: Marc-André Lureau @ 2022-07-28 12:54 UTC (permalink / raw)
To: Bin Meng; +Cc: qemu-devel, Bin Meng, Xuzhou Cheng, Stefan Weil
[-- Attachment #1: Type: text/plain, Size: 2096 bytes --]
Hi
On Wed, Jul 27, 2022 at 5:35 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> From: Bin Meng <bin.meng@windriver.com>
>
> This adds a helper to get the Windows version via the RtlGetVersion
> call, for QEMU codes to determine the Windows version at run-time.
>
> Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
> ---
>
> (no changes since v1)
>
It looks like you are introducing new code, but in fact it's almost
identical as the ga_get_win_version() function. Please do the move in the
same patch.
> include/sysemu/os-win32.h | 2 ++
> util/oslib-win32.c | 15 +++++++++++++++
> 2 files changed, 17 insertions(+)
>
> diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
> index edc3b38a57..1e324026a4 100644
> --- a/include/sysemu/os-win32.h
> +++ b/include/sysemu/os-win32.h
> @@ -204,6 +204,8 @@ ssize_t qemu_recv_wrap(int sockfd, void *buf, size_t
> len, int flags);
> ssize_t qemu_recvfrom_wrap(int sockfd, void *buf, size_t len, int flags,
> struct sockaddr *addr, socklen_t *addrlen);
>
> +void os_get_win_version(RTL_OSVERSIONINFOEXW *info);
> +
> #ifdef __cplusplus
> }
> #endif
> diff --git a/util/oslib-win32.c b/util/oslib-win32.c
> index 5723d3eb4c..6d2387b9ff 100644
> --- a/util/oslib-win32.c
> +++ b/util/oslib-win32.c
> @@ -547,3 +547,18 @@ int qemu_msync(void *addr, size_t length, int fd)
> */
> return qemu_fdatasync(fd);
> }
> +
> +void os_get_win_version(RTL_OSVERSIONINFOEXW *info)
> +{
> + typedef LONG (WINAPI *rtl_get_version_t)(PRTL_OSVERSIONINFOEXW);
> +
> + /* RtlGetVersion is available starting with Windows 2000 */
> + HMODULE module = GetModuleHandle("ntdll");
> + PVOID fun = GetProcAddress(module, "RtlGetVersion");
> + rtl_get_version_t rtl_get_version = (rtl_get_version_t)fun;
> +
> + info->dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
> + rtl_get_version(info);
> +
> + return;
> +}
> --
> 2.34.1
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3019 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 3/6] qga/commands-win32: Use os_get_win_version()
2022-07-27 13:27 [PATCH v2 0/6] Enable unix socket support on Windows Bin Meng
2022-07-27 13:27 ` [PATCH v2 1/6] util/qemu-sockets: Replace the call to close a socket with closesocket() Bin Meng
2022-07-27 13:27 ` [PATCH v2 2/6] util/oslib-win32: Add a helper to get the Windows version Bin Meng
@ 2022-07-27 13:27 ` Bin Meng
2022-07-28 12:55 ` Marc-André Lureau
2022-07-27 13:28 ` [PATCH v2 4/6] util/qemu-sockets: Enable unix socket support on Windows Bin Meng
` (2 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Bin Meng @ 2022-07-27 13:27 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Konstantin Kostiuk, Michael Roth
From: Bin Meng <bin.meng@windriver.com>
Drop its own ga_get_win_version() implementation, and use the one
provided in oslib-win32 instead.
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
(no changes since v1)
qga/commands-win32.c | 27 +--------------------------
1 file changed, 1 insertion(+), 26 deletions(-)
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 7ed7664715..6186f2e1f2 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -2178,26 +2178,6 @@ static ga_win_10_0_t const WIN_10_0_CLIENT_VERSION_MATRIX[3] = {
{0, 0}
};
-static void ga_get_win_version(RTL_OSVERSIONINFOEXW *info, Error **errp)
-{
- typedef NTSTATUS(WINAPI *rtl_get_version_t)(
- RTL_OSVERSIONINFOEXW *os_version_info_ex);
-
- info->dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
-
- HMODULE module = GetModuleHandle("ntdll");
- PVOID fun = GetProcAddress(module, "RtlGetVersion");
- if (fun == NULL) {
- error_setg(errp, QERR_QGA_COMMAND_FAILED,
- "Failed to get address of RtlGetVersion");
- return;
- }
-
- rtl_get_version_t rtl_get_version = (rtl_get_version_t)fun;
- rtl_get_version(info);
- return;
-}
-
static char *ga_get_win_name(OSVERSIONINFOEXW const *os_version, bool id)
{
DWORD major = os_version->dwMajorVersion;
@@ -2312,17 +2292,12 @@ static char *ga_get_current_arch(void)
GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
{
- Error *local_err = NULL;
OSVERSIONINFOEXW os_version = {0};
bool server;
char *product_name;
GuestOSInfo *info;
- ga_get_win_version(&os_version, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- return NULL;
- }
+ os_get_win_version(&os_version);
server = os_version.wProductType != VER_NT_WORKSTATION;
product_name = ga_get_win_product_name(errp);
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 3/6] qga/commands-win32: Use os_get_win_version()
2022-07-27 13:27 ` [PATCH v2 3/6] qga/commands-win32: Use os_get_win_version() Bin Meng
@ 2022-07-28 12:55 ` Marc-André Lureau
0 siblings, 0 replies; 11+ messages in thread
From: Marc-André Lureau @ 2022-07-28 12:55 UTC (permalink / raw)
To: Bin Meng; +Cc: qemu-devel, Bin Meng, Konstantin Kostiuk, Michael Roth
[-- Attachment #1: Type: text/plain, Size: 2275 bytes --]
Hi
On Wed, Jul 27, 2022 at 5:30 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> From: Bin Meng <bin.meng@windriver.com>
>
> Drop its own ga_get_win_version() implementation, and use the one
> provided in oslib-win32 instead.
>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
>
Will be squashed with the previous patch, since the move should be done
together.
> ---
>
> (no changes since v1)
>
> qga/commands-win32.c | 27 +--------------------------
> 1 file changed, 1 insertion(+), 26 deletions(-)
>
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 7ed7664715..6186f2e1f2 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -2178,26 +2178,6 @@ static ga_win_10_0_t const
> WIN_10_0_CLIENT_VERSION_MATRIX[3] = {
> {0, 0}
> };
>
> -static void ga_get_win_version(RTL_OSVERSIONINFOEXW *info, Error **errp)
> -{
> - typedef NTSTATUS(WINAPI *rtl_get_version_t)(
> - RTL_OSVERSIONINFOEXW *os_version_info_ex);
> -
> - info->dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
> -
> - HMODULE module = GetModuleHandle("ntdll");
> - PVOID fun = GetProcAddress(module, "RtlGetVersion");
> - if (fun == NULL) {
> - error_setg(errp, QERR_QGA_COMMAND_FAILED,
> - "Failed to get address of RtlGetVersion");
> - return;
> - }
> -
> - rtl_get_version_t rtl_get_version = (rtl_get_version_t)fun;
> - rtl_get_version(info);
> - return;
> -}
> -
> static char *ga_get_win_name(OSVERSIONINFOEXW const *os_version, bool id)
> {
> DWORD major = os_version->dwMajorVersion;
> @@ -2312,17 +2292,12 @@ static char *ga_get_current_arch(void)
>
> GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
> {
> - Error *local_err = NULL;
> OSVERSIONINFOEXW os_version = {0};
> bool server;
> char *product_name;
> GuestOSInfo *info;
>
> - ga_get_win_version(&os_version, &local_err);
> - if (local_err) {
> - error_propagate(errp, local_err);
> - return NULL;
> - }
> + os_get_win_version(&os_version);
>
> server = os_version.wProductType != VER_NT_WORKSTATION;
> product_name = ga_get_win_product_name(errp);
> --
> 2.34.1
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 3211 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 4/6] util/qemu-sockets: Enable unix socket support on Windows
2022-07-27 13:27 [PATCH v2 0/6] Enable unix socket support on Windows Bin Meng
` (2 preceding siblings ...)
2022-07-27 13:27 ` [PATCH v2 3/6] qga/commands-win32: Use os_get_win_version() Bin Meng
@ 2022-07-27 13:28 ` Bin Meng
2022-07-27 13:28 ` [PATCH v2 5/6] chardev/char-socket: Update AF_UNIX for Windows Bin Meng
2022-07-27 13:28 ` [PATCH v2 6/6] tests/unit: Update test-io-channel-socket.c " Bin Meng
5 siblings, 0 replies; 11+ messages in thread
From: Bin Meng @ 2022-07-27 13:28 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Xuzhou Cheng, Daniel P. Berrangé, Stefan Weil
From: Bin Meng <bin.meng@windriver.com>
Support for the unix socket has existed both in BSD and Linux for the
longest time, but not on Windows. Since Windows 10 build 17063 [1],
the native support for the unix socket has came to Windows. Starting
this build, two Win32 processes can use the AF_UNIX address family
over Winsock API to communicate with each other.
Introduce a new build time config option CONFIG_AF_UNIX when the build
host has such a capability, and a run-time check afunix_available() for
Windows host in the QEMU sockets util codes.
[1] https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
Changes in v2:
- move #include <afunix.h> to os-win32.h
- define WIN_BUILD_AF_UNIX only when CONFIG_WIN32
meson.build | 6 ++++++
include/sysemu/os-win32.h | 4 ++++
util/qemu-sockets.c | 45 +++++++++++++++++++++++++++++++++------
3 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 75aaca8462..73e5de5957 100644
--- a/meson.build
+++ b/meson.build
@@ -2327,6 +2327,12 @@ have_afalg = get_option('crypto_afalg') \
'''), error_message: 'AF_ALG requested but could not be detected').allowed()
config_host_data.set('CONFIG_AF_ALG', have_afalg)
+if targetos != 'windows'
+ config_host_data.set('CONFIG_AF_UNIX', true)
+else
+ config_host_data.set('CONFIG_AF_UNIX', cc.has_header('afunix.h'))
+endif
+
config_host_data.set('CONFIG_AF_VSOCK', cc.has_header_symbol(
'linux/vm_sockets.h', 'AF_VSOCK',
prefix: '#include <sys/socket.h>',
diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index 1e324026a4..62aac7c930 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -30,6 +30,10 @@
#include <windows.h>
#include <ws2tcpip.h>
+#ifdef CONFIG_AF_UNIX
+# include <afunix.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 0e2298278f..c5c1c3bbaf 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -880,7 +880,7 @@ static int vsock_parse(VsockSocketAddress *addr, const char *str,
}
#endif /* CONFIG_AF_VSOCK */
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
static bool saddr_is_abstract(UnixSocketAddress *saddr)
{
@@ -900,6 +900,23 @@ static bool saddr_is_tight(UnixSocketAddress *saddr)
#endif
}
+#ifdef CONFIG_WIN32
+/*
+ * AF_UNIX support is available since Windows 10 build 17063
+ * See https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
+ */
+#define WIN_BUILD_AF_UNIX 17063
+
+static bool afunix_available(void)
+{
+ OSVERSIONINFOEXW os_version = { 0 };
+
+ os_get_win_version(&os_version);
+
+ return os_version.dwBuildNumber >= WIN_BUILD_AF_UNIX;
+}
+#endif
+
static int unix_listen_saddr(UnixSocketAddress *saddr,
int num,
Error **errp)
@@ -912,6 +929,13 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,
size_t pathlen;
size_t addrlen;
+#ifdef CONFIG_WIN32
+ if (!afunix_available()) {
+ error_setg(errp, "AF_UNIX is not available on your Windows");
+ return -1;
+ }
+#endif
+
sock = qemu_socket(PF_UNIX, SOCK_STREAM, 0);
if (sock < 0) {
error_setg_errno(errp, errno, "Failed to create Unix socket");
@@ -1004,6 +1028,13 @@ static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)
return -1;
}
+#ifdef CONFIG_WIN32
+ if (!afunix_available()) {
+ error_setg(errp, "AF_UNIX is not available on your Windows");
+ return -1;
+ }
+#endif
+
sock = qemu_socket(PF_UNIX, SOCK_STREAM, 0);
if (sock < 0) {
error_setg_errno(errp, errno, "Failed to create socket");
@@ -1060,14 +1091,14 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,
int num,
Error **errp)
{
- error_setg(errp, "unix sockets are not available on windows");
+ error_setg(errp, "unix sockets are not available on your host");
errno = ENOTSUP;
return -1;
}
static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)
{
- error_setg(errp, "unix sockets are not available on windows");
+ error_setg(errp, "unix sockets are not available on your host");
errno = ENOTSUP;
return -1;
}
@@ -1335,7 +1366,7 @@ socket_sockaddr_to_address_inet(struct sockaddr_storage *sa,
}
-#ifndef WIN32
+#ifdef CONFIG_AF_UNIX
static SocketAddress *
socket_sockaddr_to_address_unix(struct sockaddr_storage *sa,
socklen_t salen,
@@ -1362,7 +1393,7 @@ socket_sockaddr_to_address_unix(struct sockaddr_storage *sa,
addr->u.q_unix.path = g_strndup(su->sun_path, salen);
return addr;
}
-#endif /* WIN32 */
+#endif /* CONFIG_AF_UNIX */
#ifdef CONFIG_AF_VSOCK
static SocketAddress *
@@ -1394,10 +1425,10 @@ socket_sockaddr_to_address(struct sockaddr_storage *sa,
case AF_INET6:
return socket_sockaddr_to_address_inet(sa, salen, errp);
-#ifndef WIN32
+#ifdef CONFIG_AF_UNIX
case AF_UNIX:
return socket_sockaddr_to_address_unix(sa, salen, errp);
-#endif /* WIN32 */
+#endif
#ifdef CONFIG_AF_VSOCK
case AF_VSOCK:
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 5/6] chardev/char-socket: Update AF_UNIX for Windows
2022-07-27 13:27 [PATCH v2 0/6] Enable unix socket support on Windows Bin Meng
` (3 preceding siblings ...)
2022-07-27 13:28 ` [PATCH v2 4/6] util/qemu-sockets: Enable unix socket support on Windows Bin Meng
@ 2022-07-27 13:28 ` Bin Meng
2022-07-28 13:03 ` Marc-André Lureau
2022-07-27 13:28 ` [PATCH v2 6/6] tests/unit: Update test-io-channel-socket.c " Bin Meng
5 siblings, 1 reply; 11+ messages in thread
From: Bin Meng @ 2022-07-27 13:28 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Marc-André Lureau, Paolo Bonzini
From: Bin Meng <bin.meng@windriver.com>
Now that AF_UNIX has come to Windows, update the existing logic in
qemu_chr_compute_filename() and qmp_chardev_open_socket() for Windows.
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
Changes in v2:
- drop #include <afunix.h> as it is now already included in osdep.h
chardev/char-socket.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index dc4e218eeb..14a56b7b13 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -557,7 +557,7 @@ static char *qemu_chr_compute_filename(SocketChardev *s)
const char *left = "", *right = "";
switch (ss->ss_family) {
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
case AF_UNIX:
return g_strdup_printf("unix:%s%s",
((struct sockaddr_un *)(ss))->sun_path,
@@ -1372,10 +1372,12 @@ static void qmp_chardev_open_socket(Chardev *chr,
}
qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_RECONNECTABLE);
+#ifndef _WIN32
/* TODO SOCKET_ADDRESS_FD where fd has AF_UNIX */
if (addr->type == SOCKET_ADDRESS_TYPE_UNIX) {
qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS);
}
+#endif
/*
* In the chardev-change special-case, we shouldn't register a new yank
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 5/6] chardev/char-socket: Update AF_UNIX for Windows
2022-07-27 13:28 ` [PATCH v2 5/6] chardev/char-socket: Update AF_UNIX for Windows Bin Meng
@ 2022-07-28 13:03 ` Marc-André Lureau
0 siblings, 0 replies; 11+ messages in thread
From: Marc-André Lureau @ 2022-07-28 13:03 UTC (permalink / raw)
To: Bin Meng; +Cc: qemu-devel, Bin Meng, Paolo Bonzini
Hi
On Wed, Jul 27, 2022 at 5:28 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> From: Bin Meng <bin.meng@windriver.com>
>
> Now that AF_UNIX has come to Windows, update the existing logic in
> qemu_chr_compute_filename() and qmp_chardev_open_socket() for Windows.
>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
lgtm,
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>
> Changes in v2:
> - drop #include <afunix.h> as it is now already included in osdep.h
>
> chardev/char-socket.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
> index dc4e218eeb..14a56b7b13 100644
> --- a/chardev/char-socket.c
> +++ b/chardev/char-socket.c
> @@ -557,7 +557,7 @@ static char *qemu_chr_compute_filename(SocketChardev *s)
> const char *left = "", *right = "";
>
> switch (ss->ss_family) {
> -#ifndef _WIN32
> +#ifdef CONFIG_AF_UNIX
> case AF_UNIX:
> return g_strdup_printf("unix:%s%s",
> ((struct sockaddr_un *)(ss))->sun_path,
> @@ -1372,10 +1372,12 @@ static void qmp_chardev_open_socket(Chardev *chr,
> }
>
> qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_RECONNECTABLE);
> +#ifndef _WIN32
> /* TODO SOCKET_ADDRESS_FD where fd has AF_UNIX */
> if (addr->type == SOCKET_ADDRESS_TYPE_UNIX) {
> qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS);
> }
> +#endif
>
> /*
> * In the chardev-change special-case, we shouldn't register a new yank
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 6/6] tests/unit: Update test-io-channel-socket.c for Windows
2022-07-27 13:27 [PATCH v2 0/6] Enable unix socket support on Windows Bin Meng
` (4 preceding siblings ...)
2022-07-27 13:28 ` [PATCH v2 5/6] chardev/char-socket: Update AF_UNIX for Windows Bin Meng
@ 2022-07-27 13:28 ` Bin Meng
5 siblings, 0 replies; 11+ messages in thread
From: Bin Meng @ 2022-07-27 13:28 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Daniel P. Berrangé
From: Bin Meng <bin.meng@windriver.com>
Enable the following 3 test cases for Windows when AF_UNIX is available:
* test_io_channel_unix_sync
* test_io_channel_unix_async
* test_io_channel_unix_listen_cleanup
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
Changes in v2:
- new patch: tests/unit: Update test-io-channel-socket.c for Windows
tests/unit/test-io-channel-socket.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/tests/unit/test-io-channel-socket.c b/tests/unit/test-io-channel-socket.c
index 6713886d02..ec5df32489 100644
--- a/tests/unit/test-io-channel-socket.c
+++ b/tests/unit/test-io-channel-socket.c
@@ -179,10 +179,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_async(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -206,10 +208,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_async(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -236,10 +240,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_sync(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -263,10 +269,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_sync(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -367,7 +375,7 @@ static void test_io_channel_ipv6_async(void)
}
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
static void test_io_channel_unix(bool async)
{
SocketAddress *listen_addr = g_new0(SocketAddress, 1);
@@ -398,6 +406,7 @@ static void test_io_channel_unix_async(void)
return test_io_channel_unix(true);
}
+#ifndef _WIN32
static void test_io_channel_unix_fd_pass(void)
{
SocketAddress *listen_addr = g_new0(SocketAddress, 1);
@@ -491,6 +500,7 @@ static void test_io_channel_unix_fd_pass(void)
}
g_free(fdrecv);
}
+#endif /* _WIN32 */
static void test_io_channel_unix_listen_cleanup(void)
{
@@ -588,13 +598,15 @@ int main(int argc, char **argv)
test_io_channel_ipv6_async);
}
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
g_test_add_func("/io/channel/socket/unix-sync",
test_io_channel_unix_sync);
g_test_add_func("/io/channel/socket/unix-async",
test_io_channel_unix_async);
+#ifndef _WIN32
g_test_add_func("/io/channel/socket/unix-fd-pass",
test_io_channel_unix_fd_pass);
+#endif
g_test_add_func("/io/channel/socket/unix-listen-cleanup",
test_io_channel_unix_listen_cleanup);
#endif /* _WIN32 */
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread