From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60928) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WJMoA-0004C1-Bh for qemu-devel@nongnu.org; Fri, 28 Feb 2014 07:45:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WJMo4-0002Td-DL for qemu-devel@nongnu.org; Fri, 28 Feb 2014 07:44:54 -0500 Received: from mx1.redhat.com ([209.132.183.28]:20979) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WJMo4-0002TY-3m for qemu-devel@nongnu.org; Fri, 28 Feb 2014 07:44:48 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s1SCilNe015445 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 28 Feb 2014 07:44:47 -0500 Message-ID: <531084BB.9010108@redhat.com> Date: Fri, 28 Feb 2014 13:44:43 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1393582579-10366-1-git-send-email-pbonzini@redhat.com> <1393582579-10366-2-git-send-email-pbonzini@redhat.com> <1393590201.3364.44.camel@nilsson.home.kraxel.org> In-Reply-To: <1393590201.3364.44.camel@nilsson.home.kraxel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/2] socket: treat ipv4=on, ipv6=on uniformly List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org, stefanha@redhat.com 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