From: Wouter Wijngaards Date: Tue, 15 Jan 2008 14:07:49 +0000 (+0000) Subject: better v6only disable code. X-Git-Tag: release-0.9~80 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e84653485867a073b3b4e73f23ac5b244c983b5;p=thirdparty%2Funbound.git better v6only disable code. git-svn-id: file:///svn/unbound/trunk@860 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 8daa72049..dc8469527 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -89,7 +89,7 @@ int create_udp_sock(struct addrinfo *addr, int v6only) { int s; -# if defined(IPV6_V6ONLY) +# if defined(IPV6_USE_MIN_MTU) int on=1; # else (void)v6only; @@ -102,8 +102,9 @@ create_udp_sock(struct addrinfo *addr, int v6only) if(addr->ai_family == AF_INET6) { # if defined(IPV6_V6ONLY) if(v6only) { + int val=(v6only==2)?0:1; if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, - &on, (socklen_t)sizeof(on)) < 0) { + &val, (socklen_t)sizeof(val)) < 0) { log_err("setsockopt(..., IPV6_V6ONLY" ", ...) failed: %s", strerror(errno)); return -1; @@ -250,16 +251,6 @@ set_ip6_recvpktinfo(int s) strerror(errno)); return 0; } -#ifdef IPV6_V6ONLY - on = 0; - if(setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, - &on, (socklen_t)sizeof(on)) < 0) { - log_err("disable sockopt(..., IPV6_V6ONLY, ...) failed: %s" - " (on BSD may be due to net.inet6.ip6.v6only sysctl)", - strerror(errno)); - return 0; - } -#endif /* defined IPV6_V6ONLY */ return 1; } #endif /* defined IPV6_RECVPKTINFO */ @@ -286,7 +277,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp, if(do_auto) { /* skip ip4 sockets, ip4 udp gets mapped to v6 */ if(hints->ai_family == AF_INET6) { - if((s = make_sock(SOCK_DGRAM, ifname, port, hints, 0)) + if((s = make_sock(SOCK_DGRAM, ifname, port, hints, 2)) == -1) return 0; #ifdef IPV6_RECVPKTINFO diff --git a/services/listen_dnsport.h b/services/listen_dnsport.h index 17d18e2cc..59544888b 100644 --- a/services/listen_dnsport.h +++ b/services/listen_dnsport.h @@ -167,6 +167,7 @@ size_t listen_get_mem(struct listen_dnsport* listen); * Create and bind nonblocking UDP socket * @param addr: address info ready to make socket. * @param v6only: if enabled, IP6 sockets get IP6ONLY option set. + * if enabled with value 2 IP6ONLY option is disabled. * @return: the socket. -1 on error. */ int create_udp_sock(struct addrinfo* addr, int v6only); diff --git a/testdata/fwd_ancil.tpkg b/testdata/fwd_ancil.tpkg index 42d229bc2..1fda44d26 100644 Binary files a/testdata/fwd_ancil.tpkg and b/testdata/fwd_ancil.tpkg differ