From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>,
"Sair, Umair" <Umair_Sair@mentor.com>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
"qemu-discuss@nongnu.org" <qemu-discuss@nongnu.org>
Subject: Re: [Qemu-devel] [Qemu-discuss] TCP options ipv4 and ipv6 have no effect
Date: Sun, 4 Oct 2015 12:47:59 +0200 [thread overview]
Message-ID: <561103DF.5000704@redhat.com> (raw)
In-Reply-To: <CAFEAcA_tYB6j-APrvPyDKAdNTjZay0-b-kC2LTQhRpDJ0pPxag@mail.gmail.com>
On 03/10/2015 00:36, Peter Maydell wrote:
>
> I agree about the (!ipv4 || !ipv6) condition though.
> The three states I listed above ought to correspond
> to "qemu_opt not set", "qemu_opt set to false" and
> "qemu_opt set to true",
The problem is that the underlying QemuOpts-based code treats "qemu_opt not set" and "qemu_opt set to false" the same way:
ipv4 ipv6
Y Y PF_INET6
Y N PF_INET
N Y PF_INET6
N N PF_UNSPEC
We want:
ipv4 ipv6
Y Y PF_INET6
Y N PF_INET
Y - PF_INET (ipv6 = N)
N Y PF_INET6
N N PF_UNSPEC
N - PF_INET6 (ipv6 = Y)
- Y PF_INET6 (ipv4 = N)
- N PF_INET (ipv4 = Y)
- - PF_UNSPEC
I think this patch gets the desired semantics:
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 2add83a..fdcf3fa 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -586,12 +586,15 @@ fail:
static void inet_addr_to_opts(QemuOpts *opts, const InetSocketAddress *addr)
{
- bool ipv4 = addr->ipv4 || !addr->has_ipv4;
- bool ipv6 = addr->ipv6 || !addr->has_ipv6;
+ bool ipv4 = addr->has_ipv4 && addr->ipv4;
+ bool ipv6 = addr->has_ipv6 && addr->ipv6;
- if (!ipv4 || !ipv6) {
+ if (ipv4 || ipv6) {
qemu_opt_set_bool(opts, "ipv4", ipv4, &error_abort);
qemu_opt_set_bool(opts, "ipv6", ipv6, &error_abort);
+ } else if (addr->has_ipv4 || addr->has_ipv6) {
+ qemu_opt_set_bool(opts, "ipv4", !addr->has_ipv4, &error_abort);
+ qemu_opt_set_bool(opts, "ipv6", !addr->has_ipv6, &error_abort);
}
if (addr->has_to) {
qemu_opt_set_number(opts, "to", addr->to, &error_abort);
The first if handles the "default to N" case, the second handles
"default to Y", the (absent) else case handles "default to
PF_UNSPEC".
Paolo
next prev parent reply other threads:[~2015-10-04 10:48 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <9B0F7F7B0E031F4A99FC8A50E22E3AA360FC1AFD@EU-MBX-01.mgc.mentorg.com>
2015-10-02 17:56 ` [Qemu-devel] [Qemu-discuss] TCP options ipv4 and ipv6 have no effect Peter Maydell
2015-10-02 18:20 ` Sair, Umair
2015-10-02 22:36 ` Peter Maydell
2015-10-04 10:47 ` Paolo Bonzini [this message]
2015-10-05 18:03 ` Sair, Umair
2015-10-05 19:22 ` Paolo Bonzini
2015-10-05 19:27 ` Paolo Bonzini
2015-10-12 13:06 ` Sair, Umair
2015-10-12 13:25 ` Paolo Bonzini
2015-10-03 8:38 ` Liviu Ionescu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=561103DF.5000704@redhat.com \
--to=pbonzini@redhat.com \
--cc=Umair_Sair@mentor.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-discuss@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).