[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect
From: |
Sair, Umair |
Subject: |
Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect |
Date: |
Mon, 5 Oct 2015 18:03:58 +0000 |
> The first if handles the "default to N" case, the second handles "default to
> Y", the (absent) else case handles "default to PF_UNSPEC".
Can you please elaborate it. Also I am not understanding the reason for
inverting the values of addr->has_ipv* in second if condition.
I believe that the fix for the issue under discussion will be committed to qemu
repo very soon, so I'll like to add one more thing which requires to be fixed
along with it. In 'tcp_chr_accept' function of qemu-char.c, the data type of
saddr should be sockaddr_in6 so that it works with both IPv6 and IPv4 on
Windows (works for linux without it because of accept4 and works with this
solution as well!).
Regards,
Umair Sair
-----Original Message-----
From: Paolo Bonzini [mailto:address@hidden On Behalf Of Paolo Bonzini
Sent: Sunday, October 04, 2015 3:48 PM
To: Peter Maydell; Sair, Umair
Cc: QEMU Developers; address@hidden
Subject: Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect
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
- [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Sair, Umair, 2015/10/08
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Peter Maydell, 2015/10/08
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Sair, Umair, 2015/10/08
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Peter Maydell, 2015/10/08
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Paolo Bonzini, 2015/10/08
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect,
Sair, Umair <=
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Paolo Bonzini, 2015/10/08
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Paolo Bonzini, 2015/10/08
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Sair, Umair, 2015/10/15
- Re: [Qemu-discuss] TCP options ipv4 and ipv6 have no effect, Paolo Bonzini, 2015/10/12
- Re: [Qemu-discuss] [Qemu-devel] TCP options ipv4 and ipv6 have no effect, Liviu Ionescu, 2015/10/08