[libvirt] [PATCH] tests: Improve IPv6 detection for virNetSocket tests

Matthias Bolte matthias.bolte at googlemail.com
Fri Jun 24 15:39:29 UTC 2011


getifaddrs can return an IPv6 address, but getaddrinfo can fail
for an IPv6 address. Cover this combination.
---

This is only tested on my system with broken IPv6. Could someone test this
on an IPv6 capable system and ensure that the IPv6 tests aren't skipped now
by running

  cd tests
  make virnetsockettest
  PATH=`pwd`:$PATH LIBVIRT_DEBUG=1 ./virnetsockettest

This should print something like this

  17:35:09.810: 4102: debug : checkProtocols:83 : Protocols: v4 1 v6 1

on an IPv6 capable system.

 tests/virnetsockettest.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/tests/virnetsockettest.c b/tests/virnetsockettest.c
index f686a15..f6c7274 100644
--- a/tests/virnetsockettest.c
+++ b/tests/virnetsockettest.c
@@ -45,12 +45,16 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6,
                int *freePort)
 {
     struct ifaddrs *ifaddr = NULL, *ifa;
+    struct addrinfo hints;
+    struct addrinfo *ai = NULL;
     struct sockaddr_in in4;
     struct sockaddr_in6 in6;
     int s4 = -1, s6 = -1;
     int i;
     int ret = -1;
 
+    memset(&hints, 0, sizeof hints);
+
     *hasIPv4 = *hasIPv6 = false;
     *freePort = 0;
 
@@ -67,6 +71,15 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6,
             *hasIPv6 = true;
     }
 
+    hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
+    hints.ai_family = AF_INET6;
+    hints.ai_socktype = SOCK_STREAM;
+
+    if (getaddrinfo("::1", "5672", &hints, &ai) != 0)
+        *hasIPv6 = false;
+
+    freeaddrinfo(ai);
+
     VIR_DEBUG("Protocols: v4 %d v6 %d\n", *hasIPv4, *hasIPv6);
 
     freeifaddrs(ifaddr);
-- 
1.7.0.4




More information about the libvir-list mailing list