aboutgitcodebugslistschat
path: root/contrib/qemu
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2022-01-26 17:05:20 +0100
committerStefano Brivio <sbrivio@redhat.com>2022-01-28 18:51:50 +0100
commit27050b094f6b3e64f1536ebca09f3476b308493b (patch)
treea45a5fa8011829876c36e5af3369f7120cbec6dd /contrib/qemu
parentf3caf555af86e33d55a94ff814e4a4fbe26640be (diff)
downloadpasst-27050b094f6b3e64f1536ebca09f3476b308493b.tar
passt-27050b094f6b3e64f1536ebca09f3476b308493b.tar.gz
passt-27050b094f6b3e64f1536ebca09f3476b308493b.tar.bz2
passt-27050b094f6b3e64f1536ebca09f3476b308493b.tar.lz
passt-27050b094f6b3e64f1536ebca09f3476b308493b.tar.xz
passt-27050b094f6b3e64f1536ebca09f3476b308493b.tar.zst
passt-27050b094f6b3e64f1536ebca09f3476b308493b.zip
libvirt, qemu: Move patches to new directory, contrib
I'm about to add a new adaptation carrying out-of-tree patches for a Kata Containers PoC -- move the existing out-of-tree patches to their own directory to keep things easy to find in the main one. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'contrib/qemu')
-rw-r--r--contrib/qemu/0001-net-Allow-also-UNIX-domain-sockets-to-be-used-as-net.patch171
-rw-r--r--contrib/qemu/0002-net-Don-t-ignore-EINVAL-on-netdev-socket-connection.patch37
2 files changed, 208 insertions, 0 deletions
diff --git a/contrib/qemu/0001-net-Allow-also-UNIX-domain-sockets-to-be-used-as-net.patch b/contrib/qemu/0001-net-Allow-also-UNIX-domain-sockets-to-be-used-as-net.patch
new file mode 100644
index 0000000..9e71f88
--- /dev/null
+++ b/contrib/qemu/0001-net-Allow-also-UNIX-domain-sockets-to-be-used-as-net.patch
@@ -0,0 +1,171 @@
+From 83c3f76b8fe6b4a6bb45dcf5cfad65ec6f98a10e Mon Sep 17 00:00:00 2001
+From: Stefano Brivio <sbrivio@redhat.com>
+Date: Wed, 26 Jan 2022 16:45:15 +0100
+Subject: [PATCH 1/2] net: Allow also UNIX domain sockets to be used as -netdev
+ socket
+
+It has lower overhead compared to TCP, doesn't need a free port
+and the adaptation is trivial.
+
+Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
+---
+SPDX-FileCopyrightText: 2020-2022 Red Hat GmbH <sbrivio@redhat.com>
+SPDX-License-Identifier: AGPL-3.0-or-later
+
+ net/socket.c | 106 ++++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 87 insertions(+), 19 deletions(-)
+
+diff --git a/net/socket.c b/net/socket.c
+index 2e5f3ac923..b901e22836 100644
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -511,26 +511,59 @@ static int net_socket_listen_init(NetClientState *peer,
+ {
+ NetClientState *nc;
+ NetSocketState *s;
+- struct sockaddr_in saddr;
+- int fd, ret;
++ struct sockaddr_storage saddr;
++ struct sockaddr_in *saddr_in = (struct sockaddr_in *)&saddr;
++ struct sockaddr_un *saddr_un = (struct sockaddr_un *)&saddr;
++ size_t saddr_size;
++ int fd, ret, pf;
++
++#ifndef WIN32
++ if (strchr(host_str, ':')) {
++#endif
++ if (parse_host_port(saddr_in, host_str, errp) < 0)
++ return -1;
+
+- if (parse_host_port(&saddr, host_str, errp) < 0) {
+- return -1;
+- }
++ pf = PF_INET;
++ saddr_size = sizeof(*saddr_in);
++#ifndef WIN32
++ } else {
++ struct stat sb;
++
++ if (stat(host_str, &sb) == -1) {
++ error_setg_errno(errp, errno, "can't stat socket path");
++ return -1;
++ }
++
++ if ((sb.st_mode & S_IFMT) != S_IFSOCK) {
++ error_setg_errno(errp, errno, "path provided is not a socket");
++ return -1;
++ }
+
+- fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
++ saddr_un->sun_family = PF_UNIX;
++ strncpy(saddr_un->sun_path, host_str, sizeof(saddr_un->sun_path));
++
++ pf = PF_UNIX;
++ saddr_size = sizeof(*saddr_un);
++ }
++#endif /* !WIN32 */
++ fd = qemu_socket(pf, SOCK_STREAM, 0);
+ if (fd < 0) {
+ error_setg_errno(errp, errno, "can't create stream socket");
+ return -1;
+ }
+ qemu_set_nonblock(fd);
+
+- socket_set_fast_reuse(fd);
++ if (pf == PF_INET)
++ socket_set_fast_reuse(fd);
+
+- ret = bind(fd, (struct sockaddr *)&saddr, sizeof(saddr));
++ ret = bind(fd, (struct sockaddr *)&saddr, saddr_size);
+ if (ret < 0) {
+- error_setg_errno(errp, errno, "can't bind ip=%s to socket",
+- inet_ntoa(saddr.sin_addr));
++ if (pf == PF_INET)
++ error_setg_errno(errp, errno, "can't bind ip=%s to socket",
++ inet_ntoa(saddr_in->sin_addr));
++ else if (pf == PF_UNIX)
++ error_setg_errno(errp, errno, "can't create socket with path: %s",
++ host_str);
+ closesocket(fd);
+ return -1;
+ }
+@@ -559,14 +592,43 @@ static int net_socket_connect_init(NetClientState *peer,
+ Error **errp)
+ {
+ NetSocketState *s;
+- int fd, connected, ret;
+- struct sockaddr_in saddr;
++ int fd, connected, ret, pf;
++ struct sockaddr_storage saddr;
++ size_t saddr_size;
++ struct sockaddr_in *saddr_in = (struct sockaddr_in *)&saddr;
++#ifndef WIN32
++ struct sockaddr_un *saddr_un = (struct sockaddr_un *)&saddr;
++
++ if (strchr(host_str, ':')) {
++#endif
++ if (parse_host_port(saddr_in, host_str, errp) < 0)
++ return -1;
+
+- if (parse_host_port(&saddr, host_str, errp) < 0) {
+- return -1;
++ pf = PF_INET;
++ saddr_size = sizeof(*saddr_in);
++#ifndef WIN32
++ } else {
++ struct stat sb;
++
++ if (stat(host_str, &sb) == -1) {
++ error_setg_errno(errp, errno, "can't stat socket path");
++ return -1;
++ }
++
++ if ((sb.st_mode & S_IFMT) != S_IFSOCK) {
++ error_setg_errno(errp, errno, "provided path is not a socket");
++ return -1;
++ }
++
++ saddr_un->sun_family = PF_UNIX;
++ strncpy(saddr_un->sun_path, host_str, sizeof(saddr_un->sun_path));
++
++ pf = PF_UNIX;
++ saddr_size = sizeof(*saddr_un);
+ }
++#endif /* !WIN32 */
+
+- fd = qemu_socket(PF_INET, SOCK_STREAM, 0);
++ fd = qemu_socket(pf, SOCK_STREAM, 0);
+ if (fd < 0) {
+ error_setg_errno(errp, errno, "can't create stream socket");
+ return -1;
+@@ -575,7 +637,7 @@ static int net_socket_connect_init(NetClientState *peer,
+
+ connected = 0;
+ for(;;) {
+- ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
++ ret = connect(fd, (struct sockaddr *)&saddr, saddr_size);
+ if (ret < 0) {
+ if (errno == EINTR || errno == EWOULDBLOCK) {
+ /* continue */
+@@ -597,9 +659,15 @@ static int net_socket_connect_init(NetClientState *peer,
+ return -1;
+ }
+
+- snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+- "socket: connect to %s:%d",
+- inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
++ if (pf == PF_INET) {
++ snprintf(s->nc.info_str, sizeof(s->nc.info_str),
++ "socket: connect to %s:%d",
++ inet_ntoa(saddr_in->sin_addr), ntohs(saddr_in->sin_port));
++ } else if (pf == PF_UNIX) {
++ snprintf(s->nc.info_str, sizeof(s->nc.info_str),
++ "socket: connect to %s", saddr_un->sun_path);
++ }
++
+ return 0;
+ }
+
+--
+2.28.0
+
diff --git a/contrib/qemu/0002-net-Don-t-ignore-EINVAL-on-netdev-socket-connection.patch b/contrib/qemu/0002-net-Don-t-ignore-EINVAL-on-netdev-socket-connection.patch
new file mode 100644
index 0000000..0e31a1b
--- /dev/null
+++ b/contrib/qemu/0002-net-Don-t-ignore-EINVAL-on-netdev-socket-connection.patch
@@ -0,0 +1,37 @@
+From a6d475147682de1fe3b14eb325f4247e013e8440 Mon Sep 17 00:00:00 2001
+Message-Id: <a6d475147682de1fe3b14eb325f4247e013e8440.1619091389.git.sbrivio@redhat.com>
+In-Reply-To: <ba51349d353f11e05c6341a7e065f2ade3874c68.1619091389.git.sbrivio@redhat.com>
+References: <ba51349d353f11e05c6341a7e065f2ade3874c68.1619091389.git.sbrivio@redhat.com>
+From: Stefano Brivio <sbrivio@redhat.com>
+Date: Wed, 21 Apr 2021 18:52:16 +0200
+Subject: [PATCH 2/2] net: Don't ignore EINVAL on netdev socket connection
+
+Other errors are treated as failure by net_socket_connect_init(),
+but if connect() returns EINVAL, we'll fail silently. Remove the
+related exception.
+
+Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
+---
+SPDX-FileCopyrightText: 2020-2021 Red Hat GmbH <sbrivio@redhat.com>
+SPDX-License-Identifier: AGPL-3.0-or-later
+
+ net/socket.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/net/socket.c b/net/socket.c
+index aadd11dae2b3..d3293ac12e82 100644
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -644,8 +644,7 @@ static int net_socket_connect_init(NetClientState *peer,
+ if (errno == EINTR || errno == EWOULDBLOCK) {
+ /* continue */
+ } else if (errno == EINPROGRESS ||
+- errno == EALREADY ||
+- errno == EINVAL) {
++ errno == EALREADY) {
+ break;
+ } else {
+ error_setg_errno(errp, errno, "can't connect socket");
+--
+2.29.2
+