All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-trivial] [PATCH] util/qemu-sockets: improve ai_flag hints for ipv6 hosts
@ 2015-05-21 12:33 Wolfgang Bumiller
  2015-06-17 19:52 ` Michael Tokarev
  0 siblings, 1 reply; 2+ messages in thread
From: Wolfgang Bumiller @ 2015-05-21 12:33 UTC (permalink / raw)
  To: qemu-trivial

*) Do not use AI_ADDRCONFIG on listening sockets, because this flag
makes it impossible to explicitly listen on '127.0.0.1' if no global
ipv4 address is configured additionally, making this a very
uncomfortable option.
*) Add AI_V4MAPPED hint for connecting sockets.

If your system is globally only connected via ipv6 you often still want
to be able to use '127.0.0.1' and 'localhost' (even if localhost doesn't
also have an ipv6 entry).
For example, PVE - unless explicitly asking for insecure mode - uses
ipv4 loopback addresses with QEMU for live migrations tunneled over SSH.
These fail to start because AI_ADDRCONFIG makes getaddrinfo refuse to
work with '127.0.0.1'.

As for the AI_V4MAPPED flag: glibc uses it by default, and providing
non-0 flags removes it. I think it makes sense to use it.

I also want to point out that glibc explicitly sidesteps POSIX standards
when passing 0 as hints by then assuming both AI_V4MAPPED and
AI_ADDRCONFIG (the latter being a rather weird choice IMO), while
according to POSIX.1-2001 it should be assumed 0. (glibc considers its
choice an improvement.)
Since either AI_CANONNAME or AI_PASSIVE are passed in our cases, glibc's
default flags in turn are disabled again unless explicitly added, which
I do with this patch.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
---
 util/qemu-sockets.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 6b97dc1..f99b013 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -114,7 +114,7 @@ int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp)
     int slisten, rc, to, port_min, port_max, p;
 
     memset(&ai,0, sizeof(ai));
-    ai.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
+    ai.ai_flags = AI_PASSIVE;
     ai.ai_family = PF_UNSPEC;
     ai.ai_socktype = SOCK_STREAM;
 
@@ -308,7 +308,7 @@ static struct addrinfo *inet_parse_connect_opts(QemuOpts *opts, Error **errp)
 
     memset(&ai, 0, sizeof(ai));
 
-    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;
+    ai.ai_flags = AI_CANONNAME | AI_V4MAPPED | AI_ADDRCONFIG;
     ai.ai_family = PF_UNSPEC;
     ai.ai_socktype = SOCK_STREAM;
 
@@ -404,7 +404,7 @@ int inet_dgram_opts(QemuOpts *opts, Error **errp)
 
     /* lookup peer addr */
     memset(&ai,0, sizeof(ai));
-    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;
+    ai.ai_flags = AI_CANONNAME | AI_V4MAPPED | AI_ADDRCONFIG;
     ai.ai_family = PF_UNSPEC;
     ai.ai_socktype = SOCK_DGRAM;
 
-- 
2.1.4




^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [Qemu-trivial] [PATCH] util/qemu-sockets: improve ai_flag hints for ipv6 hosts
  2015-05-21 12:33 [Qemu-trivial] [PATCH] util/qemu-sockets: improve ai_flag hints for ipv6 hosts Wolfgang Bumiller
@ 2015-06-17 19:52 ` Michael Tokarev
  0 siblings, 0 replies; 2+ messages in thread
From: Michael Tokarev @ 2015-06-17 19:52 UTC (permalink / raw)
  To: Wolfgang Bumiller, qemu-trivial

21.05.2015 15:33, Wolfgang Bumiller wrote:
> *) Do not use AI_ADDRCONFIG on listening sockets, because this flag
> makes it impossible to explicitly listen on '127.0.0.1' if no global
> ipv4 address is configured additionally, making this a very
> uncomfortable option.
> *) Add AI_V4MAPPED hint for connecting sockets.
> 
> If your system is globally only connected via ipv6 you often still want
> to be able to use '127.0.0.1' and 'localhost' (even if localhost doesn't
> also have an ipv6 entry).
> For example, PVE - unless explicitly asking for insecure mode - uses
> ipv4 loopback addresses with QEMU for live migrations tunneled over SSH.
> These fail to start because AI_ADDRCONFIG makes getaddrinfo refuse to
> work with '127.0.0.1'.
> 
> As for the AI_V4MAPPED flag: glibc uses it by default, and providing
> non-0 flags removes it. I think it makes sense to use it.
> 
> I also want to point out that glibc explicitly sidesteps POSIX standards
> when passing 0 as hints by then assuming both AI_V4MAPPED and
> AI_ADDRCONFIG (the latter being a rather weird choice IMO), while
> according to POSIX.1-2001 it should be assumed 0. (glibc considers its
> choice an improvement.)
> Since either AI_CANONNAME or AI_PASSIVE are passed in our cases, glibc's
> default flags in turn are disabled again unless explicitly added, which
> I do with this patch.

Applied (finally!) to -trivial.  I'm sorry for the delay.  Thank you!

/mjt


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-06-17 19:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-21 12:33 [Qemu-trivial] [PATCH] util/qemu-sockets: improve ai_flag hints for ipv6 hosts Wolfgang Bumiller
2015-06-17 19:52 ` Michael Tokarev

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.