On 06/22/2011 09:33 AM, Daniel P. Berrange wrote: > Introduces a simple wrapper around the raw POSIX sockets APIs > and name resolution APIs. Allows for easy creation of client > and server sockets with correct usage of name resolution APIs > for protocol agnostic socket setup. > > It can listen for UNIX and TCP stream sockets. > > It can connect to UNIX, TCP streams directly, or indirectly > to UNIX sockets via an SSH tunnel or external command > > * src/Makefile.am: Add to libvirt-net-rpc.la > * src/rpc/virnetsocket.c, src/rpc/virnetsocket.h: Generic > sockets APIs > * tests/Makefile.am: Add socket test > * tests/virnetsockettest.c: New test case > * tests/testutils.c: Avoid overriding LIBVIRT_DEBUG settings > * tests/ssh.c: Dumb helper program for SSH tunnelling tests
Again, problems with 'make check', first linking failures, then test
failures.
> +#ifdef IPV6_V6ONLY
> + if (runp->ai_family == PF_INET6) {
> + int on = 1;
> + /*
> + * Normally on Linux an INET6 socket will bind to the INET4
> + * address too. If getaddrinfo returns results with INET4
> + * first though, this will result in INET6 binding failing.
> + * We can trivially cope with multiple server sockets, so
> + * we force it to only listen on IPv6
> + */
> + if (setsockopt(fd, IPPROTO_IPV6,IPV6_V6ONLY,
Formatting nit.
> + if (virCommandRunAsync(cmd, &pid) < 0)
> + goto error;
> +
> + /* Parent continues here. */
> + VIR_FORCE_CLOSE(sv[1]);
> + VIR_FORCE_CLOSE(errfd[1]);
> +
> + if (!(*retsock = virNetSocketNew(NULL, NULL, true, sv[0], errfd[0],
> pid)))
> + goto error;
> +
> + virCommandFree(cmd);
> +
> + return 0;
> +
> +error:
> + VIR_FORCE_CLOSE(sv[0]);
> + VIR_FORCE_CLOSE(sv[1]);
> + VIR_FORCE_CLOSE(errfd[0]);
> + VIR_FORCE_CLOSE(errfd[1]);
> +
> + if (pid > 0) {
> + kill(pid, SIGTERM);
> + if (virCommandWait(cmd, NULL) < 0) {
> + kill(pid, SIGKILL);
> + if (virCommandWait(cmd, NULL) < 0) {
> + VIR_WARN("Unable to wait for command %d", pid);
> + }
> + }
> + }
This can be simplified.
Here's what I applied to get compilation to complete, but I'm still
seeing test failures (is this test too sensitive to firewalls, or
running as non-root)?
diff --git i/src/rpc/virnetsocket.c w/src/rpc/virnetsocket.c
index eedced0..5e9066f 100644
--- i/src/rpc/virnetsocket.c
+++ w/src/rpc/virnetsocket.c
@@ -206,7 +206,7 @@ int virNetSocketNewListenTCP(const char *nodename,
* We can trivially cope with multiple server sockets, so
* we force it to only listen on IPv6
*/
- if (setsockopt(fd, IPPROTO_IPV6,IPV6_V6ONLY,
+ if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY,
(void*)&on, sizeof on) < 0) {
virReportSystemError(errno, "%s",
_("Unable to force bind to IPv6
only"));
@@ -542,16 +542,7 @@ error:
VIR_FORCE_CLOSE(errfd[0]);
VIR_FORCE_CLOSE(errfd[1]);
- if (pid > 0) {
- kill(pid, SIGTERM);
- if (virCommandWait(cmd, NULL) < 0) {
- kill(pid, SIGKILL);
- if (virCommandWait(cmd, NULL) < 0) {
- VIR_WARN("Unable to wait for command %d", pid);
- }
- }
- }
-
+ virCommandAbort(cmd);
virCommandFree(cmd);
return -1;
diff --git i/tests/Makefile.am w/tests/Makefile.am
index f3e2c77..5ed9d0a 100644
--- i/tests/Makefile.am
+++ w/tests/Makefile.am
@@ -414,7 +414,7 @@ virnetmessagetest_LDADD = ../src/libvirt-net-rpc.la
$(LDADDS)
virnetsockettest_SOURCES = \
virnetsockettest.c testutils.h testutils.c
virnetsockettest_CFLAGS = -Dabs_builddir="\"$(abs_builddir)\""
-virnetsockettest_LDADD = $(LDADDS)
+virnetsockettest_LDADD = ../src/libvirt-net-rpc.la $(LDADDS)
seclabeltest_SOURCES = \
Any ideas on how best to go about debugging these test failures?
TEST: virnetsockettest
1) Socket TCP/IPv4 Accept
... FAILED
2) Socket TCP/IPv6 Accept
... FAILED
3) Socket TCP/IPv4+IPv6 Accept
... FAILED
4) Socket TCP/IPv4+IPv6 Accept
... FAILED
5) Socket UNIX Accept ... OK
6) Socket UNIX Addrs ... OK
7) Socket External Command /dev/zero ... OK
8) Socket External Command /dev/does-not-exist
... FAILED
9) SSH test 1 ...
Expect [somehost nc -U /tmp/socket
]
Actual []
... FAILED
10) SSH test 2 ...
Expect [-p 9000 -l fred -T -o BatchMode=yes -e none somehost netcat -U
/tmp/socket
]
Actual []
... FAILED
11) SSH test 3
... FAILED
12) SSH test 4 ...
Expect [crashyhost nc -U /tmp/socket
]
Actual []
... FAILED
FAIL: virnetsockettest
--
Eric Blake [email protected] +1-801-349-2682
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
