]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix test failure when no IPv6 is avail
authorDoug Goldstein <cardoe@cardoe.com>
Sun, 22 Jul 2012 17:04:16 +0000 (12:04 -0500)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 23 Jul 2012 08:37:01 +0000 (10:37 +0200)
When the system doesn't have IPv6 available (e.g. not built into the
kernel or the module isn't loaded), you can not create an IPv6 socket.
The test determines earlier on that IPv6 isn't available then goes and
creates a socket. This makes socket creation conditional on IPv6
availability.

tests/virnetsockettest.c

index d65b949ebe822db21d976b5f9b341806f16e68f3..0f7bbad52a6d086cd2274cea7b419086abfe5417 100644 (file)
@@ -90,11 +90,13 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6,
         if ((s4 = socket(AF_INET, SOCK_STREAM, 0)) < 0)
             goto cleanup;
 
-        if ((s6 = socket(AF_INET6, SOCK_STREAM, 0)) < 0)
-            goto cleanup;
+        if (*hasIPv6) {
+            if ((s6 = socket(AF_INET6, SOCK_STREAM, 0)) < 0)
+                goto cleanup;
 
-        if (setsockopt(s6, IPPROTO_IPV6, IPV6_V6ONLY, &only, sizeof(only)) < 0)
-            goto cleanup;
+            if (setsockopt(s6, IPPROTO_IPV6, IPV6_V6ONLY, &only, sizeof(only)) < 0)
+                goto cleanup;
+        }
 
         memset(&in4, 0, sizeof(in4));
         memset(&in6, 0, sizeof(in6));
@@ -114,13 +116,16 @@ checkProtocols(bool *hasIPv4, bool *hasIPv6,
             }
             goto cleanup;
         }
-        if (bind(s6, (struct sockaddr *)&in6, sizeof(in6)) < 0) {
-            if (errno == EADDRINUSE) {
-                VIR_FORCE_CLOSE(s4);
-                VIR_FORCE_CLOSE(s6);
-                continue;
+
+        if (*hasIPv6) {
+            if (bind(s6, (struct sockaddr *)&in6, sizeof(in6)) < 0) {
+                if (errno == EADDRINUSE) {
+                    VIR_FORCE_CLOSE(s4);
+                    VIR_FORCE_CLOSE(s6);
+                    continue;
+                }
+                goto cleanup;
             }
-            goto cleanup;
         }
 
         *freePort = BASE_PORT + i;