* [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 @ 2017-07-11 12:44 Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 1/5] sockets: ensure we can bind to both ipv4 & ipv6 separately Daniel P. Berrange ` (5 more replies) 0 siblings, 6 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-11 12:44 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange The following changes since commit 3d0bf8dfdfebd7f2ae41b6f220444b8047d6b1ee: Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20170710a' into staging (2017-07-10 18:13:03 +0100) are available in the git repository at: git://github.com/berrange/qemu tags/pull-sockets-2017-07-11-1 for you to fetch changes up to 4d1b104fb3c68ba004e82da67d684cb031722b37: tests: add functional test validating ipv4/ipv6 address flag handling (2017-07-11 10:58:19 +0100) ---------------------------------------------------------------- Merge sockets 2017/07/11 v1 ---------------------------------------------------------------- Daniel P. Berrange (5): sockets: ensure we can bind to both ipv4 & ipv6 separately sockets: don't block IPv4 clients when listening on "::" sockets: ensure we don't accept IPv4 clients when IPv4 is disabled io: preserve ipv4/ipv6 flags when resolving InetSocketAddress tests: add functional test validating ipv4/ipv6 address flag handling io/dns-resolver.c | 6 +- tests/.gitignore | 1 + tests/Makefile.include | 3 + tests/test-sockets-proto.c | 924 +++++++++++++++++++++++++++++++++++++++++++++ util/qemu-sockets.c | 71 +++- 5 files changed, 984 insertions(+), 21 deletions(-) create mode 100644 tests/test-sockets-proto.c -- 2.9.4 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PULL v1 1/5] sockets: ensure we can bind to both ipv4 & ipv6 separately 2017-07-11 12:44 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 Daniel P. Berrange @ 2017-07-11 12:44 ` Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 2/5] sockets: don't block IPv4 clients when listening on "::" Daniel P. Berrange ` (4 subsequent siblings) 5 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-11 12:44 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange When binding to an IPv6 socket we currently force the IPV6_V6ONLY flag to off. This means that the IPv6 socket will accept both IPv4 & IPv6 sockets when QEMU is launched with something like -vnc :::1 While this is good for that case, it is bad for other cases. For example if an empty hostname is given, getaddrinfo resolves it to 2 addresses 0.0.0.0 and ::, in that order. We will thus bind to 0.0.0.0 first, and then fail to bind to :: on the same port. The same problem can happen if any other hostname lookup causes the IPv4 address to be reported before the IPv6 address. When we get an IPv6 bind failure, we should re-try the same port, but with IPV6_V6ONLY turned on again, to avoid clash with any IPv4 listener. This ensures that -vnc :1 will bind successfully to both 0.0.0.0 and ::, and also avoid -vnc :1,to=2 from mistakenly using a 2nd port for the :: listener. This is a regression due to commit 396f935 "ui: add ability to specify multiple VNC listen addresses". Acked-by: Gerd Hoffmann <kraxel@gmail.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- util/qemu-sockets.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index d3e5108..4c2f84b 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -208,22 +208,37 @@ static int inet_listen_saddr(InetSocketAddress *saddr, } socket_set_fast_reuse(slisten); -#ifdef IPV6_V6ONLY - if (e->ai_family == PF_INET6) { - /* listen on both ipv4 and ipv6 */ - const int off = 0; - qemu_setsockopt(slisten, IPPROTO_IPV6, IPV6_V6ONLY, &off, - sizeof(off)); - } -#endif port_min = inet_getport(e); port_max = saddr->has_to ? saddr->to + port_offset : port_min; for (p = port_min; p <= port_max; p++) { +#ifdef IPV6_V6ONLY + /* listen on both ipv4 and ipv6 */ + int v6only = 0; +#endif inet_setport(e, p); +#ifdef IPV6_V6ONLY + rebind: + if (e->ai_family == PF_INET6) { + qemu_setsockopt(slisten, IPPROTO_IPV6, IPV6_V6ONLY, &v6only, + sizeof(v6only)); + } +#endif if (bind(slisten, e->ai_addr, e->ai_addrlen) == 0) { goto listen; } + +#ifdef IPV6_V6ONLY + /* If we got EADDRINUSE from an IPv6 bind & V6ONLY is unset, + * it could be that the IPv4 port is already claimed, so retry + * with V6ONLY set + */ + if (e->ai_family == PF_INET6 && errno == EADDRINUSE && !v6only) { + v6only = 1; + goto rebind; + } +#endif + if (p == port_max) { if (!e->ai_next) { error_setg_errno(errp, errno, "Failed to bind socket"); -- 2.9.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PULL v1 2/5] sockets: don't block IPv4 clients when listening on "::" 2017-07-11 12:44 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 1/5] sockets: ensure we can bind to both ipv4 & ipv6 separately Daniel P. Berrange @ 2017-07-11 12:44 ` Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 3/5] sockets: ensure we don't accept IPv4 clients when IPv4 is disabled Daniel P. Berrange ` (3 subsequent siblings) 5 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-11 12:44 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange When inet_parse() parses the hostname, it is forcing the has_ipv6 && ipv6 flags if the address contains a ":". This means that if the user had set the ipv4=on flag, to try to restrict the listener to just ipv4, an error would not have been raised. eg -incoming tcp:[::]:9000,ipv4 should have raised an error because listening for IPv4 on "::" is a non-sensical combination. With this removed, we now call getaddrinfo() on "::" passing PF_INET and so getaddrinfo reports an error about the hostname being incompatible with the requested protocol: qemu-system-x86_64: -incoming tcp:[::]:9000,ipv4: address resolution failed for :::9000: Address family for hostname not supported Likewise it is explicitly setting the has_ipv4 & ipv4 flags when the address contains only digits + '.'. This has no ill-effect, but also has no benefit, so is removed. Acked-by: Gerd Hoffmann <kraxel@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- util/qemu-sockets.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index 4c2f84b..f4ddcaf 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -618,16 +618,12 @@ int inet_parse(InetSocketAddress *addr, const char *str, Error **errp) error_setg(errp, "error parsing IPv6 address '%s'", str); return -1; } - addr->ipv6 = addr->has_ipv6 = true; } else { /* hostname or IPv4 addr */ if (sscanf(str, "%64[^:]:%32[^,]%n", host, port, &pos) != 2) { error_setg(errp, "error parsing address '%s'", str); return -1; } - if (host[strspn(host, "0123456789.")] == '\0') { - addr->ipv4 = addr->has_ipv4 = true; - } } addr->host = g_strdup(host); -- 2.9.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PULL v1 3/5] sockets: ensure we don't accept IPv4 clients when IPv4 is disabled 2017-07-11 12:44 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 1/5] sockets: ensure we can bind to both ipv4 & ipv6 separately Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 2/5] sockets: don't block IPv4 clients when listening on "::" Daniel P. Berrange @ 2017-07-11 12:44 ` Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 4/5] io: preserve ipv4/ipv6 flags when resolving InetSocketAddress Daniel P. Berrange ` (2 subsequent siblings) 5 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-11 12:44 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange Currently if you disable listening on IPv4 addresses, via the CLI flag ipv4=off, we still mistakenly accept IPv4 clients via the IPv6 listener socket due to IPV6_V6ONLY flag being unset. We must ensure IPV6_V6ONLY is always set if ipv4=off This fixes the following scenarios -incoming tcp::9000,ipv6=on -incoming tcp:[::]:9000,ipv6=on -chardev socket,id=cdev0,host=,port=9000,server,nowait,ipv4=off -chardev socket,id=cdev0,host=,port=9000,server,nowait,ipv6=on -chardev socket,id=cdev0,host=::,port=9000,server,nowait,ipv4=off -chardev socket,id=cdev0,host=::,port=9000,server,nowait,ipv6=on which all mistakenly accepted IPv4 clients Acked-by: Gerd Hoffmann <kraxel@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- util/qemu-sockets.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index f4ddcaf..37d386f 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -104,17 +104,16 @@ NetworkAddressFamily inet_netfamily(int family) * f t PF_INET6 * t - PF_INET * t f PF_INET - * t t PF_INET6 + * t t PF_INET6/PF_UNSPEC * * NB, this matrix is only about getting the necessary results * from getaddrinfo(). Some of the cases require further work * after reading results from getaddrinfo in order to fully - * apply the logic the end user wants. eg with the last case - * ipv4=t + ipv6=t + PF_INET6, getaddrinfo alone can only - * guarantee the ipv6=t part of the request - we need more - * checks to provide ipv4=t part of the guarantee. This is - * outside scope of this method and not currently handled by - * callers at all. + * apply the logic the end user wants. + * + * In the first and last cases, we must set IPV6_V6ONLY=0 + * when binding, to allow a single listener to potentially + * accept both IPv4+6 addresses. */ int inet_ai_family_from_address(InetSocketAddress *addr, Error **errp) @@ -124,6 +123,23 @@ int inet_ai_family_from_address(InetSocketAddress *addr, error_setg(errp, "Cannot disable IPv4 and IPv6 at same time"); return PF_UNSPEC; } + if ((addr->has_ipv6 && addr->ipv6) && (addr->has_ipv4 && addr->ipv4)) { + /* + * Some backends can only do a single listener. In that case + * we want empty hostname to resolve to "::" and then use the + * flag IPV6_V6ONLY==0 to get both protocols on 1 socket. This + * doesn't work for addresses other than "", so they're just + * inevitably broken until multiple listeners can be used, + * and thus we honour getaddrinfo automatic protocol detection + * Once all backends do multi-listener, remove the PF_INET6 + * branch entirely. + */ + if (!addr->host || g_str_equal(addr->host, "")) { + return PF_INET6; + } else { + return PF_UNSPEC; + } + } if ((addr->has_ipv6 && addr->ipv6) || (addr->has_ipv4 && !addr->ipv4)) { return PF_INET6; } @@ -213,8 +229,14 @@ static int inet_listen_saddr(InetSocketAddress *saddr, port_max = saddr->has_to ? saddr->to + port_offset : port_min; for (p = port_min; p <= port_max; p++) { #ifdef IPV6_V6ONLY - /* listen on both ipv4 and ipv6 */ - int v6only = 0; + /* + * Deals with first & last cases in matrix in comment + * for inet_ai_family_from_address(). + */ + int v6only = + ((!saddr->has_ipv4 && !saddr->has_ipv6) || + (saddr->has_ipv4 && saddr->ipv4 && + saddr->has_ipv6 && saddr->ipv6)) ? 0 : 1; #endif inet_setport(e, p); #ifdef IPV6_V6ONLY -- 2.9.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PULL v1 4/5] io: preserve ipv4/ipv6 flags when resolving InetSocketAddress 2017-07-11 12:44 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 Daniel P. Berrange ` (2 preceding siblings ...) 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 3/5] sockets: ensure we don't accept IPv4 clients when IPv4 is disabled Daniel P. Berrange @ 2017-07-11 12:44 ` Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 5/5] tests: add functional test validating ipv4/ipv6 address flag handling Daniel P. Berrange 2017-07-11 14:21 ` [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 no-reply 5 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-11 12:44 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange The original InetSocketAddress struct may have has_ipv4 and has_ipv6 fields set, which will control both the ai_family used during DNS resolution, and later use of the V6ONLY flag. Currently the standalone DNS resolver code drops the has_ipv4 & has_ipv6 flags after resolving, which means the later bind() code won't correctly set V6ONLY. This fixes the following scenarios -vnc :0,ipv4=off -vnc :0,ipv6=on -vnc :::0,ipv4=off -vnc :::0,ipv6=on which all mistakenly accepted IPv4 clients Acked-by: Gerd Hoffmann <kraxel@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- io/dns-resolver.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/io/dns-resolver.c b/io/dns-resolver.c index 57a8896..c072d12 100644 --- a/io/dns-resolver.c +++ b/io/dns-resolver.c @@ -116,8 +116,10 @@ static int qio_dns_resolver_lookup_sync_inet(QIODNSResolver *resolver, .numeric = true, .has_to = iaddr->has_to, .to = iaddr->to, - .has_ipv4 = false, - .has_ipv6 = false, + .has_ipv4 = iaddr->has_ipv4, + .ipv4 = iaddr->ipv4, + .has_ipv6 = iaddr->has_ipv6, + .ipv6 = iaddr->ipv6, }; (*addrs)[i] = newaddr; -- 2.9.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PULL v1 5/5] tests: add functional test validating ipv4/ipv6 address flag handling 2017-07-11 12:44 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 Daniel P. Berrange ` (3 preceding siblings ...) 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 4/5] io: preserve ipv4/ipv6 flags when resolving InetSocketAddress Daniel P. Berrange @ 2017-07-11 12:44 ` Daniel P. Berrange 2017-07-11 14:21 ` [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 no-reply 5 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-11 12:44 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange The semantics around handling ipv4=on|off & ipv6=on|off are quite subtle to understand in combination with the various hostname addresses and backend types. Introduce a massive test matrix that launches QEMU and validates the ability to connect a client on each protocol as appropriate. The test requires that the host has ability to bind to both :: and 0.0.0.0, on port 9000. If either protocol is not available, or if something is already listening on that port the test will skip. Although it isn't using the QTest APIs, it expects the QTEST_QEMU_BINARY env variable to be set. Reviewed-by: Eric Blake <eblake@redhat.com> Tested-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- tests/.gitignore | 1 + tests/Makefile.include | 3 + tests/test-sockets-proto.c | 924 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 928 insertions(+) create mode 100644 tests/test-sockets-proto.c diff --git a/tests/.gitignore b/tests/.gitignore index 8e01b00..94d995b 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -75,6 +75,7 @@ test-qobject-output-visitor test-rcu-list test-replication test-shift128 +test-sockets-proto test-string-input-visitor test-string-output-visitor test-thread-pool diff --git a/tests/Makefile.include b/tests/Makefile.include index 18cd06a..77b70f2 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -337,6 +337,7 @@ check-qtest-s390x-y = tests/boot-serial-test$(EXESUF) check-qtest-generic-y += tests/qom-test$(EXESUF) check-qtest-generic-y += tests/test-hmp$(EXESUF) +check-qtest-generic-y += tests/test-sockets-proto$(EXESUF) qapi-schema += alternate-any.json qapi-schema += alternate-array.json @@ -743,6 +744,8 @@ tests/usb-hcd-ehci-test$(EXESUF): tests/usb-hcd-ehci-test.o $(libqos-usb-obj-y) tests/usb-hcd-xhci-test$(EXESUF): tests/usb-hcd-xhci-test.o $(libqos-usb-obj-y) tests/pc-cpu-test$(EXESUF): tests/pc-cpu-test.o tests/postcopy-test$(EXESUF): tests/postcopy-test.o +tests/test-sockets-proto$(EXESUF): tests/test-sockets-proto.o \ + $(test-io-obj-y) tests/vhost-user-test$(EXESUF): tests/vhost-user-test.o $(test-util-obj-y) \ $(qtest-obj-y) $(test-io-obj-y) $(libqos-virtio-obj-y) $(libqos-pc-obj-y) \ $(chardev-obj-y) diff --git a/tests/test-sockets-proto.c b/tests/test-sockets-proto.c new file mode 100644 index 0000000..1d6beda --- /dev/null +++ b/tests/test-sockets-proto.c @@ -0,0 +1,924 @@ +/* + * QTest for IPv4/IPv6 protocol setup + * + * Copyright (c) 2017 Red Hat, Inc. + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" + +#include "io/channel-socket.h" +#include "qapi/error.h" +#include "qemu/cutils.h" + +typedef struct { + const char *name; + const char *args; + int ipv4; /* 0 -> disabled, 1 -> enabled */ + int ipv6; /* 0 -> disabled, 1 -> enabled, -1 -> check getaddrinfo() order */ + bool error; +} QSocketsData; + +/* + * This is the giant matrix of combinations we need to consider. + * There are 3 axes we deal with + * + * Axis 1: Protocol flags: + * + * ipv4=unset, ipv6=unset -> v4 & v6 clients ([1] + * ipv4=unset, ipv6=off -> v4 clients only + * ipv4=unset, ipv6=on -> v6 clients only + * ipv4=off, ipv6=unset -> v6 clients only + * ipv4=off, ipv6=off -> error - can't disable both [2] + * ipv4=off, ipv6=on -> v6 clients only + * ipv4=on, ipv6=unset -> v4 clients only + * ipv4=on, ipv6=off -> v4 clients only + * ipv4=on, ipv6=on -> v4 & v6 clients [3] + * + * Depending on the listening address, some of those combinations + * may result in errors. eg ipv4=off,ipv6=on combined with 0.0.0.0 + * is nonsensical. + * + * [1] Some backends only support a single socket listener, so + * will actually only allow v4 clients + * [2] QEMU should fail to startup in this case + * [3] If hostname is "" or "::", then we get a single listener + * on IPv6 and thus can also accept v4 clients. For all other + * hostnames, have same problem as [1]. + * + * Axis 2: Listening address: + * + * "" - resolves to 0.0.0.0 and ::, in that order + * "0.0.0.0" - v4 clients only + * "::" - Mostly v6 clients only. Some scenarios should + * permit v4 clients too. + * + * Axis 3: Backend type: + * + * Migration - restricted to a single listener. Also relies + * on buggy inet_parse() which can't accept + * =off/=on parameters to ipv4/ipv6 flags + * Chardevs - restricted to a single listener. + * VNC - supports multiple listeners. Also supports + * socket ranges, so has extra set of tests + * in the matrix + * + */ +static QSocketsData test_data[] = { + /* Migrate with "" address */ + /* XXX all settings with =off are disabled due to inet_parse() bug */ + /* XXX multilistener bug - should be .ipv6 = 1 */ + { .ipv4 = 1, .ipv6 = -1, .error = false, + .name = "/sockets/migrate/wildcard/all", + .args = "-incoming tcp::9000" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/wildcard/ipv4", + .args = "-incoming tcp::9000,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/wildcard/ipv6", + .args = "-incoming tcp::9000,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/wildcard/ipv4on", + .args = "-incoming tcp::9000,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/wildcard/ipv6on", + .args = "-incoming tcp::9000,ipv6=on" }, + /* + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/wildcard/ipv4off", + .args = "-incoming tcp::9000,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/wildcard/ipv6off", + .args = "-incoming tcp::9000,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/wildcard/ipv4onipv6off", + .args = "-incoming tcp::9000,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/wildcard/ipv4offipv6on", + .args = "-incoming tcp::9000,ipv4=off,ipv6=on" }, + */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/wildcard/ipv4onipv6on", + .args = "-incoming tcp::9000,ipv4=on,ipv6=on" }, + /* + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/wildcard/ipv4offipv6off", + .args = "-incoming tcp::9000,ipv4=off,ipv6=off" }, + */ + + /* Migrate with 0.0.0.0 address */ + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/0.0.0.0/all", + .args = "-incoming tcp:0.0.0.0:9000" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/0.0.0.0/ipv4", + .args = "-incoming tcp:0.0.0.0:9000,ipv4" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/0.0.0.0/ipv6", + .args = "-incoming tcp:0.0.0.0:9000,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/0.0.0.0/ipv4on", + .args = "-incoming tcp:0.0.0.0:9000,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/0.0.0.0/ipv6on", + .args = "-incoming tcp:0.0.0.0:9000,ipv6=on" }, + /* + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/0.0.0.0/ipv4off", + .args = "-incoming tcp:0.0.0.0:9000,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/0.0.0.0/ipv6off", + .args = "-incoming tcp:0.0.0.0:9000,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/0.0.0.0/ipv4onipv6off", + .args = "-incoming tcp:0.0.0.0:9000,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/0.0.0.0/ipv4offipv6on", + .args = "-incoming tcp:0.0.0.0:9000,ipv4=off,ipv6=on" }, + */ + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/migrate/0.0.0.0/ipv4onipv6on", + .args = "-incoming tcp:0.0.0.0:9000,ipv4=on,ipv6=on" }, + /* + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/0.0.0.0/ipv4offipv6off", + .args = "-incoming tcp:0.0.0.0:9000,ipv4=off,ipv6=off" }, + */ + + /* Migrate with :: address */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/::/all", + .args = "-incoming tcp:[::]:9000" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/::/ipv4", + .args = "-incoming tcp:[::]:9000,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/::/ipv6", + .args = "-incoming tcp:[::]:9000,ipv6" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/::/ipv4on", + .args = "-incoming tcp:[::]:9000,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/::/ipv6on", + .args = "-incoming tcp:[::]:9000,ipv6=on" }, + /* + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/::/ipv4off", + .args = "-incoming tcp:[::]:9000,ipv4=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/::/ipv6off", + .args = "-incoming tcp:[::]:9000,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/::/ipv4onipv6off", + .args = "-incoming tcp:[::]:9000,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/::/ipv4offipv6on", + .args = "-incoming tcp:[::]:9000,ipv4=off,ipv6=on" }, + */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/migrate/::/ipv4onipv6on", + .args = "-incoming tcp:[::]:9000,ipv4=on,ipv6=on" }, + /* + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/migrate/::/ipv4offipv6off", + .args = "-incoming tcp:[::]:9000,ipv4=off,ipv6=off" }, + */ + + + + /* Chardev with "" address */ + /* XXX multilistener bug - should be .ipv6 = 1 */ + { .ipv4 = 1, .ipv6 = -1, .error = false, + .name = "/sockets/chardev/wildcard/all", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/wildcard/ipv4", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/wildcard/ipv6", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/wildcard/ipv4on", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/wildcard/ipv6on", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/wildcard/ipv4off", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/wildcard/ipv6off", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/wildcard/ipv4onipv6off", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/wildcard/ipv4offipv6on", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/wildcard/ipv4onipv6on", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/wildcard/ipv4offipv6off", + .args = "-chardev socket,id=cdev0,host=,port=9000,server,nowait," + "ipv4=off,ipv6=off" }, + + /* Chardev with 0.0.0.0 address */ + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/0.0.0.0/all", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/0.0.0.0/ipv4", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv4" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/0.0.0.0/ipv6", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/0.0.0.0/ipv4on", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv4=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/0.0.0.0/ipv6on", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/0.0.0.0/ipv4off", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/0.0.0.0/ipv6off", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/0.0.0.0/ipv4onipv6off", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/0.0.0.0/ipv4offipv6on", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/chardev/0.0.0.0/ipv4onipv6on", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/0.0.0.0/ipv4offipv6off", + .args = "-chardev socket,id=cdev0,host=0.0.0.0,port=9000,server,nowait," + "ipv4=off,ipv6=off" }, + + /* Chardev with :: address */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/::/all", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/::/ipv4", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/::/ipv6", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv6" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/::/ipv4on", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/::/ipv6on", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/::/ipv4off", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv4=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/::/ipv6off", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/::/ipv4onipv6off", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/::/ipv4offipv6on", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/chardev/::/ipv4onipv6on", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/chardev/::/ipv4offipv6off", + .args = "-chardev socket,id=cdev0,host=::,port=9000,server,nowait," + "ipv4=off,ipv6=off" }, + + + + /* Net with "" address */ + /* XXX does not yet support ipv4/ipv6 flags at all */ + /* XXX multilistener bug - should be .ipv6 = 1 */ + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/wildcard/all", + .args = "-netdev socket,id=net0,listen=:9000" }, + /* + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/wildcard/ipv4", + .args = "-netdev socket,id=net0,listen=:9000,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/wildcard/ipv6", + .args = "-netdev socket,id=net0,listen=:9000,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/wildcard/ipv4on", + .args = "-netdev socket,id=net0,listen=:9000,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/wildcard/ipv6on", + .args = "-netdev socket,id=net0,listen=:9000,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/wildcard/ipv4off", + .args = "-netdev socket,id=net0,listen=:9000,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/wildcard/ipv6off", + .args = "-netdev socket,id=net0,listen=:9000,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/wildcard/ipv4onipv6off", + .args = "-netdev socket,id=net0,listen=:9000,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/wildcard/ipv4offipv6on", + .args = "-netdev socket,id=net0,listen=:9000,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/net/wildcard/ipv4onipv6on", + .args = "-netdev socket,id=net0,listen=:9000,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/wildcard/ipv4offipv6off", + .args = "-netdev socket,id=net0,listen=:9000,ipv4=off,ipv6=off" }, + */ + + /* Net with 0.0.0.0 address */ + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/0.0.0.0/all", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000" }, + /* + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/0.0.0.0/ipv4", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv4" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/0.0.0.0/ipv6", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/0.0.0.0/ipv4on", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/0.0.0.0/ipv6on", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/0.0.0.0/ipv4off", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/0.0.0.0/ipv6off", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/0.0.0.0/ipv4onipv6off", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/0.0.0.0/ipv4offipv6on", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/net/0.0.0.0/ipv4onipv6on", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/0.0.0.0/ipv4offipv6off", + .args = "-netdev socket,id=net0,listen=0.0.0.0:9000,ipv4=off,ipv6=off" }, + */ + + /* Net with :: address */ + /* parse_host_port() doesn't cope with [] for IPv6 addrs + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/net/::/all", + .args = "-netdev socket,id=net0,listen=[::]:9000" }, + */ + /* + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/::/ipv4", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/::/ipv6", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv6" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/::/ipv4on", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/::/ipv6on", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/::/ipv4off", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv4=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/::/ipv6off", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/::/ipv4onipv6off", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/net/::/ipv4offipv6on", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/net/::/ipv4onipv6on", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/net/::/ipv4offipv6off", + .args = "-netdev socket,id=net0,listen=[::]:9000,ipv4=off,ipv6=off" }, + */ + + + /* VNC with "" address */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/wildcard/all", + .args = "-vnc :3100" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/wildcard/ipv4", + .args = "-vnc :3100,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/wildcard/ipv6", + .args = "-vnc :3100,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/wildcard/ipv4on", + .args = "-vnc :3100,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/wildcard/ipv6on", + .args = "-vnc :3100,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/wildcard/ipv4off", + .args = "-vnc :3100,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/wildcard/ipv6off", + .args = "-vnc :3100,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/wildcard/ipv4onipv6off", + .args = "-vnc :3100,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/wildcard/ipv4offipv6on", + .args = "-vnc :3100,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/wildcard/ipv4onipv6on", + .args = "-vnc :3100,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/wildcard/ipv4offipv6off", + .args = "-vnc :3100,ipv4=off,ipv6=off" }, + + /* VNC with 0.0.0.0 address */ + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/0.0.0.0/all", + .args = "-vnc 0.0.0.0:3100" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/0.0.0.0/ipv4", + .args = "-vnc 0.0.0.0:3100,ipv4" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/0.0.0.0/ipv6", + .args = "-vnc 0.0.0.0:3100,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/0.0.0.0/ipv4on", + .args = "-vnc 0.0.0.0:3100,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/0.0.0.0/ipv6on", + .args = "-vnc 0.0.0.0:3100,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/0.0.0.0/ipv4off", + .args = "-vnc 0.0.0.0:3100,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/0.0.0.0/ipv6off", + .args = "-vnc 0.0.0.0:3100,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/0.0.0.0/ipv4onipv6off", + .args = "-vnc 0.0.0.0:3100,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/0.0.0.0/ipv4offipv6on", + .args = "-vnc 0.0.0.0:3100,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc/0.0.0.0/ipv4onipv6on", + .args = "-vnc 0.0.0.0:3100,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/0.0.0.0/ipv4offipv6off", + .args = "-vnc 0.0.0.0:3100,ipv4=off,ipv6=off" }, + + /* VNC with :: address */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/::/all", + .args = "-vnc :::3100" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/::/ipv4", + .args = "-vnc :::3100,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/::/ipv6", + .args = "-vnc :::3100,ipv6" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/::/ipv4on", + .args = "-vnc :::3100,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/::/ipv6on", + .args = "-vnc :::3100,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/::/ipv4off", + .args = "-vnc :::3100,ipv4=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/::/ipv6off", + .args = "-vnc :::3100,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/::/ipv4onipv6off", + .args = "-vnc :::3100,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/::/ipv4offipv6on", + .args = "-vnc :::3100,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc/::/ipv4onipv6on", + .args = "-vnc :::3100,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc/::/ipv4offipv6off", + .args = "-vnc :::3100,ipv4=off,ipv6=off" }, + + + + /* VNC with "" address and range */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/wildcard/all", + .args = "-vnc :3100,to=9005" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv4", + .args = "-vnc :3100,to=9005,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv6", + .args = "-vnc :3100,to=9005,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv4on", + .args = "-vnc :3100,to=9005,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv6on", + .args = "-vnc :3100,to=9005,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv4off", + .args = "-vnc :3100,to=9005,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv6off", + .args = "-vnc :3100,to=9005,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv4onipv6off", + .args = "-vnc :3100,to=9005,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv4offipv6on", + .args = "-vnc :3100,to=9005,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/wildcard/ipv4onipv6on", + .args = "-vnc :3100,to=9005,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/wildcard/ipv4offipv6off", + .args = "-vnc :3100,to=9005,ipv4=off,ipv6=off" }, + + /* VNC with 0.0.0.0 address and range */ + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/0.0.0.0/all", + .args = "-vnc 0.0.0.0:3100,to=9005" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/0.0.0.0/ipv4", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv4" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/0.0.0.0/ipv6", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv6" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/0.0.0.0/ipv4on", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/0.0.0.0/ipv6on", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/0.0.0.0/ipv4off", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv4=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/0.0.0.0/ipv6off", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv6=off" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/0.0.0.0/ipv4onipv6off", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/0.0.0.0/ipv4offipv6on", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 0, .error = false, + .name = "/sockets/vnc-to/0.0.0.0/ipv4onipv6on", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/0.0.0.0/ipv4offipv6off", + .args = "-vnc 0.0.0.0:3100,to=9005,ipv4=off,ipv6=off" }, + + /* VNC with :: address and range */ + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/::/all", + .args = "-vnc :::3100,to=9005" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/::/ipv4", + .args = "-vnc :::3100,to=9005,ipv4" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/::/ipv6", + .args = "-vnc :::3100,to=9005,ipv6" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/::/ipv4on", + .args = "-vnc :::3100,to=9005,ipv4=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/::/ipv6on", + .args = "-vnc :::3100,to=9005,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/::/ipv4off", + .args = "-vnc :::3100,to=9005,ipv4=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/::/ipv6off", + .args = "-vnc :::3100,to=9005,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/::/ipv4onipv6off", + .args = "-vnc :::3100,to=9005,ipv4=on,ipv6=off" }, + { .ipv4 = 0, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/::/ipv4offipv6on", + .args = "-vnc :::3100,to=9005,ipv4=off,ipv6=on" }, + { .ipv4 = 1, .ipv6 = 1, .error = false, + .name = "/sockets/vnc-to/::/ipv4onipv6on", + .args = "-vnc :::3100,to=9005,ipv4=on,ipv6=on" }, + { .ipv4 = 0, .ipv6 = 0, .error = true, + .name = "/sockets/vnc-to/::/ipv4offipv6off", + .args = "-vnc :::3100,to=9005,ipv4=off,ipv6=off" }, +}; + +static int check_bind(const char *hostname) +{ + int fd = -1; + struct addrinfo ai, *res = NULL; + int rc; + int ret = -1; + + memset(&ai, 0, sizeof(ai)); + ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; + ai.ai_family = AF_UNSPEC; + ai.ai_socktype = SOCK_STREAM; + + /* lookup */ + rc = getaddrinfo(hostname, "9000", &ai, &res); + if (rc != 0) { + goto cleanup; + } + + fd = qemu_socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (fd < 0) { + goto cleanup; + } + + if (bind(fd, res->ai_addr, res->ai_addrlen) < 0) { + goto cleanup; + } + + ret = 0; + + cleanup: + if (fd != -1) { + close(fd); + } + if (res) { + freeaddrinfo(res); + } + return ret; +} + + +/* + * Validates that getaddrinfo() with a hostname of "", + * returns both an IPv4 and IPv6 address, and reports + * their order + * + * Returns: + * -1: if resolving "" didn't return IPv4+IPv6 addrs + * 0: if IPv4 addr is first + * 1: if IPv6 addr is first + */ +static int check_resolve_order(void) +{ + struct addrinfo ai, *res = NULL, *e; + int rc; + int ret = -1; + int ipv4_idx = -1, ipv6_idx = -1; + int idx; + + memset(&ai, 0, sizeof(ai)); + ai.ai_flags = AI_ADDRCONFIG | AI_PASSIVE; + ai.ai_family = AF_UNSPEC; + ai.ai_socktype = SOCK_STREAM; + + /* lookup */ + rc = getaddrinfo(NULL, "9000", &ai, &res); + if (rc != 0) { + goto cleanup; + } + + for (e = res, idx = 0; e != NULL; e = e->ai_next, idx++) { + if (e->ai_family == AF_INET) { + ipv4_idx = idx; + } else if (e->ai_family == AF_INET6) { + ipv6_idx = idx; + } else { + goto cleanup; + } + } + + if (ipv4_idx == -1 || ipv6_idx == -1) { + goto cleanup; + } + + if (ipv4_idx < ipv6_idx) { + ret = 0; + } else { + ret = 1; + } + + cleanup: + if (res) { + freeaddrinfo(res); + } + return ret; +} + +static int check_protocol_support(void) +{ + if (check_bind("0.0.0.0") < 0) { + return -1; + } + if (check_bind("::") < 0) { + return -1; + } + + return check_resolve_order(); +} + +static pid_t run_qemu(const char *args) +{ + const char *pidfile = "test-sockets-proto.pid"; + char *pidstr; + pid_t child; + int status; + pid_t ret; + const char *binary = getenv("QTEST_QEMU_BINARY"); + long pid = 0; + if (binary == NULL) { + g_printerr("Missing QTEST_QEMU_BINARY env variable\n"); + exit(1); + } + + unlink(pidfile); + child = fork(); + if (child == 0) { + setenv("QEMU_AUDIO_DRV", "none", true); + char *cmd = g_strdup_printf( + "exec %s -pidfile %s -daemonize -nodefconfig -nodefaults " + "-machine none -display none %s 1>/dev/null 2>&1", + binary, pidfile, args); + execlp("/bin/sh", "sh", "-c", cmd, NULL); + _exit(1); + } + + do { + ret = waitpid(child, &status, 0); + } while (ret == -1 && errno == EINTR); + + if (WEXITSTATUS(status) != 0) { + goto cleanup; + } + + if (!g_file_get_contents(pidfile, &pidstr, NULL, NULL)) { + goto cleanup; + } + + qemu_strtol(pidstr, NULL, 0, &pid); + + cleanup: + unlink(pidfile); + return (pid_t)pid; +} + +static void test_listen(const void *opaque) +{ + const QSocketsData *data = opaque; + QIOChannelSocket *sioc; + SocketAddress *saddr; + Error *err = NULL; + pid_t child; + + /* First test IPv4 */ + saddr = g_new0(SocketAddress, 1); + saddr->type = SOCKET_ADDRESS_TYPE_INET; + saddr->u.inet.host = g_strdup("127.0.0.1"); + saddr->u.inet.port = g_strdup("9000"); + saddr->u.inet.has_ipv4 = true; + saddr->u.inet.ipv4 = true; + saddr->u.inet.has_ipv6 = true; + saddr->u.inet.ipv6 = false; + + child = run_qemu(data->args); + + if (!child) { + /* QEMU failed to start, so make sure we are expecting + * this scenario to fail + */ + g_assert(data->error); + goto cleanup; + } else { + g_assert(!data->error); + } + + sioc = qio_channel_socket_new(); + qio_channel_socket_connect_sync(sioc, saddr, &err); + + if (err != NULL) { + /* We failed to connect to IPv4, make sure that + * matches the scenario expectation + */ + g_assert(data->ipv4 == 0); + error_free(err); + err = NULL; + } else { + g_assert(data->ipv4 != 0); + object_unref(OBJECT(sioc)); + } + + kill(child, SIGKILL); + + + /* Now test IPv6 */ + child = run_qemu(data->args); + + /* + * The child should always succeed, because its the + * same config as the successful run we just did above + */ + g_assert(child != 0); + + g_free(saddr->u.inet.host); + saddr->u.inet.host = g_strdup("::1"); + saddr->u.inet.ipv4 = false; + saddr->u.inet.ipv6 = true; + + sioc = qio_channel_socket_new(); + qio_channel_socket_connect_sync(sioc, saddr, &err); + + if (err != NULL) { + /* We failed to connect to IPv6, make sure that + * matches the scenario expectation + */ + g_assert(data->ipv6 == 0); + error_free(err); + err = NULL; + } else { + g_assert(data->ipv6 != 0); + object_unref(OBJECT(sioc)); + } + kill(child, SIGKILL); + + cleanup: + qapi_free_SocketAddress(saddr); +} + + +int main(int argc, char **argv) +{ + int ret; + gsize i; + int ipv6_first; + + ipv6_first = check_protocol_support(); + if (ipv6_first < 0) { + /* Skip test if we can't bind, or have unexpected + * results from getaddrinfo */ + return 0; + } + + signal(SIGPIPE, SIG_IGN); + + module_call_init(MODULE_INIT_QOM); + g_test_init(&argc, &argv, NULL); + + for (i = 0; i < G_N_ELEMENTS(test_data); i++) { + QSocketsData *data = &test_data[i]; + if (data->ipv6 == -1) { + data->ipv6 = ipv6_first ? 1 : 0; + } + g_test_add_data_func(data->name, data, test_listen); + } + + ret = g_test_run(); + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} -- 2.9.4 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 2017-07-11 12:44 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 Daniel P. Berrange ` (4 preceding siblings ...) 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 5/5] tests: add functional test validating ipv4/ipv6 address flag handling Daniel P. Berrange @ 2017-07-11 14:21 ` no-reply 2017-07-12 9:13 ` Daniel P. Berrange 5 siblings, 1 reply; 10+ messages in thread From: no-reply @ 2017-07-11 14:21 UTC (permalink / raw) To: berrange; +Cc: famz, qemu-devel, peter.maydell Hi, This series failed automatic build test. Please find the testing commands and their output below. If you have docker installed, you can probably reproduce it locally. Message-id: 20170711124411.10499-1-berrange@redhat.com Type: series Subject: [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 === TEST SCRIPT BEGIN === #!/bin/bash set -e git submodule update --init dtc # Let docker tests dump environment info export SHOW_ENV=1 export J=8 time make docker-test-quick@centos6 time make docker-test-build@min-glib time make docker-test-mingw@fedora === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 Switched to a new branch 'test' bb3fa3a tests: add functional test validating ipv4/ipv6 address flag handling 4f46c00 io: preserve ipv4/ipv6 flags when resolving InetSocketAddress 8e09d68 sockets: ensure we don't accept IPv4 clients when IPv4 is disabled 0a9724e sockets: don't block IPv4 clients when listening on "::" 33b0ba0 sockets: ensure we can bind to both ipv4 & ipv6 separately === OUTPUT BEGIN === Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc' Cloning into '/var/tmp/patchew-tester-tmp-qgefdzlr/src/dtc'... Submodule path 'dtc': checked out '558cd81bdd432769b59bff01240c44f82cfb1a9d' BUILD centos6 make[1]: Entering directory '/var/tmp/patchew-tester-tmp-qgefdzlr/src' ARCHIVE qemu.tgz ARCHIVE dtc.tgz COPY RUNNER RUN test-quick in qemu:centos6 Packages installed: SDL-devel-1.2.14-7.el6_7.1.x86_64 bison-2.4.1-5.el6.x86_64 ccache-3.1.6-2.el6.x86_64 epel-release-6-8.noarch flex-2.5.35-9.el6.x86_64 gcc-4.4.7-18.el6.x86_64 git-1.7.1-8.el6.x86_64 glib2-devel-2.28.8-9.el6.x86_64 libfdt-devel-1.4.0-1.el6.x86_64 make-3.81-23.el6.x86_64 package g++ is not installed pixman-devel-0.32.8-1.el6.x86_64 tar-1.23-15.el6_8.x86_64 zlib-devel-1.2.3-29.el6.x86_64 Environment variables: PACKAGES=libfdt-devel ccache tar git make gcc g++ flex bison zlib-devel glib2-devel SDL-devel pixman-devel epel-release HOSTNAME=7f142114f833 TERM=xterm MAKEFLAGS= -j8 HISTSIZE=1000 J=8 USER=root CCACHE_DIR=/var/tmp/ccache EXTRA_CONFIGURE_OPTS= V= SHOW_ENV=1 MAIL=/var/spool/mail/root PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ LANG=en_US.UTF-8 TARGET_LIST= HISTCONTROL=ignoredups SHLVL=1 HOME=/root TEST_DIR=/tmp/qemu-test LOGNAME=root LESSOPEN=||/usr/bin/lesspipe.sh %s FEATURES= dtc DEBUG= G_BROKEN_FILENAMES=1 CCACHE_HASHDIR= _=/usr/bin/env Configure options: --enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install /tmp/qemu-test/src/configure: line 4771: c++: command not found No C++ compiler available; disabling C++ specific optional code Install prefix /var/tmp/qemu-build/install BIOS directory /var/tmp/qemu-build/install/share/qemu binary directory /var/tmp/qemu-build/install/bin library directory /var/tmp/qemu-build/install/lib module directory /var/tmp/qemu-build/install/lib/qemu libexec directory /var/tmp/qemu-build/install/libexec include directory /var/tmp/qemu-build/install/include config directory /var/tmp/qemu-build/install/etc local state directory /var/tmp/qemu-build/install/var Manual directory /var/tmp/qemu-build/install/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /tmp/qemu-test/src C compiler cc Host C compiler cc C++ compiler Objective-C compiler cc ARFLAGS rv CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g QEMU_CFLAGS -I/usr/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all LDFLAGS -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g make make install install python python -B smbd /usr/sbin/smbd module support no host CPU x86_64 host big endian no target list x86_64-softmmu aarch64-softmmu gprof enabled no sparse enabled no strip binaries yes profiler no static build no pixman system SDL support yes (1.2.14) GTK support no GTK GL support no VTE support no TLS priority NORMAL GNUTLS support no GNUTLS rnd no libgcrypt no libgcrypt kdf no nettle no nettle kdf no libtasn1 no curses support no virgl support no curl support no mingw32 support no Audio drivers oss Block whitelist (rw) Block whitelist (ro) VirtFS support no VNC support yes VNC SASL support no VNC JPEG support no VNC PNG support no xen support no brlapi support no bluez support no Documentation no PIE yes vde support no netmap support no Linux AIO support no ATTR/XATTR support yes Install blobs yes KVM support yes HAX support no TCG support yes TCG debug enabled no TCG interpreter no RDMA support no fdt support yes preadv support yes fdatasync yes madvise yes posix_madvise yes libcap-ng support no vhost-net support yes vhost-scsi support yes vhost-vsock support yes Trace backends log spice support no rbd support no xfsctl support no smartcard support no libusb no usb net redir no OpenGL support no OpenGL dmabufs no libiscsi support no libnfs support no build guest agent yes QGA VSS support no QGA w32 disk info no QGA MSI support no seccomp support no coroutine backend ucontext coroutine pool yes debug stack usage no GlusterFS support no gcov gcov gcov enabled no TPM support yes libssh2 support no TPM passthrough yes QOM debugging yes Live block migration yes lzo support no snappy support no bzip2 support no NUMA host support no tcmalloc support no jemalloc support no avx2 optimization no replication support yes VxHS block device no GEN x86_64-softmmu/config-devices.mak.tmp mkdir -p dtc/libfdt GEN aarch64-softmmu/config-devices.mak.tmp mkdir -p dtc/tests GEN config-host.h GEN qemu-options.def GEN qmp-commands.h GEN qapi-types.h GEN qapi-visit.h GEN qapi-event.h GEN x86_64-softmmu/config-devices.mak GEN aarch64-softmmu/config-devices.mak GEN qapi-types.c GEN qmp-marshal.c GEN qapi-visit.c GEN qapi-event.c GEN qmp-introspect.h GEN qmp-introspect.c GEN trace/generated-tcg-tracers.h GEN trace/generated-helpers-wrappers.h GEN trace/generated-helpers.h GEN trace/generated-helpers.c GEN module_block.h GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h GEN tests/test-qapi-event.h GEN tests/test-qmp-introspect.h GEN trace-root.h GEN util/trace.h GEN crypto/trace.h GEN io/trace.h GEN migration/trace.h GEN block/trace.h GEN backends/trace.h GEN chardev/trace.h GEN hw/block/trace.h GEN hw/block/dataplane/trace.h GEN hw/char/trace.h GEN hw/intc/trace.h GEN hw/net/trace.h GEN hw/virtio/trace.h GEN hw/audio/trace.h GEN hw/misc/trace.h GEN hw/usb/trace.h GEN hw/scsi/trace.h GEN hw/nvram/trace.h GEN hw/display/trace.h GEN hw/input/trace.h GEN hw/timer/trace.h GEN hw/dma/trace.h GEN hw/sparc/trace.h GEN hw/sd/trace.h GEN hw/isa/trace.h GEN hw/mem/trace.h GEN hw/i386/trace.h GEN hw/i386/xen/trace.h GEN hw/9pfs/trace.h GEN hw/ppc/trace.h GEN hw/pci/trace.h GEN hw/s390x/trace.h GEN hw/vfio/trace.h GEN hw/acpi/trace.h GEN hw/arm/trace.h GEN hw/alpha/trace.h GEN hw/xen/trace.h GEN ui/trace.h GEN audio/trace.h GEN net/trace.h GEN target/arm/trace.h GEN target/i386/trace.h GEN target/mips/trace.h GEN target/sparc/trace.h GEN target/s390x/trace.h GEN target/ppc/trace.h GEN qom/trace.h GEN linux-user/trace.h GEN qapi/trace.h GEN accel/tcg/trace.h GEN accel/kvm/trace.h GEN nbd/trace.h GEN trace-root.c GEN util/trace.c GEN crypto/trace.c GEN io/trace.c GEN migration/trace.c GEN block/trace.c GEN backends/trace.c GEN chardev/trace.c GEN hw/block/trace.c GEN hw/block/dataplane/trace.c GEN hw/char/trace.c GEN hw/intc/trace.c GEN hw/net/trace.c GEN hw/virtio/trace.c GEN hw/audio/trace.c GEN hw/misc/trace.c GEN hw/usb/trace.c GEN hw/scsi/trace.c GEN hw/nvram/trace.c GEN hw/display/trace.c GEN hw/input/trace.c GEN hw/timer/trace.c GEN hw/dma/trace.c GEN hw/sparc/trace.c GEN hw/sd/trace.c GEN hw/isa/trace.c GEN hw/mem/trace.c GEN hw/i386/trace.c GEN hw/i386/xen/trace.c GEN hw/9pfs/trace.c GEN hw/ppc/trace.c GEN hw/pci/trace.c GEN hw/s390x/trace.c GEN hw/vfio/trace.c GEN hw/acpi/trace.c GEN hw/arm/trace.c GEN hw/alpha/trace.c GEN hw/xen/trace.c GEN ui/trace.c GEN audio/trace.c GEN net/trace.c GEN target/arm/trace.c GEN target/i386/trace.c GEN target/mips/trace.c GEN target/sparc/trace.c GEN target/s390x/trace.c GEN target/ppc/trace.c GEN qom/trace.c GEN linux-user/trace.c GEN qapi/trace.c GEN accel/tcg/trace.c GEN accel/kvm/trace.c GEN nbd/trace.c GEN config-all-devices.mak DEP /tmp/qemu-test/src/dtc/tests/dumptrees.c DEP /tmp/qemu-test/src/dtc/tests/trees.S DEP /tmp/qemu-test/src/dtc/tests/value-labels.c DEP /tmp/qemu-test/src/dtc/tests/testutils.c DEP /tmp/qemu-test/src/dtc/tests/asm_tree_dump.c DEP /tmp/qemu-test/src/dtc/tests/truncated_property.c DEP /tmp/qemu-test/src/dtc/tests/check_path.c DEP /tmp/qemu-test/src/dtc/tests/overlay_bad_fixup.c DEP /tmp/qemu-test/src/dtc/tests/overlay.c DEP /tmp/qemu-test/src/dtc/tests/subnode_iterate.c DEP /tmp/qemu-test/src/dtc/tests/property_iterate.c DEP /tmp/qemu-test/src/dtc/tests/integer-expressions.c DEP /tmp/qemu-test/src/dtc/tests/utilfdt_test.c DEP /tmp/qemu-test/src/dtc/tests/path_offset_aliases.c DEP /tmp/qemu-test/src/dtc/tests/add_subnode_with_nops.c DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_unordered.c DEP /tmp/qemu-test/src/dtc/tests/dtb_reverse.c DEP /tmp/qemu-test/src/dtc/tests/dtbs_equal_ordered.c DEP /tmp/qemu-test/src/dtc/tests/extra-terminating-null.c DEP /tmp/qemu-test/src/dtc/tests/incbin.c DEP /tmp/qemu-test/src/dtc/tests/boot-cpuid.c DEP /tmp/qemu-test/src/dtc/tests/phandle_format.c DEP /tmp/qemu-test/src/dtc/tests/path-references.c DEP /tmp/qemu-test/src/dtc/tests/references.c DEP /tmp/qemu-test/src/dtc/tests/string_escapes.c DEP /tmp/qemu-test/src/dtc/tests/propname_escapes.c DEP /tmp/qemu-test/src/dtc/tests/appendprop2.c DEP /tmp/qemu-test/src/dtc/tests/appendprop1.c DEP /tmp/qemu-test/src/dtc/tests/del_node.c DEP /tmp/qemu-test/src/dtc/tests/del_property.c DEP /tmp/qemu-test/src/dtc/tests/setprop.c DEP /tmp/qemu-test/src/dtc/tests/set_name.c DEP /tmp/qemu-test/src/dtc/tests/rw_tree1.c DEP /tmp/qemu-test/src/dtc/tests/open_pack.c DEP /tmp/qemu-test/src/dtc/tests/nopulate.c DEP /tmp/qemu-test/src/dtc/tests/mangle-layout.c DEP /tmp/qemu-test/src/dtc/tests/sw_tree1.c DEP /tmp/qemu-test/src/dtc/tests/move_and_save.c DEP /tmp/qemu-test/src/dtc/tests/nop_node.c DEP /tmp/qemu-test/src/dtc/tests/nop_property.c DEP /tmp/qemu-test/src/dtc/tests/setprop_inplace.c DEP /tmp/qemu-test/src/dtc/tests/stringlist.c DEP /tmp/qemu-test/src/dtc/tests/notfound.c DEP /tmp/qemu-test/src/dtc/tests/addr_size_cells.c DEP /tmp/qemu-test/src/dtc/tests/sized_cells.c DEP /tmp/qemu-test/src/dtc/tests/get_alias.c DEP /tmp/qemu-test/src/dtc/tests/char_literal.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_compatible.c DEP /tmp/qemu-test/src/dtc/tests/node_check_compatible.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_phandle.c DEP /tmp/qemu-test/src/dtc/tests/node_offset_by_prop_value.c DEP /tmp/qemu-test/src/dtc/tests/parent_offset.c DEP /tmp/qemu-test/src/dtc/tests/supernode_atdepth_offset.c DEP /tmp/qemu-test/src/dtc/tests/get_path.c DEP /tmp/qemu-test/src/dtc/tests/get_phandle.c DEP /tmp/qemu-test/src/dtc/tests/getprop.c DEP /tmp/qemu-test/src/dtc/tests/get_name.c DEP /tmp/qemu-test/src/dtc/tests/path_offset.c DEP /tmp/qemu-test/src/dtc/tests/subnode_offset.c DEP /tmp/qemu-test/src/dtc/tests/root_node.c DEP /tmp/qemu-test/src/dtc/tests/find_property.c DEP /tmp/qemu-test/src/dtc/tests/get_mem_rsv.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_overlay.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_addresses.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_empty_tree.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_strerror.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_rw.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_sw.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_wip.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt_ro.c DEP /tmp/qemu-test/src/dtc/libfdt/fdt.c DEP /tmp/qemu-test/src/dtc/fdtput.c DEP /tmp/qemu-test/src/dtc/util.c DEP /tmp/qemu-test/src/dtc/fdtget.c DEP /tmp/qemu-test/src/dtc/fdtdump.c LEX convert-dtsv0-lexer.lex.c DEP /tmp/qemu-test/src/dtc/srcpos.c DEP /tmp/qemu-test/src/dtc/treesource.c BISON dtc-parser.tab.c DEP /tmp/qemu-test/src/dtc/livetree.c DEP /tmp/qemu-test/src/dtc/fstree.c LEX dtc-lexer.lex.c DEP /tmp/qemu-test/src/dtc/flattree.c DEP /tmp/qemu-test/src/dtc/dtc.c DEP /tmp/qemu-test/src/dtc/data.c DEP /tmp/qemu-test/src/dtc/checks.c DEP convert-dtsv0-lexer.lex.c DEP dtc-parser.tab.c DEP dtc-lexer.lex.c CHK version_gen.h UPD version_gen.h DEP /tmp/qemu-test/src/dtc/util.c CC libfdt/fdt.o CC libfdt/fdt_ro.o CC libfdt/fdt_wip.o CC libfdt/fdt_sw.o CC libfdt/fdt_rw.o CC libfdt/fdt_strerror.o CC libfdt/fdt_empty_tree.o CC libfdt/fdt_addresses.o CC libfdt/fdt_overlay.o AR libfdt/libfdt.a ar: creating libfdt/libfdt.a a - libfdt/fdt.o a - libfdt/fdt_ro.o a - libfdt/fdt_wip.o a - libfdt/fdt_sw.o a - libfdt/fdt_rw.o a - libfdt/fdt_strerror.o a - libfdt/fdt_empty_tree.o a - libfdt/fdt_addresses.o a - libfdt/fdt_overlay.o CC tests/qemu-iotests/socket_scm_helper.o GEN qga/qapi-generated/qga-qapi-types.h GEN qga/qapi-generated/qga-qapi-visit.h GEN qga/qapi-generated/qga-qmp-commands.h GEN qga/qapi-generated/qga-qapi-types.c GEN qga/qapi-generated/qga-qapi-visit.c GEN qga/qapi-generated/qga-qmp-marshal.c CC qmp-introspect.o CC qapi-types.o CC qapi-visit.o CC qapi-event.o CC qapi/qapi-visit-core.o CC qapi/qapi-dealloc-visitor.o CC qapi/qobject-input-visitor.o CC qapi/qobject-output-visitor.o CC qapi/qmp-registry.o CC qapi/qmp-dispatch.o CC qapi/string-input-visitor.o CC qapi/string-output-visitor.o CC qapi/opts-visitor.o CC qapi/qapi-clone-visitor.o CC qapi/qmp-event.o CC qapi/qapi-util.o CC qobject/qnull.o CC qobject/qnum.o CC qobject/qstring.o CC qobject/qdict.o CC qobject/qlist.o CC qobject/qbool.o CC qobject/qobject.o CC qobject/qjson.o CC qobject/json-lexer.o CC qobject/json-parser.o CC qobject/json-streamer.o CC trace/control.o CC trace/qmp.o CC util/osdep.o CC util/cutils.o CC util/unicode.o CC util/qemu-timer-common.o CC util/bufferiszero.o CC util/lockcnt.o CC util/aiocb.o CC util/async.o CC util/thread-pool.o CC util/qemu-timer.o CC util/main-loop.o CC util/iohandler.o CC util/aio-posix.o CC util/compatfd.o CC util/event_notifier-posix.o CC util/mmap-alloc.o CC util/oslib-posix.o CC util/qemu-openpty.o CC util/qemu-thread-posix.o CC util/memfd.o CC util/envlist.o CC util/path.o CC util/module.o CC util/host-utils.o CC util/bitmap.o CC util/bitops.o CC util/hbitmap.o CC util/fifo8.o CC util/acl.o CC util/cacheinfo.o CC util/error.o CC util/qemu-error.o CC util/id.o CC util/iov.o CC util/qemu-config.o CC util/qemu-sockets.o CC util/uri.o CC util/notify.o CC util/qemu-option.o CC util/qemu-progress.o CC util/keyval.o CC util/hexdump.o CC util/uuid.o CC util/crc32c.o CC util/throttle.o CC util/getauxval.o CC util/readline.o CC util/rcu.o CC util/qemu-coroutine.o CC util/qemu-coroutine-lock.o CC util/qemu-coroutine-io.o CC util/qemu-coroutine-sleep.o CC util/coroutine-ucontext.o CC util/buffer.o CC util/timed-average.o CC util/base64.o CC util/log.o CC util/qdist.o CC util/qht.o CC util/range.o CC util/stats64.o CC util/systemd.o CC trace-root.o CC util/trace.o CC crypto/trace.o CC io/trace.o CC migration/trace.o CC block/trace.o CC backends/trace.o CC chardev/trace.o CC hw/block/trace.o CC hw/block/dataplane/trace.o CC hw/char/trace.o CC hw/intc/trace.o CC hw/net/trace.o CC hw/virtio/trace.o CC hw/audio/trace.o CC hw/usb/trace.o CC hw/misc/trace.o CC hw/scsi/trace.o CC hw/nvram/trace.o CC hw/display/trace.o CC hw/input/trace.o CC hw/timer/trace.o CC hw/dma/trace.o CC hw/sparc/trace.o CC hw/sd/trace.o CC hw/isa/trace.o CC hw/mem/trace.o CC hw/i386/trace.o CC hw/i386/xen/trace.o CC hw/9pfs/trace.o CC hw/ppc/trace.o CC hw/pci/trace.o CC hw/s390x/trace.o CC hw/vfio/trace.o CC hw/acpi/trace.o CC hw/arm/trace.o CC hw/alpha/trace.o CC hw/xen/trace.o CC ui/trace.o CC audio/trace.o CC net/trace.o CC target/arm/trace.o CC target/i386/trace.o CC target/sparc/trace.o CC target/mips/trace.o CC target/s390x/trace.o CC target/ppc/trace.o CC qom/trace.o CC linux-user/trace.o CC qapi/trace.o CC accel/tcg/trace.o CC accel/kvm/trace.o CC nbd/trace.o CC crypto/pbkdf-stub.o CC stubs/arch-query-cpu-def.o CC stubs/arch-query-cpu-model-expansion.o CC stubs/arch-query-cpu-model-comparison.o CC stubs/arch-query-cpu-model-baseline.o CC stubs/bdrv-next-monitor-owned.o CC stubs/blk-commit-all.o CC stubs/blockdev-close-all-bdrv-states.o CC stubs/clock-warp.o CC stubs/cpu-get-clock.o CC stubs/cpu-get-icount.o CC stubs/dump.o CC stubs/error-printf.o CC stubs/fdset.o CC stubs/gdbstub.o CC stubs/iothread.o CC stubs/get-vm-name.o CC stubs/iothread-lock.o CC stubs/machine-init-done.o CC stubs/is-daemonized.o CC stubs/migr-blocker.o CC stubs/monitor.o CC stubs/qtest.o CC stubs/notify-event.o CC stubs/replay.o CC stubs/runstate-check.o CC stubs/set-fd-handler.o CC stubs/slirp.o CC stubs/sysbus.o CC stubs/trace-control.o CC stubs/uuid.o CC stubs/vmstate.o CC stubs/vm-stop.o CC stubs/qmp_pc_dimm_device_list.o CC stubs/target-get-monitor-def.o CC stubs/target-monitor-defs.o CC stubs/pc_madt_cpu_entry.o CC stubs/xen-common.o CC stubs/vmgenid.o CC stubs/xen-hvm.o CC contrib/ivshmem-client/ivshmem-client.o CC contrib/ivshmem-client/main.o CC contrib/ivshmem-server/ivshmem-server.o CC contrib/ivshmem-server/main.o CC qemu-nbd.o CC block.o CC blockjob.o CC qemu-io-cmds.o CC replication.o CC block/raw-format.o CC block/qcow.o CC block/vdi.o CC block/vmdk.o CC block/cloop.o CC block/bochs.o CC block/vpc.o CC block/vvfat.o CC block/dmg.o CC block/qcow2.o CC block/qcow2-refcount.o CC block/qcow2-cluster.o CC block/qcow2-snapshot.o CC block/qcow2-cache.o CC block/qed.o CC block/qed-l2-cache.o CC block/qed-table.o CC block/qed-cluster.o CC block/qed-check.o CC block/vhdx.o CC block/vhdx-endian.o CC block/vhdx-log.o CC block/quorum.o CC block/parallels.o CC block/blkdebug.o CC block/blkverify.o CC block/blkreplay.o CC block/block-backend.o CC block/snapshot.o CC block/qapi.o CC block/file-posix.o CC block/null.o CC block/mirror.o CC block/commit.o CC block/io.o CC block/throttle-groups.o CC block/nbd.o CC block/nbd-client.o CC block/sheepdog.o CC block/accounting.o CC block/dirty-bitmap.o CC block/write-threshold.o CC block/backup.o CC block/replication.o CC block/crypto.o CC nbd/server.o CC nbd/client.o CC nbd/common.o CC crypto/init.o CC crypto/hash.o CC crypto/hash-glib.o CC crypto/hmac.o CC crypto/hmac-glib.o CC crypto/aes.o CC crypto/desrfb.o CC crypto/cipher.o CC crypto/tlscreds.o CC crypto/tlscredsanon.o CC crypto/tlscredsx509.o CC crypto/tlssession.o CC crypto/secret.o CC crypto/random-platform.o CC crypto/pbkdf.o CC crypto/ivgen-essiv.o CC crypto/ivgen.o CC crypto/ivgen-plain.o CC crypto/ivgen-plain64.o CC crypto/afsplit.o CC crypto/xts.o CC crypto/block.o CC crypto/block-qcow.o CC crypto/block-luks.o CC io/channel-command.o CC io/channel.o CC io/channel-buffer.o CC io/channel-file.o CC io/channel-socket.o CC io/channel-tls.o CC io/channel-watch.o CC io/channel-websock.o CC io/channel-util.o CC io/dns-resolver.o CC io/task.o CC qom/object.o CC qom/qom-qobject.o CC qom/object_interfaces.o CC qom/container.o GEN qemu-img-cmds.h CC qemu-io.o CC qemu-bridge-helper.o CC blockdev.o CC blockdev-nbd.o CC bootdevice.o CC iothread.o CC device-hotplug.o CC qdev-monitor.o CC os-posix.o CC bt-host.o CC bt-vhci.o CC dma-helpers.o CC vl.o CC tpm.o CC device_tree.o CC qmp-marshal.o CC qmp.o CC hmp.o CC cpus-common.o CC audio/audio.o CC audio/noaudio.o CC audio/wavaudio.o CC audio/mixeng.o CC audio/sdlaudio.o CC audio/ossaudio.o CC audio/wavcapture.o CC backends/rng.o CC backends/rng-egd.o CC backends/rng-random.o CC backends/tpm.o CC backends/hostmem.o CC backends/hostmem-ram.o CC backends/hostmem-file.o CC backends/cryptodev.o CC backends/cryptodev-builtin.o CC block/stream.o CC chardev/msmouse.o CC chardev/wctablet.o CC chardev/testdev.o CC disas/arm.o CC disas/i386.o CC fsdev/qemu-fsdev-dummy.o CC fsdev/qemu-fsdev-opts.o CC fsdev/qemu-fsdev-throttle.o CC hw/acpi/core.o CC hw/acpi/piix4.o CC hw/acpi/pcihp.o CC hw/acpi/ich9.o CC hw/acpi/tco.o CC hw/acpi/cpu_hotplug.o CC hw/acpi/memory_hotplug.o CC hw/acpi/cpu.o CC hw/acpi/nvdimm.o CC hw/acpi/vmgenid.o CC hw/acpi/acpi_interface.o CC hw/acpi/bios-linker-loader.o CC hw/acpi/aml-build.o CC hw/acpi/ipmi.o CC hw/acpi/acpi-stub.o CC hw/acpi/ipmi-stub.o CC hw/audio/sb16.o CC hw/audio/es1370.o CC hw/audio/ac97.o CC hw/audio/fmopl.o CC hw/audio/adlib.o CC hw/audio/gus.o CC hw/audio/gusemu_hal.o CC hw/audio/gusemu_mixer.o CC hw/audio/cs4231a.o CC hw/audio/intel-hda.o CC hw/audio/hda-codec.o CC hw/audio/pcspk.o CC hw/audio/wm8750.o CC hw/audio/pl041.o CC hw/audio/lm4549.o CC hw/audio/marvell_88w8618.o CC hw/audio/soundhw.o CC hw/block/block.o CC hw/block/cdrom.o CC hw/block/hd-geometry.o CC hw/block/fdc.o CC hw/block/m25p80.o CC hw/block/nand.o CC hw/block/pflash_cfi01.o CC hw/block/pflash_cfi02.o CC hw/block/ecc.o CC hw/block/onenand.o CC hw/block/nvme.o CC hw/bt/core.o CC hw/bt/l2cap.o CC hw/bt/sdp.o CC hw/bt/hci.o CC hw/bt/hid.o CC hw/bt/hci-csr.o CC hw/char/ipoctal232.o CC hw/char/parallel.o CC hw/char/pl011.o CC hw/char/serial.o CC hw/char/serial-isa.o CC hw/char/serial-pci.o CC hw/char/virtio-console.o CC hw/char/cadence_uart.o CC hw/char/debugcon.o CC hw/char/imx_serial.o CC hw/core/qdev.o CC hw/core/qdev-properties.o CC hw/core/bus.o CC hw/core/reset.o CC hw/core/fw-path-provider.o CC hw/core/irq.o CC hw/core/hotplug.o CC hw/core/nmi.o CC hw/core/ptimer.o CC hw/core/sysbus.o CC hw/core/machine.o CC hw/core/loader.o CC hw/core/qdev-properties-system.o CC hw/core/register.o CC hw/core/or-irq.o CC hw/core/platform-bus.o CC hw/cpu/core.o CC hw/display/ads7846.o CC hw/display/cirrus_vga.o CC hw/display/pl110.o CC hw/display/ssd0303.o CC hw/display/ssd0323.o CC hw/display/vga-pci.o CC hw/display/vga-isa.o CC hw/display/vmware_vga.o CC hw/display/blizzard.o CC hw/display/exynos4210_fimd.o CC hw/display/framebuffer.o CC hw/display/tc6393xb.o CC hw/dma/pl080.o CC hw/dma/pl330.o CC hw/dma/i8257.o CC hw/dma/xlnx-zynq-devcfg.o CC hw/gpio/max7310.o CC hw/gpio/pl061.o CC hw/gpio/gpio_key.o CC hw/gpio/zaurus.o CC hw/i2c/core.o CC hw/i2c/smbus.o CC hw/i2c/smbus_eeprom.o CC hw/i2c/i2c-ddc.o CC hw/i2c/versatile_i2c.o CC hw/i2c/smbus_ich9.o CC hw/i2c/bitbang_i2c.o CC hw/i2c/pm_smbus.o CC hw/i2c/exynos4210_i2c.o CC hw/i2c/imx_i2c.o CC hw/i2c/aspeed_i2c.o CC hw/ide/core.o CC hw/ide/qdev.o CC hw/ide/atapi.o CC hw/ide/pci.o CC hw/ide/isa.o CC hw/ide/piix.o CC hw/ide/microdrive.o CC hw/ide/ahci.o CC hw/ide/ich.o CC hw/input/hid.o CC hw/input/lm832x.o CC hw/input/pckbd.o CC hw/input/pl050.o CC hw/input/ps2.o CC hw/input/stellaris_input.o CC hw/input/tsc2005.o CC hw/input/vmmouse.o CC hw/input/virtio-input.o CC hw/input/virtio-input-hid.o CC hw/input/virtio-input-host.o CC hw/intc/i8259_common.o CC hw/intc/i8259.o CC hw/intc/pl190.o CC hw/intc/imx_avic.o CC hw/intc/realview_gic.o CC hw/intc/ioapic_common.o CC hw/intc/arm_gic_common.o CC hw/intc/arm_gic.o CC hw/intc/arm_gicv2m.o CC hw/intc/arm_gicv3_common.o CC hw/intc/arm_gicv3.o CC hw/intc/arm_gicv3_dist.o CC hw/intc/arm_gicv3_redist.o CC hw/intc/arm_gicv3_its_common.o CC hw/intc/intc.o CC hw/ipack/ipack.o CC hw/ipack/tpci200.o CC hw/ipmi/ipmi.o CC hw/ipmi/ipmi_bmc_extern.o CC hw/ipmi/ipmi_bmc_sim.o CC hw/ipmi/isa_ipmi_kcs.o CC hw/ipmi/isa_ipmi_bt.o CC hw/isa/isa-bus.o CC hw/isa/apm.o CC hw/mem/pc-dimm.o CC hw/mem/nvdimm.o CC hw/misc/applesmc.o CC hw/misc/max111x.o CC hw/misc/tmp105.o CC hw/misc/tmp421.o CC hw/misc/debugexit.o CC hw/misc/sga.o CC hw/misc/pc-testdev.o CC hw/misc/pci-testdev.o CC hw/misc/edu.o CC hw/misc/unimp.o CC hw/misc/arm_l2x0.o CC hw/misc/arm_integrator_debug.o CC hw/misc/a9scu.o CC hw/misc/arm11scu.o CC hw/net/ne2000.o CC hw/net/eepro100.o CC hw/net/pcnet.o CC hw/net/pcnet-pci.o CC hw/net/e1000x_common.o CC hw/net/e1000.o CC hw/net/net_tx_pkt.o CC hw/net/net_rx_pkt.o CC hw/net/e1000e.o CC hw/net/e1000e_core.o CC hw/net/rtl8139.o CC hw/net/vmxnet3.o CC hw/net/smc91c111.o CC hw/net/lan9118.o CC hw/net/ne2000-isa.o CC hw/net/xgmac.o CC hw/net/allwinner_emac.o CC hw/net/imx_fec.o CC hw/net/cadence_gem.o CC hw/net/stellaris_enet.o CC hw/net/ftgmac100.o CC hw/net/rocker/rocker.o CC hw/net/rocker/rocker_fp.o CC hw/net/rocker/rocker_world.o CC hw/net/rocker/rocker_desc.o CC hw/net/rocker/rocker_of_dpa.o CC hw/nvram/eeprom93xx.o CC hw/nvram/fw_cfg.o CC hw/nvram/chrp_nvram.o CC hw/pci-bridge/pci_bridge_dev.o CC hw/pci-bridge/pcie_root_port.o CC hw/pci-bridge/gen_pcie_root_port.o CC hw/pci-bridge/pci_expander_bridge.o CC hw/pci-bridge/xio3130_upstream.o CC hw/pci-bridge/xio3130_downstream.o CC hw/pci-bridge/ioh3420.o CC hw/pci-bridge/i82801b11.o CC hw/pci-host/pam.o CC hw/pci-host/versatile.o CC hw/pci-host/piix.o CC hw/pci-host/q35.o CC hw/pci-host/gpex.o CC hw/pci/pci.o CC hw/pci/pci_bridge.o CC hw/pci/msix.o CC hw/pci/msi.o CC hw/pci/shpc.o CC hw/pci/slotid_cap.o CC hw/pci/pci_host.o CC hw/pci/pcie_host.o CC hw/pci/pcie.o CC hw/pci/pcie_aer.o CC hw/pci/pcie_port.o CC hw/pci/pci-stub.o CC hw/pcmcia/pcmcia.o CC hw/scsi/scsi-disk.o CC hw/scsi/scsi-generic.o CC hw/scsi/scsi-bus.o CC hw/scsi/lsi53c895a.o CC hw/scsi/mptsas.o CC hw/scsi/mptconfig.o CC hw/scsi/mptendian.o CC hw/scsi/vmw_pvscsi.o CC hw/scsi/megasas.o CC hw/scsi/esp.o CC hw/scsi/esp-pci.o CC hw/sd/pl181.o CC hw/sd/ssi-sd.o CC hw/sd/sd.o CC hw/sd/core.o CC hw/sd/sdhci.o CC hw/smbios/smbios.o CC hw/smbios/smbios_type_38.o CC hw/smbios/smbios-stub.o CC hw/smbios/smbios_type_38-stub.o CC hw/ssi/pl022.o CC hw/ssi/ssi.o CC hw/ssi/xilinx_spips.o CC hw/ssi/aspeed_smc.o CC hw/ssi/stm32f2xx_spi.o CC hw/timer/arm_timer.o CC hw/timer/arm_mptimer.o CC hw/timer/armv7m_systick.o CC hw/timer/a9gtimer.o CC hw/timer/cadence_ttc.o CC hw/timer/ds1338.o CC hw/timer/hpet.o CC hw/timer/i8254_common.o CC hw/timer/i8254.o CC hw/timer/pl031.o CC hw/timer/twl92230.o CC hw/timer/imx_epit.o CC hw/timer/imx_gpt.o CC hw/timer/stm32f2xx_timer.o CC hw/timer/aspeed_timer.o CC hw/tpm/tpm_tis.o CC hw/tpm/tpm_passthrough.o CC hw/tpm/tpm_util.o CC hw/usb/core.o CC hw/usb/combined-packet.o CC hw/usb/bus.o CC hw/usb/libhw.o CC hw/usb/desc.o CC hw/usb/desc-msos.o CC hw/usb/hcd-uhci.o CC hw/usb/hcd-ohci.o CC hw/usb/hcd-ehci.o CC hw/usb/hcd-ehci-pci.o CC hw/usb/hcd-ehci-sysbus.o CC hw/usb/hcd-xhci.o CC hw/usb/hcd-xhci-nec.o CC hw/usb/hcd-musb.o CC hw/usb/dev-hub.o CC hw/usb/dev-hid.o CC hw/usb/dev-wacom.o CC hw/usb/dev-storage.o CC hw/usb/dev-uas.o CC hw/usb/dev-audio.o CC hw/usb/dev-serial.o CC hw/usb/dev-network.o CC hw/usb/dev-bluetooth.o CC hw/usb/dev-smartcard-reader.o CC hw/usb/dev-mtp.o CC hw/usb/host-stub.o CC hw/virtio/virtio-rng.o CC hw/virtio/virtio-pci.o CC hw/virtio/virtio-bus.o CC hw/virtio/virtio-mmio.o CC hw/virtio/vhost-stub.o CC hw/watchdog/watchdog.o CC hw/watchdog/wdt_i6300esb.o CC hw/watchdog/wdt_ib700.o CC hw/watchdog/wdt_aspeed.o CC migration/migration.o CC migration/socket.o CC migration/fd.o CC migration/exec.o CC migration/tls.o CC migration/channel.o CC migration/savevm.o CC migration/colo-comm.o CC migration/colo.o CC migration/colo-failover.o CC migration/vmstate.o CC migration/vmstate-types.o CC migration/page_cache.o CC migration/global_state.o CC migration/qemu-file.o CC migration/qemu-file-channel.o CC migration/xbzrle.o CC migration/postcopy-ram.o CC migration/qjson.o CC migration/block.o CC net/net.o CC net/queue.o CC net/checksum.o CC net/util.o CC net/hub.o CC net/socket.o CC net/dump.o CC net/eth.o CC net/l2tpv3.o CC net/vhost-user.o CC net/slirp.o CC net/filter.o CC net/filter-buffer.o CC net/filter-mirror.o CC net/colo-compare.o CC net/colo.o CC net/filter-rewriter.o CC net/filter-replay.o CC net/tap.o CC net/tap-linux.o CC qom/cpu.o CC replay/replay.o CC replay/replay-internal.o CC replay/replay-events.o CC replay/replay-input.o CC replay/replay-time.o CC replay/replay-char.o CC replay/replay-net.o CC replay/replay-snapshot.o CC replay/replay-audio.o CC slirp/cksum.o /tmp/qemu-test/src/replay/replay-internal.c: In function ‘replay_put_array’: /tmp/qemu-test/src/replay/replay-internal.c:65: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result CC slirp/ip_icmp.o CC slirp/if.o CC slirp/ip6_icmp.o CC slirp/ip6_input.o CC slirp/ip6_output.o CC slirp/ip_input.o CC slirp/ip_output.o CC slirp/dnssearch.o CC slirp/dhcpv6.o CC slirp/slirp.o CC slirp/misc.o CC slirp/mbuf.o CC slirp/sbuf.o CC slirp/socket.o CC slirp/tcp_input.o CC slirp/tcp_output.o CC slirp/tcp_subr.o CC slirp/tcp_timer.o CC slirp/udp.o CC slirp/udp6.o CC slirp/bootp.o /tmp/qemu-test/src/slirp/tcp_input.c: In function ‘tcp_input’: /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_p’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_len’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_tos’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_id’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_off’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_ttl’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_sum’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_src.s_addr’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_dst.s_addr’ may be used uninitialized in this function /tmp/qemu-test/src/slirp/tcp_input.c:220: warning: ‘save_ip6.ip_nh’ may be used uninitialized in this function CC slirp/tftp.o CC slirp/arp_table.o CC slirp/ncsi.o CC ui/keymaps.o CC ui/console.o CC slirp/ndp_table.o CC ui/cursor.o CC ui/input.o CC ui/input-linux.o CC ui/input-legacy.o CC ui/input-keymap.o CC ui/qemu-pixman.o CC ui/sdl.o CC ui/sdl_zoom.o CC ui/x_keymap.o CC ui/vnc-enc-zlib.o CC ui/vnc.o CC ui/vnc-enc-hextile.o CC ui/vnc-enc-tight.o CC ui/vnc-palette.o CC ui/vnc-auth-vencrypt.o CC ui/vnc-enc-zrle.o CC ui/vnc-jobs.o CC ui/vnc-ws.o CC chardev/char.o CC chardev/char-fd.o CC chardev/char-fe.o CC chardev/char-file.o CC chardev/char-io.o CC chardev/char-mux.o CC chardev/char-null.o CC chardev/char-parallel.o CC chardev/char-pipe.o CC chardev/char-pty.o CC chardev/char-ringbuf.o CC chardev/char-serial.o CC chardev/char-socket.o CC chardev/char-stdio.o CC chardev/char-udp.o CC qga/commands.o CC qga/guest-agent-command-state.o LINK tests/qemu-iotests/socket_scm_helper CC qga/commands-posix.o CC qga/channel-posix.o CC qga/qapi-generated/qga-qapi-types.o CC qga/qapi-generated/qga-qapi-visit.o CC qga/main.o CC qga/qapi-generated/qga-qmp-marshal.o AR libqemuutil.a CC qemu-img.o AR libqemustub.a AS optionrom/linuxboot.o CC optionrom/linuxboot_dma.o AS optionrom/multiboot.o AS optionrom/kvmvapic.o cc: unrecognized option '-no-integrated-as' cc: unrecognized option '-no-integrated-as' BUILD optionrom/linuxboot.img BUILD optionrom/linuxboot_dma.img BUILD optionrom/multiboot.img BUILD optionrom/multiboot.raw BUILD optionrom/linuxboot.raw BUILD optionrom/linuxboot_dma.raw BUILD optionrom/kvmvapic.img BUILD optionrom/kvmvapic.raw SIGN optionrom/linuxboot.bin SIGN optionrom/kvmvapic.bin SIGN optionrom/multiboot.bin SIGN optionrom/linuxboot_dma.bin LINK qemu-ga LINK ivshmem-client LINK ivshmem-server LINK qemu-nbd LINK qemu-img LINK qemu-io LINK qemu-bridge-helper GEN x86_64-softmmu/hmp-commands.h GEN x86_64-softmmu/hmp-commands-info.h GEN x86_64-softmmu/config-target.h GEN aarch64-softmmu/config-target.h GEN aarch64-softmmu/hmp-commands.h GEN aarch64-softmmu/hmp-commands-info.h CC aarch64-softmmu/tcg/tcg-op.o CC aarch64-softmmu/exec.o CC aarch64-softmmu/tcg/tcg-runtime.o CC aarch64-softmmu/tcg/tcg.o CC aarch64-softmmu/fpu/softfloat.o CC aarch64-softmmu/tcg/tcg-common.o CC aarch64-softmmu/tcg/optimize.o CC aarch64-softmmu/disas.o GEN aarch64-softmmu/gdbstub-xml.c CC aarch64-softmmu/hax-stub.o CC aarch64-softmmu/arch_init.o CC aarch64-softmmu/cpus.o CC aarch64-softmmu/monitor.o CC aarch64-softmmu/gdbstub.o CC x86_64-softmmu/exec.o CC aarch64-softmmu/balloon.o CC aarch64-softmmu/ioport.o CC aarch64-softmmu/numa.o CC aarch64-softmmu/qtest.o CC aarch64-softmmu/memory.o CC aarch64-softmmu/memory_mapping.o CC aarch64-softmmu/dump.o CC aarch64-softmmu/migration/ram.o CC x86_64-softmmu/tcg/tcg.o CC aarch64-softmmu/accel/accel.o CC aarch64-softmmu/accel/stubs/kvm-stub.o CC aarch64-softmmu/accel/tcg/tcg-all.o CC aarch64-softmmu/accel/tcg/cputlb.o CC aarch64-softmmu/accel/tcg/cpu-exec.o CC aarch64-softmmu/accel/tcg/cpu-exec-common.o CC aarch64-softmmu/accel/tcg/translate-all.o CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o CC x86_64-softmmu/tcg/tcg-op.o CC aarch64-softmmu/hw/block/virtio-blk.o CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o CC aarch64-softmmu/hw/char/exynos4210_uart.o CC aarch64-softmmu/hw/char/omap_uart.o CC aarch64-softmmu/hw/char/digic-uart.o CC aarch64-softmmu/hw/char/stm32f2xx_usart.o CC aarch64-softmmu/hw/char/bcm2835_aux.o CC x86_64-softmmu/tcg/optimize.o CC x86_64-softmmu/tcg/tcg-common.o CC x86_64-softmmu/tcg/tcg-runtime.o CC x86_64-softmmu/fpu/softfloat.o CC x86_64-softmmu/disas.o CC aarch64-softmmu/hw/char/virtio-serial-bus.o CC aarch64-softmmu/hw/core/generic-loader.o GEN x86_64-softmmu/gdbstub-xml.c CC x86_64-softmmu/hax-stub.o CC x86_64-softmmu/arch_init.o CC x86_64-softmmu/cpus.o CC x86_64-softmmu/monitor.o CC aarch64-softmmu/hw/core/null-machine.o CC x86_64-softmmu/gdbstub.o CC aarch64-softmmu/hw/cpu/arm11mpcore.o CC x86_64-softmmu/balloon.o CC x86_64-softmmu/ioport.o CC aarch64-softmmu/hw/cpu/realview_mpcore.o CC x86_64-softmmu/numa.o CC x86_64-softmmu/qtest.o CC x86_64-softmmu/memory.o CC x86_64-softmmu/memory_mapping.o CC x86_64-softmmu/dump.o CC x86_64-softmmu/migration/ram.o CC x86_64-softmmu/accel/accel.o CC x86_64-softmmu/accel/kvm/kvm-all.o CC x86_64-softmmu/accel/tcg/tcg-all.o CC aarch64-softmmu/hw/cpu/a9mpcore.o CC x86_64-softmmu/accel/tcg/cputlb.o CC x86_64-softmmu/accel/tcg/cpu-exec.o CC x86_64-softmmu/accel/tcg/cpu-exec-common.o CC aarch64-softmmu/hw/cpu/a15mpcore.o CC x86_64-softmmu/accel/tcg/translate-all.o CC x86_64-softmmu/hw/block/virtio-blk.o CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o CC aarch64-softmmu/hw/display/omap_dss.o CC x86_64-softmmu/hw/char/virtio-serial-bus.o CC x86_64-softmmu/hw/core/generic-loader.o CC aarch64-softmmu/hw/display/omap_lcdc.o CC x86_64-softmmu/hw/core/null-machine.o CC aarch64-softmmu/hw/display/pxa2xx_lcd.o CC x86_64-softmmu/hw/display/vga.o CC aarch64-softmmu/hw/display/bcm2835_fb.o CC aarch64-softmmu/hw/display/vga.o CC x86_64-softmmu/hw/display/virtio-gpu.o CC x86_64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/display/virtio-gpu-pci.o CC x86_64-softmmu/hw/display/virtio-vga.o CC aarch64-softmmu/hw/display/virtio-gpu.o CC aarch64-softmmu/hw/display/virtio-gpu-3d.o CC x86_64-softmmu/hw/intc/apic.o CC x86_64-softmmu/hw/intc/apic_common.o CC x86_64-softmmu/hw/intc/ioapic.o CC x86_64-softmmu/hw/isa/lpc_ich9.o CC x86_64-softmmu/hw/misc/vmport.o CC x86_64-softmmu/hw/misc/ivshmem.o CC x86_64-softmmu/hw/misc/pvpanic.o CC aarch64-softmmu/hw/display/virtio-gpu-pci.o CC x86_64-softmmu/hw/misc/hyperv_testdev.o CC aarch64-softmmu/hw/display/dpcd.o CC x86_64-softmmu/hw/misc/mmio_interface.o CC aarch64-softmmu/hw/display/xlnx_dp.o CC x86_64-softmmu/hw/net/virtio-net.o CC aarch64-softmmu/hw/dma/xlnx_dpdma.o CC x86_64-softmmu/hw/net/vhost_net.o CC aarch64-softmmu/hw/dma/omap_dma.o CC aarch64-softmmu/hw/dma/soc_dma.o CC x86_64-softmmu/hw/scsi/virtio-scsi.o CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC aarch64-softmmu/hw/dma/pxa2xx_dma.o CC aarch64-softmmu/hw/dma/bcm2835_dma.o CC aarch64-softmmu/hw/gpio/omap_gpio.o CC aarch64-softmmu/hw/gpio/imx_gpio.o CC aarch64-softmmu/hw/gpio/bcm2835_gpio.o CC x86_64-softmmu/hw/scsi/vhost-scsi-common.o CC aarch64-softmmu/hw/i2c/omap_i2c.o CC aarch64-softmmu/hw/input/pxa2xx_keypad.o CC aarch64-softmmu/hw/input/tsc210x.o CC aarch64-softmmu/hw/intc/armv7m_nvic.o CC x86_64-softmmu/hw/scsi/vhost-scsi.o CC aarch64-softmmu/hw/intc/exynos4210_gic.o CC x86_64-softmmu/hw/scsi/vhost-user-scsi.o CC aarch64-softmmu/hw/intc/exynos4210_combiner.o CC x86_64-softmmu/hw/timer/mc146818rtc.o CC aarch64-softmmu/hw/intc/omap_intc.o CC aarch64-softmmu/hw/intc/bcm2835_ic.o CC aarch64-softmmu/hw/intc/bcm2836_control.o CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o CC x86_64-softmmu/hw/vfio/common.o CC x86_64-softmmu/hw/vfio/pci.o CC aarch64-softmmu/hw/intc/aspeed_vic.o CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o CC aarch64-softmmu/hw/misc/ivshmem.o CC aarch64-softmmu/hw/misc/arm_sysctl.o CC x86_64-softmmu/hw/vfio/pci-quirks.o CC aarch64-softmmu/hw/misc/cbus.o CC aarch64-softmmu/hw/misc/exynos4210_pmu.o CC x86_64-softmmu/hw/vfio/platform.o CC aarch64-softmmu/hw/misc/exynos4210_clk.o CC x86_64-softmmu/hw/vfio/spapr.o CC x86_64-softmmu/hw/virtio/virtio.o CC aarch64-softmmu/hw/misc/imx_ccm.o CC x86_64-softmmu/hw/virtio/virtio-balloon.o CC x86_64-softmmu/hw/virtio/vhost.o CC x86_64-softmmu/hw/virtio/vhost-backend.o CC x86_64-softmmu/hw/virtio/vhost-user.o CC x86_64-softmmu/hw/virtio/vhost-vsock.o CC aarch64-softmmu/hw/misc/imx31_ccm.o CC x86_64-softmmu/hw/virtio/virtio-crypto.o CC aarch64-softmmu/hw/misc/imx25_ccm.o CC aarch64-softmmu/hw/misc/imx6_ccm.o CC aarch64-softmmu/hw/misc/imx6_src.o CC aarch64-softmmu/hw/misc/mst_fpga.o CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o CC aarch64-softmmu/hw/misc/omap_clk.o CC aarch64-softmmu/hw/misc/omap_gpmc.o CC aarch64-softmmu/hw/misc/omap_l4.o CC aarch64-softmmu/hw/misc/omap_sdrc.o CC x86_64-softmmu/hw/i386/multiboot.o CC aarch64-softmmu/hw/misc/omap_tap.o CC aarch64-softmmu/hw/misc/bcm2835_mbox.o CC x86_64-softmmu/hw/i386/pc.o CC x86_64-softmmu/hw/i386/pc_piix.o CC aarch64-softmmu/hw/misc/bcm2835_property.o CC x86_64-softmmu/hw/i386/pc_q35.o CC x86_64-softmmu/hw/i386/pc_sysfw.o CC aarch64-softmmu/hw/misc/bcm2835_rng.o CC aarch64-softmmu/hw/misc/zynq_slcr.o CC aarch64-softmmu/hw/misc/zynq-xadc.o CC x86_64-softmmu/hw/i386/x86-iommu.o CC x86_64-softmmu/hw/i386/intel_iommu.o CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o CC x86_64-softmmu/hw/i386/amd_iommu.o CC x86_64-softmmu/hw/i386/kvmvapic.o CC aarch64-softmmu/hw/misc/auxbus.o CC x86_64-softmmu/hw/i386/acpi-build.o CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o CC x86_64-softmmu/hw/i386/kvm/clock.o CC aarch64-softmmu/hw/misc/aspeed_scu.o CC x86_64-softmmu/hw/i386/kvm/apic.o CC aarch64-softmmu/hw/misc/aspeed_sdmc.o CC aarch64-softmmu/hw/misc/mmio_interface.o CC aarch64-softmmu/hw/net/virtio-net.o CC aarch64-softmmu/hw/net/vhost_net.o CC x86_64-softmmu/hw/i386/kvm/i8259.o CC x86_64-softmmu/hw/i386/kvm/ioapic.o /tmp/qemu-test/src/hw/i386/pc_piix.c: In function ‘igd_passthrough_isa_bridge_create’: /tmp/qemu-test/src/hw/i386/pc_piix.c:1065: warning: ‘pch_rev_id’ may be used uninitialized in this function CC x86_64-softmmu/hw/i386/kvm/i8254.o CC x86_64-softmmu/hw/i386/kvm/pci-assign.o CC aarch64-softmmu/hw/pcmcia/pxa2xx.o CC aarch64-softmmu/hw/scsi/virtio-scsi.o CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o CC aarch64-softmmu/hw/scsi/vhost-scsi-common.o CC aarch64-softmmu/hw/scsi/vhost-scsi.o CC aarch64-softmmu/hw/scsi/vhost-user-scsi.o CC x86_64-softmmu/target/i386/helper.o CC x86_64-softmmu/target/i386/cpu.o CC x86_64-softmmu/target/i386/gdbstub.o /tmp/qemu-test/src/hw/i386/acpi-build.c: In function ‘build_append_pci_bus_devices’: /tmp/qemu-test/src/hw/i386/acpi-build.c:525: warning: ‘notify_method’ may be used uninitialized in this function CC aarch64-softmmu/hw/sd/omap_mmc.o CC x86_64-softmmu/target/i386/xsave_helper.o CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o CC x86_64-softmmu/target/i386/translate.o CC x86_64-softmmu/target/i386/bpt_helper.o CC aarch64-softmmu/hw/sd/bcm2835_sdhost.o CC x86_64-softmmu/target/i386/cc_helper.o CC aarch64-softmmu/hw/ssi/omap_spi.o CC aarch64-softmmu/hw/ssi/imx_spi.o CC x86_64-softmmu/target/i386/excp_helper.o CC aarch64-softmmu/hw/timer/exynos4210_mct.o CC aarch64-softmmu/hw/timer/exynos4210_pwm.o CC x86_64-softmmu/target/i386/fpu_helper.o CC aarch64-softmmu/hw/timer/exynos4210_rtc.o CC aarch64-softmmu/hw/timer/omap_gptimer.o CC aarch64-softmmu/hw/timer/omap_synctimer.o CC x86_64-softmmu/target/i386/int_helper.o CC x86_64-softmmu/target/i386/mem_helper.o CC aarch64-softmmu/hw/timer/pxa2xx_timer.o CC aarch64-softmmu/hw/timer/digic-timer.o CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o CC x86_64-softmmu/target/i386/misc_helper.o CC aarch64-softmmu/hw/usb/tusb6010.o CC x86_64-softmmu/target/i386/mpx_helper.o CC x86_64-softmmu/target/i386/seg_helper.o CC x86_64-softmmu/target/i386/smm_helper.o CC aarch64-softmmu/hw/vfio/common.o CC x86_64-softmmu/target/i386/svm_helper.o CC x86_64-softmmu/target/i386/machine.o CC x86_64-softmmu/target/i386/arch_memory_mapping.o CC x86_64-softmmu/target/i386/arch_dump.o CC x86_64-softmmu/target/i386/monitor.o CC aarch64-softmmu/hw/vfio/pci.o CC x86_64-softmmu/target/i386/kvm.o CC x86_64-softmmu/target/i386/hyperv.o CC aarch64-softmmu/hw/vfio/pci-quirks.o GEN trace/generated-helpers.c CC aarch64-softmmu/hw/vfio/platform.o CC aarch64-softmmu/hw/vfio/calxeda-xgmac.o CC aarch64-softmmu/hw/vfio/amd-xgbe.o CC x86_64-softmmu/trace/control-target.o CC aarch64-softmmu/hw/vfio/spapr.o CC aarch64-softmmu/hw/virtio/virtio.o CC aarch64-softmmu/hw/virtio/virtio-balloon.o CC aarch64-softmmu/hw/virtio/vhost.o CC aarch64-softmmu/hw/virtio/vhost-backend.o CC x86_64-softmmu/gdbstub-xml.o CC aarch64-softmmu/hw/virtio/vhost-user.o CC aarch64-softmmu/hw/virtio/vhost-vsock.o CC aarch64-softmmu/hw/virtio/virtio-crypto.o CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o CC aarch64-softmmu/hw/arm/boot.o CC x86_64-softmmu/trace/generated-helpers.o CC aarch64-softmmu/hw/arm/collie.o CC aarch64-softmmu/hw/arm/exynos4_boards.o CC aarch64-softmmu/hw/arm/gumstix.o CC aarch64-softmmu/hw/arm/highbank.o CC aarch64-softmmu/hw/arm/digic_boards.o CC aarch64-softmmu/hw/arm/integratorcp.o CC aarch64-softmmu/hw/arm/mainstone.o LINK x86_64-softmmu/qemu-system-x86_64 CC aarch64-softmmu/hw/arm/musicpal.o CC aarch64-softmmu/hw/arm/nseries.o CC aarch64-softmmu/hw/arm/omap_sx1.o CC aarch64-softmmu/hw/arm/palm.o CC aarch64-softmmu/hw/arm/realview.o CC aarch64-softmmu/hw/arm/spitz.o CC aarch64-softmmu/hw/arm/stellaris.o CC aarch64-softmmu/hw/arm/tosa.o CC aarch64-softmmu/hw/arm/versatilepb.o CC aarch64-softmmu/hw/arm/vexpress.o CC aarch64-softmmu/hw/arm/virt.o CC aarch64-softmmu/hw/arm/xilinx_zynq.o CC aarch64-softmmu/hw/arm/z2.o CC aarch64-softmmu/hw/arm/netduino2.o CC aarch64-softmmu/hw/arm/virt-acpi-build.o CC aarch64-softmmu/hw/arm/sysbus-fdt.o CC aarch64-softmmu/hw/arm/armv7m.o CC aarch64-softmmu/hw/arm/exynos4210.o CC aarch64-softmmu/hw/arm/pxa2xx.o CC aarch64-softmmu/hw/arm/pxa2xx_gpio.o CC aarch64-softmmu/hw/arm/pxa2xx_pic.o CC aarch64-softmmu/hw/arm/digic.o CC aarch64-softmmu/hw/arm/omap1.o CC aarch64-softmmu/hw/arm/omap2.o CC aarch64-softmmu/hw/arm/strongarm.o CC aarch64-softmmu/hw/arm/allwinner-a10.o CC aarch64-softmmu/hw/arm/cubieboard.o CC aarch64-softmmu/hw/arm/bcm2835_peripherals.o CC aarch64-softmmu/hw/arm/bcm2836.o CC aarch64-softmmu/hw/arm/raspi.o CC aarch64-softmmu/hw/arm/stm32f205_soc.o CC aarch64-softmmu/hw/arm/xlnx-zynqmp.o CC aarch64-softmmu/hw/arm/xlnx-ep108.o CC aarch64-softmmu/hw/arm/fsl-imx25.o CC aarch64-softmmu/hw/arm/imx25_pdk.o CC aarch64-softmmu/hw/arm/fsl-imx31.o CC aarch64-softmmu/hw/arm/kzm.o CC aarch64-softmmu/hw/arm/fsl-imx6.o CC aarch64-softmmu/hw/arm/sabrelite.o CC aarch64-softmmu/hw/arm/aspeed_soc.o CC aarch64-softmmu/hw/arm/aspeed.o CC aarch64-softmmu/target/arm/arm-semi.o CC aarch64-softmmu/target/arm/machine.o CC aarch64-softmmu/target/arm/psci.o CC aarch64-softmmu/target/arm/arch_dump.o CC aarch64-softmmu/target/arm/monitor.o CC aarch64-softmmu/target/arm/kvm-stub.o CC aarch64-softmmu/target/arm/translate.o CC aarch64-softmmu/target/arm/op_helper.o CC aarch64-softmmu/target/arm/helper.o CC aarch64-softmmu/target/arm/cpu.o CC aarch64-softmmu/target/arm/neon_helper.o CC aarch64-softmmu/target/arm/iwmmxt_helper.o CC aarch64-softmmu/target/arm/gdbstub.o CC aarch64-softmmu/target/arm/translate-a64.o CC aarch64-softmmu/target/arm/cpu64.o CC aarch64-softmmu/target/arm/helper-a64.o CC aarch64-softmmu/target/arm/gdbstub64.o CC aarch64-softmmu/target/arm/crypto_helper.o /tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘handle_shri_with_rndacc’: /tmp/qemu-test/src/target/arm/translate-a64.c:6367: warning: ‘tcg_src_hi’ may be used uninitialized in this function /tmp/qemu-test/src/target/arm/translate-a64.c: In function ‘disas_simd_scalar_two_reg_misc’: /tmp/qemu-test/src/target/arm/translate-a64.c:8094: warning: ‘rmode’ may be used uninitialized in this function CC aarch64-softmmu/target/arm/arm-powerctl.o CC aarch64-softmmu/trace/control-target.o GEN trace/generated-helpers.c CC aarch64-softmmu/gdbstub-xml.o CC aarch64-softmmu/trace/generated-helpers.o LINK aarch64-softmmu/qemu-system-aarch64 TEST tests/qapi-schema/alternate-base.out TEST tests/qapi-schema/alternate-any.out TEST tests/qapi-schema/alternate-array.out TEST tests/qapi-schema/alternate-conflict-dict.out TEST tests/qapi-schema/alternate-clash.out TEST tests/qapi-schema/alternate-conflict-enum-int.out TEST tests/qapi-schema/alternate-conflict-enum-bool.out TEST tests/qapi-schema/alternate-conflict-string.out TEST tests/qapi-schema/alternate-empty.out TEST tests/qapi-schema/alternate-unknown.out TEST tests/qapi-schema/args-alternate.out TEST tests/qapi-schema/args-any.out TEST tests/qapi-schema/args-array-empty.out TEST tests/qapi-schema/alternate-nested.out TEST tests/qapi-schema/args-array-unknown.out TEST tests/qapi-schema/args-bad-boxed.out TEST tests/qapi-schema/args-boxed-anon.out TEST tests/qapi-schema/args-boxed-empty.out TEST tests/qapi-schema/args-boxed-string.out TEST tests/qapi-schema/args-int.out TEST tests/qapi-schema/args-invalid.out TEST tests/qapi-schema/args-member-case.out TEST tests/qapi-schema/args-member-array-bad.out TEST tests/qapi-schema/args-member-unknown.out TEST tests/qapi-schema/args-name-clash.out TEST tests/qapi-schema/args-union.out TEST tests/qapi-schema/args-unknown.out TEST tests/qapi-schema/bad-data.out TEST tests/qapi-schema/bad-base.out TEST tests/qapi-schema/bad-ident.out TEST tests/qapi-schema/bad-type-bool.out TEST tests/qapi-schema/bad-type-dict.out TEST tests/qapi-schema/bad-type-int.out TEST tests/qapi-schema/base-cycle-indirect.out TEST tests/qapi-schema/command-int.out TEST tests/qapi-schema/base-cycle-direct.out TEST tests/qapi-schema/comments.out TEST tests/qapi-schema/doc-bad-alternate-member.out TEST tests/qapi-schema/doc-bad-symbol.out TEST tests/qapi-schema/doc-bad-command-arg.out TEST tests/qapi-schema/doc-bad-union-member.out TEST tests/qapi-schema/doc-before-include.out TEST tests/qapi-schema/doc-before-pragma.out TEST tests/qapi-schema/doc-duplicated-arg.out TEST tests/qapi-schema/doc-duplicated-return.out TEST tests/qapi-schema/doc-duplicated-since.out TEST tests/qapi-schema/doc-empty-arg.out TEST tests/qapi-schema/doc-empty-section.out TEST tests/qapi-schema/doc-empty-symbol.out TEST tests/qapi-schema/doc-good.out TEST tests/qapi-schema/doc-interleaved-section.out TEST tests/qapi-schema/doc-invalid-end.out TEST tests/qapi-schema/doc-invalid-end2.out TEST tests/qapi-schema/doc-invalid-return.out TEST tests/qapi-schema/doc-invalid-section.out TEST tests/qapi-schema/doc-invalid-start.out TEST tests/qapi-schema/doc-missing.out TEST tests/qapi-schema/doc-missing-colon.out TEST tests/qapi-schema/doc-missing-expr.out TEST tests/qapi-schema/doc-missing-space.out TEST tests/qapi-schema/doc-no-symbol.out TEST tests/qapi-schema/double-data.out TEST tests/qapi-schema/double-type.out TEST tests/qapi-schema/duplicate-key.out TEST tests/qapi-schema/empty.out TEST tests/qapi-schema/enum-bad-name.out TEST tests/qapi-schema/enum-bad-prefix.out TEST tests/qapi-schema/enum-clash-member.out TEST tests/qapi-schema/enum-dict-member.out TEST tests/qapi-schema/enum-int-member.out TEST tests/qapi-schema/enum-missing-data.out TEST tests/qapi-schema/enum-member-case.out TEST tests/qapi-schema/enum-wrong-data.out TEST tests/qapi-schema/escape-outside-string.out TEST tests/qapi-schema/escape-too-big.out TEST tests/qapi-schema/escape-too-short.out TEST tests/qapi-schema/event-boxed-empty.out TEST tests/qapi-schema/event-case.out TEST tests/qapi-schema/event-nest-struct.out TEST tests/qapi-schema/flat-union-array-branch.out TEST tests/qapi-schema/flat-union-bad-base.out TEST tests/qapi-schema/flat-union-bad-discriminator.out TEST tests/qapi-schema/flat-union-base-any.out TEST tests/qapi-schema/flat-union-base-union.out TEST tests/qapi-schema/flat-union-clash-member.out TEST tests/qapi-schema/flat-union-empty.out TEST tests/qapi-schema/flat-union-incomplete-branch.out TEST tests/qapi-schema/flat-union-inline.out TEST tests/qapi-schema/flat-union-invalid-branch-key.out TEST tests/qapi-schema/flat-union-int-branch.out TEST tests/qapi-schema/flat-union-invalid-discriminator.out TEST tests/qapi-schema/flat-union-optional-discriminator.out TEST tests/qapi-schema/flat-union-no-base.out TEST tests/qapi-schema/flat-union-string-discriminator.out TEST tests/qapi-schema/funny-char.out TEST tests/qapi-schema/ident-with-escape.out TEST tests/qapi-schema/include-before-err.out TEST tests/qapi-schema/include-cycle.out TEST tests/qapi-schema/include-extra-junk.out TEST tests/qapi-schema/include-format-err.out TEST tests/qapi-schema/include-nested-err.out TEST tests/qapi-schema/include-no-file.out TEST tests/qapi-schema/include-non-file.out TEST tests/qapi-schema/include-relpath.out TEST tests/qapi-schema/include-repetition.out TEST tests/qapi-schema/include-self-cycle.out TEST tests/qapi-schema/include-simple.out TEST tests/qapi-schema/indented-expr.out TEST tests/qapi-schema/leading-comma-list.out TEST tests/qapi-schema/leading-comma-object.out TEST tests/qapi-schema/missing-colon.out TEST tests/qapi-schema/missing-comma-list.out TEST tests/qapi-schema/missing-comma-object.out TEST tests/qapi-schema/missing-type.out TEST tests/qapi-schema/nested-struct-data.out TEST tests/qapi-schema/non-objects.out TEST tests/qapi-schema/pragma-doc-required-crap.out TEST tests/qapi-schema/pragma-extra-junk.out TEST tests/qapi-schema/pragma-name-case-whitelist-crap.out TEST tests/qapi-schema/pragma-non-dict.out TEST tests/qapi-schema/pragma-returns-whitelist-crap.out TEST tests/qapi-schema/qapi-schema-test.out TEST tests/qapi-schema/quoted-structural-chars.out TEST tests/qapi-schema/redefined-builtin.out TEST tests/qapi-schema/redefined-command.out TEST tests/qapi-schema/redefined-event.out TEST tests/qapi-schema/redefined-type.out TEST tests/qapi-schema/reserved-enum-q.out TEST tests/qapi-schema/reserved-command-q.out TEST tests/qapi-schema/reserved-member-has.out TEST tests/qapi-schema/reserved-member-q.out TEST tests/qapi-schema/reserved-member-u.out TEST tests/qapi-schema/reserved-member-underscore.out TEST tests/qapi-schema/reserved-type-kind.out TEST tests/qapi-schema/reserved-type-list.out TEST tests/qapi-schema/returns-alternate.out TEST tests/qapi-schema/returns-array-bad.out TEST tests/qapi-schema/returns-dict.out TEST tests/qapi-schema/returns-unknown.out TEST tests/qapi-schema/returns-whitelist.out TEST tests/qapi-schema/struct-base-clash-deep.out TEST tests/qapi-schema/struct-base-clash.out TEST tests/qapi-schema/struct-data-invalid.out TEST tests/qapi-schema/struct-member-invalid.out TEST tests/qapi-schema/trailing-comma-list.out TEST tests/qapi-schema/trailing-comma-object.out TEST tests/qapi-schema/type-bypass-bad-gen.out TEST tests/qapi-schema/unclosed-list.out TEST tests/qapi-schema/unclosed-object.out TEST tests/qapi-schema/unclosed-string.out TEST tests/qapi-schema/unicode-str.out TEST tests/qapi-schema/union-base-empty.out TEST tests/qapi-schema/union-base-no-discriminator.out TEST tests/qapi-schema/union-branch-case.out TEST tests/qapi-schema/union-clash-branches.out TEST tests/qapi-schema/union-empty.out TEST tests/qapi-schema/union-invalid-base.out TEST tests/qapi-schema/union-optional-branch.out TEST tests/qapi-schema/union-unknown.out TEST tests/qapi-schema/unknown-escape.out TEST tests/qapi-schema/unknown-expr-key.out GEN tests/qapi-schema/doc-good.test.texi CC tests/check-qdict.o CC tests/test-char.o CC tests/check-qnum.o CC tests/check-qstring.o CC tests/check-qlist.o CC tests/check-qnull.o CC tests/check-qjson.o CC tests/test-qobject-output-visitor.o GEN tests/test-qapi-visit.c GEN tests/test-qapi-types.c GEN tests/test-qapi-event.c GEN tests/test-qmp-introspect.c CC tests/test-clone-visitor.o CC tests/test-qobject-input-visitor.o CC tests/test-qmp-commands.o GEN tests/test-qmp-marshal.c CC tests/test-string-input-visitor.o CC tests/test-string-output-visitor.o CC tests/test-qmp-event.o CC tests/test-opts-visitor.o CC tests/test-coroutine.o CC tests/iothread.o CC tests/test-visitor-serialization.o CC tests/test-iov.o CC tests/test-aio.o CC tests/test-aio-multithread.o CC tests/test-throttle.o CC tests/test-thread-pool.o CC tests/test-hbitmap.o CC tests/test-blockjob.o CC tests/test-blockjob-txn.o CC tests/test-xbzrle.o CC tests/test-x86-cpuid.o CC tests/test-vmstate.o CC tests/test-cutils.o CC tests/test-shift128.o CC tests/test-int128.o CC tests/test-mul64.o CC tests/test-rcu-list.o CC tests/rcutorture.o CC tests/test-qdist.o /tmp/qemu-test/src/tests/test-int128.c:180: warning: ‘__noclone__’ attribute directive ignored CC tests/test-qht.o CC tests/test-qht-par.o CC tests/test-bitops.o CC tests/qht-bench.o CC tests/test-bitcnt.o CC tests/check-qom-interface.o CC tests/check-qom-proplist.o CC tests/test-qemu-opts.o CC tests/test-keyval.o CC tests/test-write-threshold.o CC tests/test-crypto-hash.o CC tests/test-crypto-hmac.o CC tests/test-crypto-cipher.o CC tests/test-crypto-secret.o CC tests/test-qga.o CC tests/libqtest.o CC tests/test-timed-average.o CC tests/test-io-task.o CC tests/test-io-channel-socket.o CC tests/io-channel-helpers.o CC tests/test-io-channel-file.o CC tests/test-io-channel-command.o CC tests/test-io-channel-buffer.o CC tests/test-base64.o CC tests/test-crypto-ivgen.o CC tests/test-crypto-afsplit.o CC tests/test-crypto-xts.o CC tests/test-crypto-block.o CC tests/test-logging.o CC tests/test-replication.o CC tests/test-bufferiszero.o CC tests/test-uuid.o CC tests/ptimer-test.o CC tests/ptimer-test-stubs.o CC tests/test-qapi-util.o CC tests/vhost-user-test.o CC tests/libqos/pci.o CC tests/libqos/fw_cfg.o CC tests/libqos/malloc.o CC tests/libqos/i2c.o CC tests/libqos/libqos.o CC tests/libqos/malloc-spapr.o CC tests/libqos/libqos-spapr.o CC tests/libqos/rtas.o CC tests/libqos/pci-spapr.o CC tests/libqos/pci-pc.o CC tests/libqos/libqos-pc.o CC tests/libqos/malloc-pc.o CC tests/libqos/ahci.o CC tests/libqos/virtio.o CC tests/libqos/malloc-generic.o CC tests/libqos/virtio-mmio.o CC tests/endianness-test.o CC tests/libqos/virtio-pci.o CC tests/fdc-test.o CC tests/ide-test.o CC tests/hd-geo-test.o CC tests/ahci-test.o CC tests/boot-order-test.o CC tests/bios-tables-test.o CC tests/boot-sector.o CC tests/acpi-utils.o CC tests/boot-serial-test.o CC tests/pxe-test.o CC tests/rtc-test.o CC tests/ipmi-bt-test.o CC tests/i440fx-test.o CC tests/ipmi-kcs-test.o CC tests/fw_cfg-test.o CC tests/drive_del-test.o CC tests/wdt_ib700-test.o CC tests/tco-test.o CC tests/e1000-test.o CC tests/e1000e-test.o CC tests/rtl8139-test.o CC tests/pcnet-test.o CC tests/eepro100-test.o CC tests/ne2000-test.o CC tests/nvme-test.o CC tests/ac97-test.o CC tests/es1370-test.o CC tests/virtio-net-test.o CC tests/virtio-balloon-test.o CC tests/virtio-blk-test.o CC tests/virtio-rng-test.o CC tests/virtio-scsi-test.o CC tests/virtio-serial-test.o CC tests/tpci200-test.o CC tests/virtio-console-test.o CC tests/ipoctal232-test.o CC tests/display-vga-test.o CC tests/intel-hda-test.o CC tests/ivshmem-test.o CC tests/megasas-test.o CC tests/vmxnet3-test.o CC tests/pvpanic-test.o CC tests/i82801b11-test.o CC tests/ioh3420-test.o CC tests/usb-hcd-ohci-test.o CC tests/libqos/usb.o CC tests/usb-hcd-uhci-test.o CC tests/usb-hcd-ehci-test.o CC tests/usb-hcd-xhci-test.o CC tests/pc-cpu-test.o CC tests/vmgenid-test.o CC tests/q35-test.o CC tests/test-netfilter.o CC tests/test-filter-mirror.o CC tests/test-filter-redirector.o CC tests/postcopy-test.o CC tests/test-x86-cpuid-compat.o CC tests/numa-test.o CC tests/qmp-test.o CC tests/device-introspect-test.o CC tests/qom-test.o CC tests/test-hmp.o CC tests/test-sockets-proto.o LINK tests/check-qdict LINK tests/test-char LINK tests/check-qnum LINK tests/check-qstring LINK tests/check-qlist LINK tests/check-qnull LINK tests/check-qjson CC tests/test-qapi-visit.o CC tests/test-qapi-types.o CC tests/test-qapi-event.o CC tests/test-qmp-introspect.o CC tests/test-qmp-marshal.o LINK tests/test-coroutine LINK tests/test-visitor-serialization LINK tests/test-iov LINK tests/test-aio LINK tests/test-aio-multithread LINK tests/test-throttle LINK tests/test-thread-pool LINK tests/test-hbitmap LINK tests/test-blockjob LINK tests/test-blockjob-txn LINK tests/test-x86-cpuid LINK tests/test-xbzrle LINK tests/test-vmstate LINK tests/test-cutils LINK tests/test-shift128 LINK tests/test-mul64 LINK tests/test-int128 LINK tests/rcutorture LINK tests/test-rcu-list LINK tests/test-qdist LINK tests/test-qht LINK tests/qht-bench LINK tests/test-bitops LINK tests/test-bitcnt LINK tests/check-qom-interface LINK tests/check-qom-proplist LINK tests/test-qemu-opts LINK tests/test-keyval LINK tests/test-write-threshold LINK tests/test-crypto-hash LINK tests/test-crypto-hmac LINK tests/test-crypto-cipher LINK tests/test-crypto-secret LINK tests/test-qga LINK tests/test-timed-average LINK tests/test-io-task LINK tests/test-io-channel-socket LINK tests/test-io-channel-file LINK tests/test-io-channel-command LINK tests/test-io-channel-buffer LINK tests/test-base64 LINK tests/test-crypto-ivgen LINK tests/test-crypto-afsplit LINK tests/test-crypto-xts LINK tests/test-crypto-block LINK tests/test-logging LINK tests/test-replication LINK tests/test-bufferiszero LINK tests/test-uuid LINK tests/ptimer-test LINK tests/test-qapi-util LINK tests/vhost-user-test LINK tests/endianness-test LINK tests/fdc-test LINK tests/ide-test LINK tests/ahci-test LINK tests/hd-geo-test LINK tests/boot-order-test LINK tests/bios-tables-test LINK tests/boot-serial-test LINK tests/pxe-test LINK tests/rtc-test LINK tests/ipmi-kcs-test LINK tests/ipmi-bt-test LINK tests/i440fx-test LINK tests/fw_cfg-test LINK tests/drive_del-test LINK tests/wdt_ib700-test LINK tests/tco-test LINK tests/e1000-test LINK tests/e1000e-test LINK tests/rtl8139-test LINK tests/pcnet-test LINK tests/eepro100-test LINK tests/ne2000-test LINK tests/nvme-test LINK tests/ac97-test LINK tests/es1370-test LINK tests/virtio-net-test LINK tests/virtio-balloon-test LINK tests/virtio-blk-test LINK tests/virtio-rng-test LINK tests/virtio-scsi-test LINK tests/virtio-serial-test LINK tests/virtio-console-test LINK tests/tpci200-test LINK tests/ipoctal232-test LINK tests/display-vga-test LINK tests/intel-hda-test LINK tests/ivshmem-test LINK tests/megasas-test LINK tests/vmxnet3-test LINK tests/pvpanic-test LINK tests/i82801b11-test LINK tests/ioh3420-test LINK tests/usb-hcd-ohci-test LINK tests/usb-hcd-uhci-test LINK tests/usb-hcd-ehci-test LINK tests/usb-hcd-xhci-test LINK tests/pc-cpu-test LINK tests/q35-test LINK tests/vmgenid-test LINK tests/test-netfilter LINK tests/test-filter-mirror LINK tests/test-filter-redirector LINK tests/postcopy-test LINK tests/test-x86-cpuid-compat LINK tests/numa-test LINK tests/qmp-test LINK tests/device-introspect-test LINK tests/qom-test LINK tests/test-hmp LINK tests/test-sockets-proto GTESTER tests/check-qdict GTESTER tests/check-qstring GTESTER tests/test-char GTESTER tests/check-qjson GTESTER tests/check-qlist GTESTER tests/check-qnum GTESTER tests/check-qnull LINK tests/test-qobject-output-visitor LINK tests/test-clone-visitor LINK tests/test-qobject-input-visitor LINK tests/test-qmp-commands LINK tests/test-string-input-visitor LINK tests/test-string-output-visitor LINK tests/test-qmp-event LINK tests/test-opts-visitor GTESTER tests/test-coroutine GTESTER tests/test-visitor-serialization GTESTER tests/test-iov GTESTER tests/test-aio-multithread GTESTER tests/test-aio GTESTER tests/test-throttle GTESTER tests/test-hbitmap GTESTER tests/test-thread-pool GTESTER tests/test-blockjob GTESTER tests/test-blockjob-txn GTESTER tests/test-x86-cpuid GTESTER tests/test-xbzrle GTESTER tests/test-vmstate Failed to load simple/primitive:b_1 Failed to load simple/primitive:i64_2 Failed to load simple/primitive:i32_1 Failed to load simple/primitive:i32_1 Failed to load test/with_tmp:a Failed to load test/tmp_child_parent:f Failed to load test/tmp_child:parent Failed to load test/with_tmp:tmp Failed to load test/tmp_child:diff Failed to load test/with_tmp:tmp Failed to load test/tmp_child:diff Failed to load test/with_tmp:tmp GTESTER tests/test-cutils GTESTER tests/test-shift128 GTESTER tests/test-mul64 GTESTER tests/test-int128 GTESTER tests/rcutorture GTESTER tests/test-rcu-list GTESTER tests/test-qdist GTESTER tests/test-qht LINK tests/test-qht-par GTESTER tests/test-bitops GTESTER tests/test-bitcnt GTESTER tests/check-qom-interface GTESTER tests/check-qom-proplist GTESTER tests/test-qemu-opts GTESTER tests/test-keyval GTESTER tests/test-write-threshold GTESTER tests/test-crypto-hash GTESTER tests/test-crypto-hmac GTESTER tests/test-crypto-cipher GTESTER tests/test-crypto-secret GTESTER tests/test-qga GTESTER tests/test-timed-average GTESTER tests/test-io-task GTESTER tests/test-io-channel-socket GTESTER tests/test-io-channel-file GTESTER tests/test-io-channel-command GTESTER tests/test-io-channel-buffer GTESTER tests/test-base64 GTESTER tests/test-crypto-ivgen GTESTER tests/test-crypto-afsplit GTESTER tests/test-crypto-xts GTESTER tests/test-crypto-block GTESTER tests/test-logging GTESTER tests/test-replication GTESTER tests/test-bufferiszero GTESTER tests/test-uuid GTESTER tests/ptimer-test GTESTER tests/test-qapi-util GTESTER check-qtest-x86_64 GTESTER check-qtest-aarch64 GTESTER tests/test-qobject-output-visitor GTESTER tests/test-clone-visitor GTESTER tests/test-qobject-input-visitor GTESTER tests/test-qmp-commands GTESTER tests/test-string-input-visitor GTESTER tests/test-string-output-visitor GTESTER tests/test-qmp-event GTESTER tests/test-opts-visitor GTESTER tests/test-qht-par ** ERROR:/tmp/qemu-test/src/tests/test-sockets-proto.c:849:test_listen: assertion failed: (data->ipv4 == 0) GTester: last random seed: R02Sfe026bc1af8a302144714e796f3de4f7 make: *** [check-qtest-aarch64] Error 1 make: *** Waiting for unfinished jobs.... Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory Back to tcg accelerator. tests/docker/Makefile.include:122: recipe for target 'docker-run' failed make[1]: *** [docker-run] Error 2 make[1]: Leaving directory '/var/tmp/patchew-tester-tmp-qgefdzlr/src' tests/docker/Makefile.include:153: recipe for target 'docker-run-test-quick@centos6' failed make: *** [docker-run-test-quick@centos6] Error 2 === OUTPUT END === Test command exited with code: 2 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-devel@freelists.org ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 2017-07-11 14:21 ` [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 no-reply @ 2017-07-12 9:13 ` Daniel P. Berrange 2017-07-12 11:30 ` Daniel P. Berrange 0 siblings, 1 reply; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-12 9:13 UTC (permalink / raw) To: qemu-devel; +Cc: famz, peter.maydell On Tue, Jul 11, 2017 at 07:21:32AM -0700, no-reply@patchew.org wrote: > Hi, > > This series failed automatic build test. Please find the testing commands and > their output below. If you have docker installed, you can probably reproduce it > locally. > > Message-id: 20170711124411.10499-1-berrange@redhat.com > Type: series > Subject: [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 > [snip] > GTESTER check-qtest-x86_64 > GTESTER check-qtest-aarch64 [snip] > ** > ERROR:/tmp/qemu-test/src/tests/test-sockets-proto.c:849:test_listen: assertion failed: (data->ipv4 == 0) The problem here is that we're running qtests for x86_64 and aarch64 in parallel, and both are trying to bind to the same IPv4/IPv6 ports and so one fails. Peter please avoid applying this PULL request until I figure out a solution for that race. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 2017-07-12 9:13 ` Daniel P. Berrange @ 2017-07-12 11:30 ` Daniel P. Berrange 0 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-07-12 11:30 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell, famz On Wed, Jul 12, 2017 at 10:13:35AM +0100, Daniel P. Berrange wrote: > On Tue, Jul 11, 2017 at 07:21:32AM -0700, no-reply@patchew.org wrote: > > Hi, > > > > This series failed automatic build test. Please find the testing commands and > > their output below. If you have docker installed, you can probably reproduce it > > locally. > > > > Message-id: 20170711124411.10499-1-berrange@redhat.com > > Type: series > > Subject: [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 > > > > [snip] > > > GTESTER check-qtest-x86_64 > > GTESTER check-qtest-aarch64 > > [snip] > > > ** > > ERROR:/tmp/qemu-test/src/tests/test-sockets-proto.c:849:test_listen: assertion failed: (data->ipv4 == 0) > > The problem here is that we're running qtests for x86_64 and > aarch64 in parallel, and both are trying to bind to the same > IPv4/IPv6 ports and so one fails. A further problem was that the check for network protocol support was not strong enough to skip the test when docker uses --net=none. I'm going to squash the following into the v2 PULL request diff --git a/tests/Makefile.include b/tests/Makefile.include index 77b70f2..1266ed7 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -337,7 +337,7 @@ check-qtest-s390x-y = tests/boot-serial-test$(EXESUF) check-qtest-generic-y += tests/qom-test$(EXESUF) check-qtest-generic-y += tests/test-hmp$(EXESUF) -check-qtest-generic-y += tests/test-sockets-proto$(EXESUF) +check-qtest-x86_64-y += tests/test-sockets-proto$(EXESUF) qapi-schema += alternate-any.json qapi-schema += alternate-array.json diff --git a/tests/test-sockets-proto.c b/tests/test-sockets-proto.c index 1d6beda..89d557f 100644 --- a/tests/test-sockets-proto.c +++ b/tests/test-sockets-proto.c @@ -656,7 +656,7 @@ static QSocketsData test_data[] = { .args = "-vnc :::3100,to=9005,ipv4=off,ipv6=off" }, }; -static int check_bind(const char *hostname) +static int check_bind(const char *hostname, int family) { int fd = -1; struct addrinfo ai, *res = NULL; @@ -665,7 +665,7 @@ static int check_bind(const char *hostname) memset(&ai, 0, sizeof(ai)); ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; - ai.ai_family = AF_UNSPEC; + ai.ai_family = family; ai.ai_socktype = SOCK_STREAM; /* lookup */ @@ -754,10 +754,10 @@ static int check_resolve_order(void) static int check_protocol_support(void) { - if (check_bind("0.0.0.0") < 0) { + if (check_bind("127.0.0.1", AF_INET) < 0) { return -1; } - if (check_bind("::") < 0) { + if (check_bind("::1", AF_INET6) < 0) { return -1; } Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/06/07 @ 2017-06-07 17:54 Daniel P. Berrange 2017-06-07 17:54 ` [Qemu-devel] [PULL v1 3/5] sockets: ensure we don't accept IPv4 clients when IPv4 is disabled Daniel P. Berrange 0 siblings, 1 reply; 10+ messages in thread From: Daniel P. Berrange @ 2017-06-07 17:54 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange The following changes since commit 0db1851becbefe3e50cfc03776fb1f75817376af: Merge remote-tracking branch 'remotes/vivier/tags/m68k-for-2.10-pull-request' into staging (2017-06-07 11:56:00 +0100) are available in the git repository at: git://github.com/berrange/qemu tags/pull-sockets-2017-06-07-1 for you to fetch changes up to 8dd2c27927b93aa352c43e8f0b9437f85d2f5f55: tests: add functional test validating ipv4/ipv6 address flag handling (2017-06-07 17:15:08 +0100) ---------------------------------------------------------------- Merge sockets 2017/06/07 v1 ---------------------------------------------------------------- Daniel P. Berrange (5): sockets: ensure we can bind to both ipv4 & ipv6 separately sockets: don't block IPv4 clients when listening on "::" sockets: ensure we don't accept IPv4 clients when IPv4 is disabled io: preserve ipv4/ipv6 flags when resolving InetSocketAddress tests: add functional test validating ipv4/ipv6 address flag handling io/dns-resolver.c | 6 +- tests/.gitignore | 1 + tests/Makefile.include | 4 + tests/test-sockets-proto.c | 857 +++++++++++++++++++++++++++++++++++++++++++++ util/qemu-sockets.c | 71 +++- 5 files changed, 918 insertions(+), 21 deletions(-) create mode 100644 tests/test-sockets-proto.c -- 2.9.3 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PULL v1 3/5] sockets: ensure we don't accept IPv4 clients when IPv4 is disabled 2017-06-07 17:54 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/06/07 Daniel P. Berrange @ 2017-06-07 17:54 ` Daniel P. Berrange 0 siblings, 0 replies; 10+ messages in thread From: Daniel P. Berrange @ 2017-06-07 17:54 UTC (permalink / raw) To: qemu-devel; +Cc: Peter Maydell, Daniel P. Berrange Currently if you disable listening on IPv4 addresses, via the CLI flag ipv4=off, we still mistakenly accept IPv4 clients via the IPv6 listener socket due to IPV6_V6ONLY flag being unset. We must ensure IPV6_V6ONLY is always set if ipv4=off This fixes the following scenarios -incoming tcp::9000,ipv6=on -incoming tcp:[::]:9000,ipv6=on -chardev socket,id=cdev0,host=,port=9000,server,nowait,ipv4=off -chardev socket,id=cdev0,host=,port=9000,server,nowait,ipv6=on -chardev socket,id=cdev0,host=::,port=9000,server,nowait,ipv4=off -chardev socket,id=cdev0,host=::,port=9000,server,nowait,ipv6=on which all mistakenly accepted IPv4 clients Acked-by: Gerd Hoffmann <kraxel@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- util/qemu-sockets.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index 81bc8de..852773d 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -104,17 +104,16 @@ NetworkAddressFamily inet_netfamily(int family) * f t PF_INET6 * t - PF_INET * t f PF_INET - * t t PF_INET6 + * t t PF_INET6/PF_UNSPEC * * NB, this matrix is only about getting the necessary results * from getaddrinfo(). Some of the cases require further work * after reading results from getaddrinfo in order to fully - * apply the logic the end user wants. eg with the last case - * ipv4=t + ipv6=t + PF_INET6, getaddrinfo alone can only - * guarantee the ipv6=t part of the request - we need more - * checks to provide ipv4=t part of the guarantee. This is - * outside scope of this method and not currently handled by - * callers at all. + * apply the logic the end user wants. + * + * In the first and last cases, we must set IPV6_V6ONLY=0 + * when binding, to allow a single listener to potentially + * accept both IPv4+6 addresses. */ int inet_ai_family_from_address(InetSocketAddress *addr, Error **errp) @@ -124,6 +123,23 @@ int inet_ai_family_from_address(InetSocketAddress *addr, error_setg(errp, "Cannot disable IPv4 and IPv6 at same time"); return PF_UNSPEC; } + if ((addr->has_ipv6 && addr->ipv6) && (addr->has_ipv4 && addr->ipv4)) { + /* + * Some backends can only do a single listener. In that case + * we want empty hostname to resolve to "::" and then use the + * flag IPV6_V6ONLY==0 to get both protocols on 1 socket. This + * doesn't work for addresses other than "", so they're just + * inevitably broken until multiple listeners can be used, + * and thus we honour getaddrinfo automatic protocol detection + * Once all backends do multi-listener, remove the PF_INET6 + * branch entirely. + */ + if (!addr->host || g_str_equal(addr->host, "")) { + return PF_INET6; + } else { + return PF_UNSPEC; + } + } if ((addr->has_ipv6 && addr->ipv6) || (addr->has_ipv4 && !addr->ipv4)) { return PF_INET6; } @@ -213,8 +229,14 @@ static int inet_listen_saddr(InetSocketAddress *saddr, port_max = saddr->has_to ? saddr->to + port_offset : port_min; for (p = port_min; p <= port_max; p++) { #ifdef IPV6_V6ONLY - /* listen on both ipv4 and ipv6 */ - int v6only = 0; + /* + * Deals with first & last cases in matrix in comment + * for inet_ai_family_from_address(). + */ + int v6only = + ((!saddr->has_ipv4 && !saddr->has_ipv6) || + (saddr->has_ipv4 && saddr->ipv4 && + saddr->has_ipv6 && saddr->ipv6)) ? 0 : 1; #endif inet_setport(e, p); #ifdef IPV6_V6ONLY -- 2.9.3 ^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2017-07-12 11:31 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-07-11 12:44 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 1/5] sockets: ensure we can bind to both ipv4 & ipv6 separately Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 2/5] sockets: don't block IPv4 clients when listening on "::" Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 3/5] sockets: ensure we don't accept IPv4 clients when IPv4 is disabled Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 4/5] io: preserve ipv4/ipv6 flags when resolving InetSocketAddress Daniel P. Berrange 2017-07-11 12:44 ` [Qemu-devel] [PULL v1 5/5] tests: add functional test validating ipv4/ipv6 address flag handling Daniel P. Berrange 2017-07-11 14:21 ` [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/07/11 no-reply 2017-07-12 9:13 ` Daniel P. Berrange 2017-07-12 11:30 ` Daniel P. Berrange -- strict thread matches above, loose matches on Subject: below -- 2017-06-07 17:54 [Qemu-devel] [PULL v1 0/5] Merge sockets 2017/06/07 Daniel P. Berrange 2017-06-07 17:54 ` [Qemu-devel] [PULL v1 3/5] sockets: ensure we don't accept IPv4 clients when IPv4 is disabled Daniel P. Berrange
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).