From 4052c747971f0f57cb14dd5cc9a64d7b8788e733 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Wed, 11 Nov 2015 10:10:19 +0100 Subject: [PATCH] test,freebsd: skip udp_dual_stack if not supported MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By default, FreeBSD has net.inet6.ip6.v6only set to 1 (i.e., no dual stack support). A new function can_ipv6_ipv4_dual is added to check its value and decide whether `udp_dual_stack` test must be skipped or not. PR-URL: https://github.com/libuv/libuv/pull/614 Reviewed-By: Saúl Ibarra Corretgé --- test/test-udp-ipv6.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/test-udp-ipv6.c b/test/test-udp-ipv6.c index 1d5720ce..1b0db78b 100644 --- a/test/test-udp-ipv6.c +++ b/test/test-udp-ipv6.c @@ -26,6 +26,10 @@ #include #include +#ifdef __FreeBSD__ +#include +#endif + #define CHECK_HANDLE(handle) \ ASSERT((uv_udp_t*)(handle) == &server \ || (uv_udp_t*)(handle) == &client \ @@ -43,6 +47,18 @@ static int send_cb_called; static int recv_cb_called; static int close_cb_called; +#ifdef __FreeBSD__ +static int can_ipv6_ipv4_dual() { + int v6only; + size_t size = sizeof(int); + + if (sysctlbyname("net.inet6.ip6.v6only", &v6only, &size, NULL, 0)) + return 0; + + return v6only != 1; +} +#endif + static void alloc_cb(uv_handle_t* handle, size_t suggested_size, @@ -150,6 +166,11 @@ TEST_IMPL(udp_dual_stack) { if (!can_ipv6()) RETURN_SKIP("IPv6 not supported"); +#ifdef __FreeBSD__ + if (!can_ipv6_ipv4_dual()) + RETURN_SKIP("IPv6-IPv4 dual stack not supported"); +#endif + do_test(ipv6_recv_ok, 0); ASSERT(recv_cb_called == 1);