]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
better v6only disable code.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 15 Jan 2008 14:07:49 +0000 (14:07 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 15 Jan 2008 14:07:49 +0000 (14:07 +0000)
git-svn-id: file:///svn/unbound/trunk@860 be551aaa-1e26-0410-a405-d3ace91eadb9

services/listen_dnsport.c
services/listen_dnsport.h
testdata/fwd_ancil.tpkg

index 8daa720498e6c28aab31840631e46af3bd586d2f..dc846952764825459b65da6b6b74ddaf2ee8212d 100644 (file)
@@ -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
index 17d18e2cc1fe6372620927a9e0113dc6489062e1..59544888baf24bbf651e1239e96d5ae26442f939 100644 (file)
@@ -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);
index 42d229bc22572a708a775667ce31f97f2f56a8b7..1fda44d266526e894c9230a59a940a5689df9470 100644 (file)
Binary files a/testdata/fwd_ancil.tpkg and b/testdata/fwd_ancil.tpkg differ