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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.