Re: [PATCH 1/2] Split out virHostHasIPv6 from qemuMigrationPrepareAny

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Oct 01, 2013 at 11:01:36AM +0200, Ján Tomko wrote:
> Split out the part of qemuMigrationPrepareAny that decides
> whether to listen on [::] or 0.0.0.0 by checking whether
> IPv6 is enabled on the host.
> ---
>  src/libvirt_private.syms  |  1 +
>  src/qemu/qemu_migration.c |  8 +-------
>  src/util/virutil.c        | 14 ++++++++++++++
>  src/util/virutil.h        |  1 +
>  4 files changed, 17 insertions(+), 7 deletions(-)
> 
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 4bc4d69..157d68c 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -2065,6 +2065,7 @@ virGetUserID;
>  virGetUserName;
>  virGetUserRuntimeDirectory;
>  virHexToBin;
> +virHostHasIPv6;
>  virIndexToDiskName;
>  virIsCapableFCHost;
>  virIsCapableVport;
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 3a1aab7..c21063d 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -22,8 +22,6 @@
>  
>  #include <config.h>
>  
> -#include <netdb.h>
> -#include <sys/socket.h>
>  #include <sys/time.h>
>  #ifdef WITH_GNUTLS
>  # include <gnutls/gnutls.h>
> @@ -2261,9 +2259,6 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
>              goto cleanup;
>      } else {
>          virQEMUCapsPtr qemuCaps = NULL;
> -        struct addrinfo *info = NULL;
> -        struct addrinfo hints = { .ai_flags = AI_ADDRCONFIG,
> -                                  .ai_socktype = SOCK_STREAM };
>  
>          if (!(qemuCaps = virQEMUCapsCacheLookupCopy(driver->qemuCapsCache,
>                                                      (*def)->emulator)))
> @@ -2273,8 +2268,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver,
>           * and there is at least one IPv6 address configured
>           */
>          if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_IPV6_MIGRATION) &&
> -            getaddrinfo("::", NULL, &hints, &info) == 0) {
> -            freeaddrinfo(info);
> +            virHostHasIPv6()) {
>              listenAddr = "[::]";
>          } else {
>              listenAddr = "0.0.0.0";
> diff --git a/src/util/virutil.c b/src/util/virutil.c
> index d9e0bc4..2fcd8a5 100644
> --- a/src/util/virutil.c
> +++ b/src/util/virutil.c
> @@ -648,6 +648,20 @@ cleanup:
>  }
>  
>  
> +bool
> +virHostHasIPv6()
> +{
> +    bool ret;
> +    struct addrinfo *info = NULL;
> +    struct addrinfo hints = { .ai_flags = AI_ADDRCONFIG,
> +                              .ai_socktype = SOCK_STREAM };
> +
> +    ret = getaddrinfo("::", NULL, &hints, &info) == 0;
> +    freeaddrinfo(info);
> +    return ret;
> +}

This really doesn't belong in virutil.c.

I'd prefer to see this in virnetdev.{c,h} and named

  virNetDevCheckIPProtocols(bool *hasIPv4, bool *hasIPv6)


and it should use 'getifaddrs' - 'getaddrinfo' isn't a
reliable way to determine if IPv6 is present. There is
code in tests/virnetsockettest.c you can move for this
purpose.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list





[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]