xref: /freebsd/contrib/ntp/sntp/m4/ntp_ipv6.m4 (revision 416ba5c74546f32a993436a99516d35008e9f384)
1*2b15cb3dSCy Schubertdnl ######################################################################
2*2b15cb3dSCy Schubertdnl Common IPv6 detection for NTP configure.ac files
3*2b15cb3dSCy SchubertAC_DEFUN([NTP_IPV6], [
4*2b15cb3dSCy Schubert
5*2b15cb3dSCy SchubertAC_CACHE_CHECK(
6*2b15cb3dSCy Schubert    [for struct sockaddr_storage],
7*2b15cb3dSCy Schubert    [ntp_cv_sockaddr_storage],
8*2b15cb3dSCy Schubert    [AC_COMPILE_IFELSE(
9*2b15cb3dSCy Schubert	[AC_LANG_PROGRAM(
10*2b15cb3dSCy Schubert	    [[
11*2b15cb3dSCy Schubert		#ifdef HAVE_SYS_TYPES_H
12*2b15cb3dSCy Schubert		# include <sys/types.h>
13*2b15cb3dSCy Schubert		#endif
14*2b15cb3dSCy Schubert		#ifdef HAVE_SYS_SOCKET_H
15*2b15cb3dSCy Schubert		# include <sys/socket.h>
16*2b15cb3dSCy Schubert		#endif
17*2b15cb3dSCy Schubert		#ifdef HAVE_NETINET_IN_H
18*2b15cb3dSCy Schubert		# include <netinet/in.h>
19*2b15cb3dSCy Schubert		#endif
20*2b15cb3dSCy Schubert	    ]],
21*2b15cb3dSCy Schubert	    [[
22*2b15cb3dSCy Schubert		struct sockaddr_storage n;
23*2b15cb3dSCy Schubert	    ]]
24*2b15cb3dSCy Schubert	)],
25*2b15cb3dSCy Schubert	[ntp_cv_sockaddr_storage=yes],
26*2b15cb3dSCy Schubert	[ntp_cv_sockaddr_storage=no]
27*2b15cb3dSCy Schubert    )]
28*2b15cb3dSCy Schubert)
29*2b15cb3dSCy Schubertcase "$ntp_cv_sockaddr_storage" in
30*2b15cb3dSCy Schubert yes)
31*2b15cb3dSCy Schubert    AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], [1],
32*2b15cb3dSCy Schubert	[Does a system header define struct sockaddr_storage?])
33*2b15cb3dSCy Schubert    AC_CACHE_CHECK(
34*2b15cb3dSCy Schubert	[for sockaddr_storage.__ss_family],
35*2b15cb3dSCy Schubert	[ntp_cv_have___ss_family],
36*2b15cb3dSCy Schubert	[AC_COMPILE_IFELSE(
37*2b15cb3dSCy Schubert	    [AC_LANG_PROGRAM(
38*2b15cb3dSCy Schubert		[[
39*2b15cb3dSCy Schubert		    #ifdef HAVE_SYS_TYPES_H
40*2b15cb3dSCy Schubert		    # include <sys/types.h>
41*2b15cb3dSCy Schubert		    #endif
42*2b15cb3dSCy Schubert		    #ifdef HAVE_SYS_SOCKET_H
43*2b15cb3dSCy Schubert		    # include <sys/socket.h>
44*2b15cb3dSCy Schubert		    #endif
45*2b15cb3dSCy Schubert		    #ifdef HAVE_NETINET_IN_H
46*2b15cb3dSCy Schubert		    # include <netinet/in.h>
47*2b15cb3dSCy Schubert		    #endif
48*2b15cb3dSCy Schubert		]],
49*2b15cb3dSCy Schubert		[[
50*2b15cb3dSCy Schubert		    struct sockaddr_storage s;
51*2b15cb3dSCy Schubert		    s.__ss_family = 1;
52*2b15cb3dSCy Schubert		]]
53*2b15cb3dSCy Schubert	    )],
54*2b15cb3dSCy Schubert	    [ntp_cv_have___ss_family=yes],
55*2b15cb3dSCy Schubert	    [ntp_cv_have___ss_family=no]
56*2b15cb3dSCy Schubert	)]
57*2b15cb3dSCy Schubert    )
58*2b15cb3dSCy Schubert    case "$ntp_cv_have___ss_family" in
59*2b15cb3dSCy Schubert     yes)
60*2b15cb3dSCy Schubert	AC_DEFINE([HAVE___SS_FAMILY_IN_SS], [1],
61*2b15cb3dSCy Schubert		  [Does struct sockaddr_storage have __ss_family?])
62*2b15cb3dSCy Schubert    esac
63*2b15cb3dSCy Schubert    AH_VERBATIM(
64*2b15cb3dSCy Schubert	[HAVE___SS_FAMILY_IN_SS_VERBATIM],
65*2b15cb3dSCy Schubert	[
66*2b15cb3dSCy Schubert	    /* Handle sockaddr_storage.__ss_family */
67*2b15cb3dSCy Schubert	    #ifdef HAVE___SS_FAMILY_IN_SS
68*2b15cb3dSCy Schubert	    # define ss_family __ss_family
69*2b15cb3dSCy Schubert	    #endif /* HAVE___SS_FAMILY_IN_SS */
70*2b15cb3dSCy Schubert	]
71*2b15cb3dSCy Schubert    )
72*2b15cb3dSCy Schubertesac
73*2b15cb3dSCy Schubert
74*2b15cb3dSCy Schubert
75*2b15cb3dSCy Schubert#
76*2b15cb3dSCy Schubert# Look for in_port_t.
77*2b15cb3dSCy Schubert#
78*2b15cb3dSCy SchubertAC_CACHE_CHECK(
79*2b15cb3dSCy Schubert    [for in_port_t],
80*2b15cb3dSCy Schubert    [isc_cv_have_in_port_t],
81*2b15cb3dSCy Schubert    [AC_COMPILE_IFELSE(
82*2b15cb3dSCy Schubert	[AC_LANG_PROGRAM(
83*2b15cb3dSCy Schubert	    [[
84*2b15cb3dSCy Schubert		#include <sys/types.h>
85*2b15cb3dSCy Schubert		#include <netinet/in.h>
86*2b15cb3dSCy Schubert	    ]],
87*2b15cb3dSCy Schubert	    [[
88*2b15cb3dSCy Schubert		in_port_t port = 25;
89*2b15cb3dSCy Schubert		return (0);
90*2b15cb3dSCy Schubert	    ]]
91*2b15cb3dSCy Schubert	)],
92*2b15cb3dSCy Schubert	[isc_cv_have_in_port_t=yes],
93*2b15cb3dSCy Schubert	[isc_cv_have_in_port_t=no]
94*2b15cb3dSCy Schubert    )]
95*2b15cb3dSCy Schubert)
96*2b15cb3dSCy Schubertcase "$isc_cv_have_in_port_t" in
97*2b15cb3dSCy Schubert no)
98*2b15cb3dSCy Schubert	AC_DEFINE([ISC_PLATFORM_NEEDPORTT], [1],
99*2b15cb3dSCy Schubert	    [Declare in_port_t?])
100*2b15cb3dSCy Schubertesac
101*2b15cb3dSCy Schubert
102*2b15cb3dSCy SchubertAC_CACHE_CHECK(
103*2b15cb3dSCy Schubert    [type of socklen arg for getsockname()],
104*2b15cb3dSCy Schubert    [ntp_cv_getsockname_socklen_type],
105*2b15cb3dSCy Schubert    [
106*2b15cb3dSCy Schubert    getsockname_socklen_type_found=no
107*2b15cb3dSCy Schubert    for getsockname_arg2 in 'struct sockaddr *' 'void *'; do
108*2b15cb3dSCy Schubert	for ntp_cv_getsockname_socklen_type in 'socklen_t' 'size_t' 'unsigned int' 'int'; do
109*2b15cb3dSCy Schubert	    AC_COMPILE_IFELSE(
110*2b15cb3dSCy Schubert		[AC_LANG_PROGRAM(
111*2b15cb3dSCy Schubert		    [[
112*2b15cb3dSCy Schubert			#ifdef HAVE_SYS_TYPES_H
113*2b15cb3dSCy Schubert			# include <sys/types.h>
114*2b15cb3dSCy Schubert			#endif
115*2b15cb3dSCy Schubert			#ifdef HAVE_SYS_SOCKET_H
116*2b15cb3dSCy Schubert			# include <sys/socket.h>
117*2b15cb3dSCy Schubert			#endif
118*2b15cb3dSCy Schubert		    ]], [[
119*2b15cb3dSCy Schubert			extern
120*2b15cb3dSCy Schubert			getsockname(int, $getsockname_arg2,
121*2b15cb3dSCy Schubert				$ntp_cv_getsockname_socklen_type *);
122*2b15cb3dSCy Schubert		    ]]
123*2b15cb3dSCy Schubert		)],
124*2b15cb3dSCy Schubert		[getsockname_socklen_type_found=yes ; break 2],
125*2b15cb3dSCy Schubert		[]
126*2b15cb3dSCy Schubert	    )
127*2b15cb3dSCy Schubert	done
128*2b15cb3dSCy Schubert    done
129*2b15cb3dSCy Schubert    case "$getsockname_socklen_type_found" in
130*2b15cb3dSCy Schubert     no)
131*2b15cb3dSCy Schubert	ntp_cv_getsockname_socklen_type='socklen_t'
132*2b15cb3dSCy Schubert    esac
133*2b15cb3dSCy Schubert    AS_UNSET([getsockname_arg2])
134*2b15cb3dSCy Schubert    AS_UNSET([getsockname_socklen_type_found])
135*2b15cb3dSCy Schubert    ]
136*2b15cb3dSCy Schubert)
137*2b15cb3dSCy SchubertAC_DEFINE_UNQUOTED([GETSOCKNAME_SOCKLEN_TYPE],
138*2b15cb3dSCy Schubert		   [$ntp_cv_getsockname_socklen_type],
139*2b15cb3dSCy Schubert		   [What is getsockname()'s socklen type?])
140*2b15cb3dSCy Schubert
141*2b15cb3dSCy SchubertAC_CACHE_CHECK(
142*2b15cb3dSCy Schubert    [struct sockaddr for sa_len],
143*2b15cb3dSCy Schubert    [isc_cv_platform_havesalen],
144*2b15cb3dSCy Schubert    [AC_COMPILE_IFELSE(
145*2b15cb3dSCy Schubert	[AC_LANG_PROGRAM(
146*2b15cb3dSCy Schubert	    [[
147*2b15cb3dSCy Schubert		#include <sys/types.h>
148*2b15cb3dSCy Schubert		#include <sys/socket.h>
149*2b15cb3dSCy Schubert	    ]],
150*2b15cb3dSCy Schubert	    [[
151*2b15cb3dSCy Schubert		extern struct sockaddr *ps;
152*2b15cb3dSCy Schubert		return ps->sa_len;
153*2b15cb3dSCy Schubert	    ]]
154*2b15cb3dSCy Schubert	)],
155*2b15cb3dSCy Schubert	[isc_cv_platform_havesalen=yes],
156*2b15cb3dSCy Schubert	[isc_cv_platform_havesalen=no]
157*2b15cb3dSCy Schubert    )]
158*2b15cb3dSCy Schubert)
159*2b15cb3dSCy Schubertcase "$isc_cv_platform_havesalen" in
160*2b15cb3dSCy Schubert yes)
161*2b15cb3dSCy Schubert    AC_DEFINE([ISC_PLATFORM_HAVESALEN], [1],
162*2b15cb3dSCy Schubert	 [struct sockaddr has sa_len?])
163*2b15cb3dSCy Schubertesac
164*2b15cb3dSCy Schubert
165*2b15cb3dSCy SchubertAC_ARG_ENABLE(
166*2b15cb3dSCy Schubert    [ipv6],
167*2b15cb3dSCy Schubert    [AS_HELP_STRING(
168*2b15cb3dSCy Schubert	[--enable-ipv6],
169*2b15cb3dSCy Schubert	[s use IPv6?]
170*2b15cb3dSCy Schubert    )]
171*2b15cb3dSCy Schubert)
172*2b15cb3dSCy Schubert
173*2b15cb3dSCy Schubertcase "$enable_ipv6" in
174*2b15cb3dSCy Schubert yes|''|autodetect)
175*2b15cb3dSCy Schubert    case "$host" in
176*2b15cb3dSCy Schubert     powerpc-ibm-aix4*)
177*2b15cb3dSCy Schubert	;;
178*2b15cb3dSCy Schubert     *)
179*2b15cb3dSCy Schubert	AC_DEFINE([WANT_IPV6], [1], [configure --enable-ipv6])
180*2b15cb3dSCy Schubert	;;
181*2b15cb3dSCy Schubert    esac
182*2b15cb3dSCy Schubert    ;;
183*2b15cb3dSCy Schubert no)
184*2b15cb3dSCy Schubert    ;;
185*2b15cb3dSCy Schubertesac
186*2b15cb3dSCy Schubert
187*2b15cb3dSCy Schubert
188*2b15cb3dSCy Schubertdnl [Bug 1984] ntp/libisc fails to compile on OS X 10.7 (Lion)
189*2b15cb3dSCy Schubertcase "$host" in
190*2b15cb3dSCy Schubert *-*-darwin*)
191*2b15cb3dSCy Schubert    AC_DEFINE([__APPLE_USE_RFC_3542], [1], [Are we _special_?])
192*2b15cb3dSCy Schubertesac
193*2b15cb3dSCy Schubert
194*2b15cb3dSCy Schubert
195*2b15cb3dSCy SchubertAC_CACHE_CHECK(
196*2b15cb3dSCy Schubert    [for IPv6 structures],
197*2b15cb3dSCy Schubert    [isc_cv_found_ipv6],
198*2b15cb3dSCy Schubert    [AC_COMPILE_IFELSE(
199*2b15cb3dSCy Schubert	[AC_LANG_PROGRAM(
200*2b15cb3dSCy Schubert	    [[
201*2b15cb3dSCy Schubert		#include <sys/types.h>
202*2b15cb3dSCy Schubert		#include <sys/socket.h>
203*2b15cb3dSCy Schubert		#include <netinet/in.h>
204*2b15cb3dSCy Schubert	    ]],
205*2b15cb3dSCy Schubert	    [[
206*2b15cb3dSCy Schubert		struct sockaddr_in6 sin6;
207*2b15cb3dSCy Schubert	    ]]
208*2b15cb3dSCy Schubert	)],
209*2b15cb3dSCy Schubert	[isc_cv_found_ipv6=yes],
210*2b15cb3dSCy Schubert	[isc_cv_found_ipv6=no]
211*2b15cb3dSCy Schubert    )]
212*2b15cb3dSCy Schubert)
213*2b15cb3dSCy Schubert
214*2b15cb3dSCy Schubert#
215*2b15cb3dSCy Schubert# See whether IPv6 support is provided via a Kame add-on.
216*2b15cb3dSCy Schubert# This is done before other IPv6 linking tests so LIBS is properly set.
217*2b15cb3dSCy Schubert#
218*2b15cb3dSCy SchubertAC_MSG_CHECKING([for Kame IPv6 support])
219*2b15cb3dSCy SchubertAC_ARG_WITH(
220*2b15cb3dSCy Schubert    [kame],
221*2b15cb3dSCy Schubert    [AS_HELP_STRING(
222*2b15cb3dSCy Schubert	[--with-kame],
223*2b15cb3dSCy Schubert	[- =/usr/local/v6]
224*2b15cb3dSCy Schubert    )],
225*2b15cb3dSCy Schubert    [use_kame="$withval"],
226*2b15cb3dSCy Schubert    [use_kame="no"]
227*2b15cb3dSCy Schubert)
228*2b15cb3dSCy Schubertcase "$use_kame" in
229*2b15cb3dSCy Schubert no)
230*2b15cb3dSCy Schubert    ;;
231*2b15cb3dSCy Schubert yes)
232*2b15cb3dSCy Schubert    kame_path=/usr/local/v6
233*2b15cb3dSCy Schubert    ;;
234*2b15cb3dSCy Schubert *)
235*2b15cb3dSCy Schubert    kame_path="$use_kame"
236*2b15cb3dSCy Schubert    ;;
237*2b15cb3dSCy Schubertesac
238*2b15cb3dSCy Schubertcase "$use_kame" in
239*2b15cb3dSCy Schubert no)
240*2b15cb3dSCy Schubert    AC_MSG_RESULT([no])
241*2b15cb3dSCy Schubert    ;;
242*2b15cb3dSCy Schubert *)
243*2b15cb3dSCy Schubert    if test -f $kame_path/lib/libinet6.a; then
244*2b15cb3dSCy Schubert	AC_MSG_RESULT([$kame_path/lib/libinet6.a])
245*2b15cb3dSCy Schubert	LIBS="-L$kame_path/lib -linet6 $LIBS"
246*2b15cb3dSCy Schubert    else
247*2b15cb3dSCy Schubert	AC_MSG_ERROR([$kame_path/lib/libinet6.a not found.
248*2b15cb3dSCy Schubert
249*2b15cb3dSCy SchubertPlease choose the proper path with the following command:
250*2b15cb3dSCy Schubert
251*2b15cb3dSCy Schubert    configure --with-kame=PATH
252*2b15cb3dSCy Schubert])
253*2b15cb3dSCy Schubert    fi
254*2b15cb3dSCy Schubert    ;;
255*2b15cb3dSCy Schubertesac
256*2b15cb3dSCy Schubert
257*2b15cb3dSCy Schubert#
258*2b15cb3dSCy Schubert# Whether netinet6/in6.h is needed has to be defined in isc/platform.h.
259*2b15cb3dSCy Schubert# Including it on Kame-using platforms is very bad, though, because
260*2b15cb3dSCy Schubert# Kame uses #error against direct inclusion.   So include it on only
261*2b15cb3dSCy Schubert# the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1.
262*2b15cb3dSCy Schubert# This is done before the in6_pktinfo check because that's what
263*2b15cb3dSCy Schubert# netinet6/in6.h is needed for.
264*2b15cb3dSCy Schubert#
265*2b15cb3dSCy Schubertcase "$host" in
266*2b15cb3dSCy Schubert *-bsdi4.[[01]]*)
267*2b15cb3dSCy Schubert    AC_DEFINE([ISC_PLATFORM_NEEDNETINET6IN6H], [1],
268*2b15cb3dSCy Schubert	[Do we need netinet6/in6.h?])
269*2b15cb3dSCy Schubert    isc_netinet6in6_hack="#include <netinet6/in6.h>"
270*2b15cb3dSCy Schubert    ;;
271*2b15cb3dSCy Schubert *)
272*2b15cb3dSCy Schubert    isc_netinet6in6_hack=""
273*2b15cb3dSCy Schubert    ;;
274*2b15cb3dSCy Schubertesac
275*2b15cb3dSCy Schubert
276*2b15cb3dSCy Schubert#
277*2b15cb3dSCy Schubert# This is similar to the netinet6/in6.h issue.
278*2b15cb3dSCy Schubert#
279*2b15cb3dSCy Schubertcase "$host" in
280*2b15cb3dSCy Schubert *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
281*2b15cb3dSCy Schubert    AC_DEFINE([ISC_PLATFORM_FIXIN6ISADDR], [1],
282*2b15cb3dSCy Schubert	[Do we need to fix in6isaddr?])
283*2b15cb3dSCy Schubert    isc_netinetin6_hack="#include <netinet/in6.h>"
284*2b15cb3dSCy Schubert    ;;
285*2b15cb3dSCy Schubert *)
286*2b15cb3dSCy Schubert    isc_netinetin6_hack=""
287*2b15cb3dSCy Schubert    ;;
288*2b15cb3dSCy Schubertesac
289*2b15cb3dSCy Schubert
290*2b15cb3dSCy Schubert
291*2b15cb3dSCy Schubertcase "$isc_cv_found_ipv6" in
292*2b15cb3dSCy Schubert yes)
293*2b15cb3dSCy Schubert    AC_DEFINE([ISC_PLATFORM_HAVEIPV6], [1], [have IPv6?])
294*2b15cb3dSCy Schubert    AC_CACHE_CHECK(
295*2b15cb3dSCy Schubert	[for in6_pktinfo],
296*2b15cb3dSCy Schubert	[isc_cv_have_in6_pktinfo],
297*2b15cb3dSCy Schubert	[AC_COMPILE_IFELSE(
298*2b15cb3dSCy Schubert	    [AC_LANG_PROGRAM(
299*2b15cb3dSCy Schubert		[[
300*2b15cb3dSCy Schubert		    #include <sys/types.h>
301*2b15cb3dSCy Schubert		    #include <sys/socket.h>
302*2b15cb3dSCy Schubert		    #include <netinet/in.h>
303*2b15cb3dSCy Schubert		    $isc_netinetin6_hack
304*2b15cb3dSCy Schubert		    $isc_netinet6in6_hack
305*2b15cb3dSCy Schubert		]],
306*2b15cb3dSCy Schubert		[[
307*2b15cb3dSCy Schubert		    struct in6_pktinfo xyzzy;
308*2b15cb3dSCy Schubert		]]
309*2b15cb3dSCy Schubert	    )],
310*2b15cb3dSCy Schubert	    [isc_cv_have_in6_pktinfo=yes],
311*2b15cb3dSCy Schubert	    [isc_cv_have_in6_pktinfo=no]
312*2b15cb3dSCy Schubert	)]
313*2b15cb3dSCy Schubert    )
314*2b15cb3dSCy Schubert    case "$isc_cv_have_in6_pktinfo" in
315*2b15cb3dSCy Schubert     yes)
316*2b15cb3dSCy Schubert	AC_DEFINE([ISC_PLATFORM_HAVEIN6PKTINFO], [1],
317*2b15cb3dSCy Schubert		[have struct in6_pktinfo?])
318*2b15cb3dSCy Schubert    esac
319*2b15cb3dSCy Schubert
320*2b15cb3dSCy Schubert
321*2b15cb3dSCy Schubert    # HMS: Use HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID instead?
322*2b15cb3dSCy Schubert    AC_CACHE_CHECK(
323*2b15cb3dSCy Schubert	[for sockaddr_in6.sin6_scope_id],
324*2b15cb3dSCy Schubert	[isc_cv_have_sin6_scope_id],
325*2b15cb3dSCy Schubert	[AC_COMPILE_IFELSE(
326*2b15cb3dSCy Schubert	    [AC_LANG_PROGRAM(
327*2b15cb3dSCy Schubert		[[
328*2b15cb3dSCy Schubert		    #include <sys/types.h>
329*2b15cb3dSCy Schubert		    #include <sys/socket.h>
330*2b15cb3dSCy Schubert		    #include <netinet/in.h>
331*2b15cb3dSCy Schubert		    $isc_netinetin6_hack
332*2b15cb3dSCy Schubert		    $isc_netinet6in6_hack
333*2b15cb3dSCy Schubert		]],
334*2b15cb3dSCy Schubert		[[
335*2b15cb3dSCy Schubert		    struct sockaddr_in6 xyzzy;
336*2b15cb3dSCy Schubert		    xyzzy.sin6_scope_id = 0;
337*2b15cb3dSCy Schubert		]]
338*2b15cb3dSCy Schubert	    )],
339*2b15cb3dSCy Schubert	    [isc_cv_have_sin6_scope_id=yes],
340*2b15cb3dSCy Schubert	    [isc_cv_have_sin6_scope_id=no]
341*2b15cb3dSCy Schubert	)]
342*2b15cb3dSCy Schubert    )
343*2b15cb3dSCy Schubert
344*2b15cb3dSCy Schubert    case "$isc_cv_have_sin6_scope_id" in
345*2b15cb3dSCy Schubert     yes)
346*2b15cb3dSCy Schubert	AC_DEFINE([ISC_PLATFORM_HAVESCOPEID], [1], [sin6_scope_id?])
347*2b15cb3dSCy Schubert    esac
348*2b15cb3dSCy Schubertesac
349*2b15cb3dSCy Schubert
350*2b15cb3dSCy Schubert
351*2b15cb3dSCy Schubert# We need this check run even without isc_cv_found_ipv6=yes
352*2b15cb3dSCy Schubert
353*2b15cb3dSCy SchubertAC_CACHE_CHECK(
354*2b15cb3dSCy Schubert    [for in6addr_any],
355*2b15cb3dSCy Schubert    [isc_cv_in6addr_any_links],
356*2b15cb3dSCy Schubert    [
357*2b15cb3dSCy Schubert	SAVED_LIBS="$LIBS"
358*2b15cb3dSCy Schubert	LIBS="$LDADD_LIBNTP $LIBS"
359*2b15cb3dSCy Schubert	AC_LINK_IFELSE(
360*2b15cb3dSCy Schubert	    [AC_LANG_PROGRAM(
361*2b15cb3dSCy Schubert		AC_INCLUDES_DEFAULT [[
362*2b15cb3dSCy Schubert		    #include <sys/socket.h>
363*2b15cb3dSCy Schubert		    #include <netinet/in.h>
364*2b15cb3dSCy Schubert		    $isc_netinetin6_hack
365*2b15cb3dSCy Schubert		    $isc_netinet6in6_hack
366*2b15cb3dSCy Schubert		]],
367*2b15cb3dSCy Schubert		[[
368*2b15cb3dSCy Schubert		    printf("%x", in6addr_any.s6_addr[15]);
369*2b15cb3dSCy Schubert		]]
370*2b15cb3dSCy Schubert	    )],
371*2b15cb3dSCy Schubert	    [isc_cv_in6addr_any_links=yes],
372*2b15cb3dSCy Schubert	    [isc_cv_in6addr_any_links=no]
373*2b15cb3dSCy Schubert	)
374*2b15cb3dSCy Schubert	LIBS="$SAVED_LIBS"
375*2b15cb3dSCy Schubert	AS_UNSET([SAVED_LIBS])
376*2b15cb3dSCy Schubert    ]
377*2b15cb3dSCy Schubert)
378*2b15cb3dSCy Schubert
379*2b15cb3dSCy Schubertcase "$isc_cv_in6addr_any_links" in
380*2b15cb3dSCy Schubert no)
381*2b15cb3dSCy Schubert    AC_DEFINE([ISC_PLATFORM_NEEDIN6ADDRANY], [1], [missing in6addr_any?])
382*2b15cb3dSCy Schubertesac
383*2b15cb3dSCy Schubert
384*2b15cb3dSCy Schubert
385*2b15cb3dSCy SchubertAC_CACHE_CHECK(
386*2b15cb3dSCy Schubert    [for struct if_laddrconf],
387*2b15cb3dSCy Schubert    [isc_cv_struct_if_laddrconf],
388*2b15cb3dSCy Schubert    [AC_COMPILE_IFELSE(
389*2b15cb3dSCy Schubert	[AC_LANG_PROGRAM(
390*2b15cb3dSCy Schubert	    [[
391*2b15cb3dSCy Schubert		#include <sys/types.h>
392*2b15cb3dSCy Schubert		#include <net/if6.h>
393*2b15cb3dSCy Schubert	    ]],
394*2b15cb3dSCy Schubert	    [[
395*2b15cb3dSCy Schubert		struct if_laddrconf a;
396*2b15cb3dSCy Schubert	    ]]
397*2b15cb3dSCy Schubert	)],
398*2b15cb3dSCy Schubert	[isc_cv_struct_if_laddrconf=yes],
399*2b15cb3dSCy Schubert	[isc_cv_struct_if_laddrconf=no]
400*2b15cb3dSCy Schubert    )]
401*2b15cb3dSCy Schubert)
402*2b15cb3dSCy Schubert
403*2b15cb3dSCy Schubertcase "$isc_cv_struct_if_laddrconf" in
404*2b15cb3dSCy Schubert yes)
405*2b15cb3dSCy Schubert    AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1],
406*2b15cb3dSCy Schubert	[have struct if_laddrconf?])
407*2b15cb3dSCy Schubertesac
408*2b15cb3dSCy Schubert
409*2b15cb3dSCy SchubertAC_CACHE_CHECK(
410*2b15cb3dSCy Schubert    [for struct if_laddrreq],
411*2b15cb3dSCy Schubert    isc_cv_struct_if_laddrreq,
412*2b15cb3dSCy Schubert    [AC_COMPILE_IFELSE(
413*2b15cb3dSCy Schubert	[AC_LANG_PROGRAM(
414*2b15cb3dSCy Schubert	    [[
415*2b15cb3dSCy Schubert		#include <sys/types.h>
416*2b15cb3dSCy Schubert		#include <net/if6.h>
417*2b15cb3dSCy Schubert	    ]],
418*2b15cb3dSCy Schubert	    [[
419*2b15cb3dSCy Schubert		struct if_laddrreq a;
420*2b15cb3dSCy Schubert	    ]]
421*2b15cb3dSCy Schubert	)],
422*2b15cb3dSCy Schubert	[isc_cv_struct_if_laddrreq=yes],
423*2b15cb3dSCy Schubert	[isc_cv_struct_if_laddrreq=no]
424*2b15cb3dSCy Schubert    )]
425*2b15cb3dSCy Schubert)
426*2b15cb3dSCy Schubert
427*2b15cb3dSCy Schubertcase "$isc_cv_struct_if_laddrreq" in
428*2b15cb3dSCy Schubert yes)
429*2b15cb3dSCy Schubert    AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1],
430*2b15cb3dSCy Schubert	[have struct if_laddrreq?])
431*2b15cb3dSCy Schubertesac
432*2b15cb3dSCy Schubert
433*2b15cb3dSCy SchubertAC_CACHE_CHECK(
434*2b15cb3dSCy Schubert    [for multicast IP support],
435*2b15cb3dSCy Schubert    [ntp_cv_multicast],
436*2b15cb3dSCy Schubert    [
437*2b15cb3dSCy Schubert	ntp_cv_multicast=no
438*2b15cb3dSCy Schubert	case "$host" in
439*2b15cb3dSCy Schubert	 i386-sequent-sysv4)
440*2b15cb3dSCy Schubert	    ;;
441*2b15cb3dSCy Schubert	 *)
442*2b15cb3dSCy Schubert	    AC_COMPILE_IFELSE(
443*2b15cb3dSCy Schubert		[AC_LANG_PROGRAM(
444*2b15cb3dSCy Schubert		    [[
445*2b15cb3dSCy Schubert			#ifdef HAVE_NETINET_IN_H
446*2b15cb3dSCy Schubert			# include <netinet/in.h>
447*2b15cb3dSCy Schubert			#endif
448*2b15cb3dSCy Schubert		    ]],
449*2b15cb3dSCy Schubert		    [[
450*2b15cb3dSCy Schubert			struct ip_mreq ipmr;
451*2b15cb3dSCy Schubert			ipmr.imr_interface.s_addr = 0;
452*2b15cb3dSCy Schubert		    ]]
453*2b15cb3dSCy Schubert		)],
454*2b15cb3dSCy Schubert		[ntp_cv_multicast=yes],
455*2b15cb3dSCy Schubert		[]
456*2b15cb3dSCy Schubert	    )
457*2b15cb3dSCy Schubert	    ;;
458*2b15cb3dSCy Schubert	esac
459*2b15cb3dSCy Schubert    ]
460*2b15cb3dSCy Schubert)
461*2b15cb3dSCy Schubertcase "$ntp_cv_multicast" in
462*2b15cb3dSCy Schubert yes)
463*2b15cb3dSCy Schubert    AC_DEFINE([MCAST], [1], [Does the target support multicast IP?])
464*2b15cb3dSCy Schubert    AC_CACHE_CHECK(
465*2b15cb3dSCy Schubert	[arg type needed for setsockopt() IP*_MULTICAST_LOOP],
466*2b15cb3dSCy Schubert	[ntp_cv_typeof_ip_multicast_loop],
467*2b15cb3dSCy Schubert	[
468*2b15cb3dSCy Schubert	    case "$host" in
469*2b15cb3dSCy Schubert	     *-*-netbsd*|*-*-*linux*)
470*2b15cb3dSCy Schubert		ntp_cv_typeof_ip_multicast_loop=u_int
471*2b15cb3dSCy Schubert		;;
472*2b15cb3dSCy Schubert	     *)
473*2b15cb3dSCy Schubert		ntp_cv_typeof_ip_multicast_loop=u_char
474*2b15cb3dSCy Schubert		;;
475*2b15cb3dSCy Schubert	    esac
476*2b15cb3dSCy Schubert	]
477*2b15cb3dSCy Schubert    )
478*2b15cb3dSCy Schubert    AC_DEFINE_UNQUOTED([TYPEOF_IP_MULTICAST_LOOP],
479*2b15cb3dSCy Schubert	[$ntp_cv_typeof_ip_multicast_loop],
480*2b15cb3dSCy Schubert	[What type to use for setsockopt])
481*2b15cb3dSCy Schubertesac
482*2b15cb3dSCy Schubert
483*2b15cb3dSCy SchubertAC_ARG_ENABLE(
484*2b15cb3dSCy Schubert    [getifaddrs],
485*2b15cb3dSCy Schubert    [AS_HELP_STRING(
486*2b15cb3dSCy Schubert	[--enable-getifaddrs],
487*2b15cb3dSCy Schubert	[+ Enable the use of getifaddrs() [[yes|no]].]
488*2b15cb3dSCy Schubert    )],
489*2b15cb3dSCy Schubert    [want_getifaddrs="$enableval"],
490*2b15cb3dSCy Schubert    [want_getifaddrs="yes"]
491*2b15cb3dSCy Schubert)
492*2b15cb3dSCy Schubert
493*2b15cb3dSCy Schubertcase $want_getifaddrs in
494*2b15cb3dSCy Schubert glibc)
495*2b15cb3dSCy Schubert    AC_MSG_WARN([--enable-getifaddrs=glibc is no longer required])
496*2b15cb3dSCy Schubertesac
497*2b15cb3dSCy Schubertcase $want_getifaddrs in
498*2b15cb3dSCy Schubert no)
499*2b15cb3dSCy Schubert    ;;
500*2b15cb3dSCy Schubert *)
501*2b15cb3dSCy Schubert    SAVED_LIBS="$LIBS"
502*2b15cb3dSCy Schubert    LIBS="$LDADD_LIBNTP $LIBS"
503*2b15cb3dSCy Schubert    AC_CHECK_FUNCS([getifaddrs])
504*2b15cb3dSCy Schubert    LIBS="$SAVED_LIBS"
505*2b15cb3dSCy Schubert    AS_UNSET([SAVED_LIBS])
506*2b15cb3dSCy Schubert    ;;
507*2b15cb3dSCy Schubertesac
508*2b15cb3dSCy Schubert
509*2b15cb3dSCy Schubert#
510*2b15cb3dSCy Schubert# Check for if_nametoindex() for IPv6 scoped addresses support
511*2b15cb3dSCy Schubert#
512*2b15cb3dSCy Schubertcase "$host" in
513*2b15cb3dSCy Schubert *-hp-hpux*)
514*2b15cb3dSCy Schubert    AC_SEARCH_LIBS([if_nametoindex], [ipv6])
515*2b15cb3dSCy Schubertesac
516*2b15cb3dSCy SchubertSAVED_LIBS="$LIBS"
517*2b15cb3dSCy SchubertLIBS="$LDADD_LIBNTP $LIBS"
518*2b15cb3dSCy SchubertAC_CHECK_FUNCS([if_nametoindex])
519*2b15cb3dSCy SchubertLIBS="$SAVED_LIBS"
520*2b15cb3dSCy SchubertAS_UNSET([SAVED_LIBS])
521*2b15cb3dSCy Schubertcase "$ac_cv_func_if_nametoindex" in
522*2b15cb3dSCy Schubert yes)
523*2b15cb3dSCy Schubert	AC_DEFINE([ISC_PLATFORM_HAVEIFNAMETOINDEX], [1],
524*2b15cb3dSCy Schubert	    [ISC: do we have if_nametoindex()?])
525*2b15cb3dSCy Schubertesac
526*2b15cb3dSCy Schubert
527*2b15cb3dSCy Schubert])dnl
528*2b15cb3dSCy Schubertdnl ======================================================================
529