From: Wolfgang Bumiller Date: Thu, 21 May 2015 12:08:09 +0000 (+0200) Subject: Added patch to make ipv6 life easier. X-Git-Url: https://git.proxmox.com/?p=pve-qemu-kvm.git;a=commitdiff_plain;h=580562d4cadfcf662de532ba89e82e1f9f8b5b20 Added patch to make ipv6 life easier. 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. --- 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 +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