qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/2] socket: treat ipv4=on, ipv6=on uniformly


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 1/2] socket: treat ipv4=on, ipv6=on uniformly
Date: Fri, 28 Feb 2014 13:44:43 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0

Il 28/02/2014 13:23, Gerd Hoffmann ha scritto:
On Fr, 2014-02-28 at 11:16 +0100, Paolo Bonzini wrote:
In some cases, "ipv4=on,ipv6=on" means "try both kinds of address";
in others, it means "try IPv6 only" just by virtue of how the code
is structured.

@@ -127,10 +127,13 @@ int inet_listen_opts(QemuOpts *opts, int port_offset, 
Error **errp)

-    if (qemu_opt_get_bool(opts, "ipv4", 0))
-        ai.ai_family = PF_INET;
-    if (qemu_opt_get_bool(opts, "ipv6", 0))
-        ai.ai_family = PF_INET6;
+    if (qemu_opt_get_bool(opts, "ipv4", 0) != qemu_opt_get_bool(opts, "ipv6", 
0)) {
+        if (qemu_opt_get_bool(opts, "ipv4", 0)) {
+            ai.ai_family = PF_INET;
+        } else {
+            ai.ai_family = PF_INET6;
+        }
+    }

This is wrong for the listening side.

ipv6 sockets can listen on both ipv4 and ipv6.  qemu configures ipv6
sockets to do that, unconditionally.

So ipv4=yes,ipv6=no works correctly.
ipv4=yes,ipv6=yes works too.
ipv4=no,ipv6=yes doesn't work, but to fix that you have to set the
IPV6_V6ONLY socket option according to the ipv4 option.

Canevat: Listening on both ipv4+ipv6 with a single file handle works for
the wildcard address only.  Specifying -- say --
host=localhost,ipv4=yes,ipv6=yes, then expect qemu to listen on both
127.0.0.1 and ::1 doesn't work.

This can only be fixed by allowing multiple listening filehandles.
Which is a non-trivial change as this also affects the public api (which
will have to report a list of listening addresses instead of a single
address).

Thanks for teaching me!

Do you think patch 2 is okay alone?

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]