From 7e84653485867a073b3b4e73f23ac5b244c983b5 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 15 Jan 2008 14:07:49 +0000 Subject: [PATCH] better v6only disable code. git-svn-id: file:///svn/unbound/trunk@860 be551aaa-1e26-0410-a405-d3ace91eadb9 --- services/listen_dnsport.c | 17 ++++------------- services/listen_dnsport.h | 1 + testdata/fwd_ancil.tpkg | Bin 1896 -> 1899 bytes 3 files changed, 5 insertions(+), 13 deletions(-) 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 42d229bc22572a708a775667ce31f97f2f56a8b7..1fda44d266526e894c9230a59a940a5689df9470 100644 GIT binary patch literal 1899 zc-jGL2bB09iwFP)zKllz1ML}WbK5r3Ux{C_ku`BLE-6ya8zs_Mv6RMbBDu1BY3JHe zX%doHQv^ehR@A%u@3#OSB5liVQ^&ou+Bgz`UF-t;zyhn;%AT5@<+z&d1eLwd0y;vg z)rh~F^}=@odxqYs*Nj?A*Qw06cfsG>{`;`6s!+5$sOmo12hO6v zq7W`9EKQD^hbz?7%yB8K7SsbLJm3NwQ1UNOXP{{nE%Yzv8j@+rjGy4?)0ELIc$5-x z#AL%#{EP+Qcp%$2=$IEM(lnMs@O=W__-b@M>`zZeHUmq2LYIok23v$)}wE+w#A~yxBwLn0xZS-l*1c_di|cf1|O>|BnHj23Is_ z69qpn7&E<&Cg0KxoB4Un+g36dPOvh?6JUX8w7|iD?=1p|V zHh7FE=vLGUS%7>?=<~i~3y;Q5>cBW6PP;|GSQyhFi@-CNH163<^;oEWh-k1@U1pi? zg7GkB?s#aEnQ2kgj6$|FL&s{vnsTC;mPI*N(T&4^xoyzp37}VWFkP3eZW6TH8ziRa zl^NLTugs&Unq)0_oG2;AwCw$m$yhlVD!mNT8=k!%jI(himv56*42JzLEa?7^U|am#+_r-s`*~;R- zQN?ki(QFvI_ska*X!}F|%)mC}9#&_{Q|WXn>)&>#cUJ1;>L4RCWCyVNd%;iOb95Z||d(;ct#8_SL>t1tGoY<7;vGMsBAj=hSYK*QVp*gT4LNIc~PaKdS1% zWZV<~wOXsSssB|){kPH5tGoDr47gtZL%aW#s(<6;k>4pldj{okZ`dEbgF|T48g+R7 zoaE~OopMS{UccYW%0_XTfm86Mli^ajLxG6j?M06HUJ1J0>+6f>Y{aFl+i348UMinl zwN#WpRHszZI);*!Bt=L`LyET&+8MVs76Q+|@Sffz^{w_0EyL*bHw zsEs)D_@azy0aOYHyds~*KOR*M3RXX;9HjX8g(xY~h32ry3tFO69~0=8P%O$o7orQ< z$`qZvq-E4#xL%mn(`d5seuBXxrIhhQ1d4Kj_o2%d*h0VE z@D^xvgAe(oTxWL{YYR<`Qf9Hh1s8M}ZsnKlaGK z|K_BmSH8Ps{N}6Qe*Dwu8j;8tk1n?IKr%waCB9t6rf~(bnP&amc`ox{n(;Z_e(s@6 lxh5x0LY>Qzzk&B%)PLYNo*nF92Rpb8{s-m@Q``V3005d($V31D literal 1896 zc-jGI2bcICiwFQ0n~X;Q1MOLRbK5o&&%eT_*vOhV8J85P=Zz9;tXN9pHj!LezFg

%bns*u0m{+02aHzE`Ix9CJSe5G28WY#|@r*nPwP9 zvt9>$n$4z}e`XC#qgkt(X1!K1!7yvJO63XEztDcxS|ma%z^yEJ6w(JYux&m$NA~+QO76RzgcNEo`A8d4LsET;`SFbxS>Id6!7mA z7jC$0L5&m+fJJjHoCVZ!L<>w(@Ocon;N*NT9G#E?Dr3rBHr0~h!R08Ki3HWeQh0pY z0>()JuNAdJ9w6Uh5!txT#Puk4B6h_i=IA(rlMQPfkVyrGO$Kf3`_KtKElxN7y@)u?_#V zMl;1f`huFoKPq;Q|Ho*rEkXP0erL8Pf2Vr8nLQarVWHMEbgq-rZkJw~ki=57#F7;6=x+$`HdrLjP zMb3l#!E`^M00fT$n?g9FFt-FA9&W4vWb}r`j52V; zLm_7oRR08R0=iz-L;rfJBblD8_!*u(OBvlUzb-|hZkvpZfg)aGzcxkW2^~@+U?E##cNjL(zm;43FckuyxJ!yiz}Cv zvCOhV@1?W?!&+zp@c=Ly>X=A{4IT3|{iea0w}d}n8c-k1l)Mnjetpq}nI#~hLgm}k z0nWaG38rr7n!v?W3zaXe5OTExSqK%BKf=0j;u8Fk7Y1>ptS1X3G%lW{H$3(nCN#N- ziR=JRr4ft2EM~4fQx3H^{H2)gD_&Nf@i{HWm@CV(=J}w!cok?qWIEeO-dQ)RusVg`QKx-&HOL+d;donU_KgdNueNVpO;C&M*E-gs$0zB zEGzA1$re_&X~mpG={5$4DV(%gCM*^Uoqn?BzDF_C&yj65B@?E6rgDoGPZv^*VNs|u zos_pdqxLmeOe|G!#{S@ z@DTTM?mJ!8$G9gsrCBE`A(&^IT-QMMP5wSTtO))B+K@&+y0IU+6LR`b*TjEk;RjB( zPV}{$Z~Z!~-G@zRev9AH$`Oe#Z#WzbNvHeW<;4iIdw)509dgk-9i0vO@WW;ALcS2hW#Oz}=wvgU{>6vh iFdHxApqK2T*YECg`hDBCecQLsZT|*hDRgH5C;$M{9