[pve-devel] [PATCH] Added patch to make ipv6 life easier.

Wolfgang Bumiller w.bumiller at proxmox.com
Thu May 21 14:08:09 CEST 2015


Copy of the patch notes:
[PATCH] friendlier ai_flag hints for ipv6 hosts

*) 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 for a similar purpose.

If your system is globally only connected via ipv6 you still want to be
able to use '127.0.0.1' and 'localhost'.
Specifically, PVE - unless explicitly asking for insecure mode - uses
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 the situation is similar.

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.
---
 ...1-friendlier-ai_flag-hints-for-ipv6-hosts.patch | 66 ++++++++++++++++++++++
 debian/patches/series                              |  1 +
 2 files changed, 67 insertions(+)
 create mode 100644 debian/patches/0001-friendlier-ai_flag-hints-for-ipv6-hosts.patch

diff --git a/debian/patches/0001-friendlier-ai_flag-hints-for-ipv6-hosts.patch b/debian/patches/0001-friendlier-ai_flag-hints-for-ipv6-hosts.patch
new file mode 100644
index 0000000..4b7dd9c
--- /dev/null
+++ b/debian/patches/0001-friendlier-ai_flag-hints-for-ipv6-hosts.patch
@@ -0,0 +1,66 @@
+From dea9f9c5d03983bb6a9c75f093b2f9c49e4a5397 Mon Sep 17 00:00:00 2001
+From: Wolfgang Bumiller <w.bumiller at proxmox.com>
+Date: Thu, 21 May 2015 10:48:21 +0200
+Subject: [PATCH] friendlier ai_flag hints for ipv6 hosts
+
+*) 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 for a similar purpose.
+
+If your system is globally only connected via ipv6 you still want to be
+able to use '127.0.0.1' and 'localhost'.
+Specifically, PVE - unless explicitly asking for insecure mode - uses
+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 the situation is similar.
+
+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.
+---
+ 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
+
diff --git a/debian/patches/series b/debian/patches/series
index 51b8c2f..5041ded 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -34,3 +34,4 @@ virtio-balloon-dimmfix2.patch
 virtio-balloon-dimmfix3.patch
 add-qmp-get-link-status.patch
 virtio-scsi_fix_assert.patch
+0001-friendlier-ai_flag-hints-for-ipv6-hosts.patch
-- 
2.1.4




More information about the pve-devel mailing list