1275970Scydnl ###################################################################### 2275970Scydnl Common IPv6 detection for NTP configure.ac files 3275970ScyAC_DEFUN([NTP_IPV6], [ 4275970Scy 5275970ScyAC_CACHE_CHECK( 6275970Scy [for struct sockaddr_storage], 7275970Scy [ntp_cv_sockaddr_storage], 8275970Scy [AC_COMPILE_IFELSE( 9275970Scy [AC_LANG_PROGRAM( 10275970Scy [[ 11275970Scy #ifdef HAVE_SYS_TYPES_H 12275970Scy # include <sys/types.h> 13275970Scy #endif 14275970Scy #ifdef HAVE_SYS_SOCKET_H 15275970Scy # include <sys/socket.h> 16275970Scy #endif 17275970Scy #ifdef HAVE_NETINET_IN_H 18275970Scy # include <netinet/in.h> 19275970Scy #endif 20275970Scy ]], 21275970Scy [[ 22275970Scy struct sockaddr_storage n; 23275970Scy ]] 24275970Scy )], 25275970Scy [ntp_cv_sockaddr_storage=yes], 26275970Scy [ntp_cv_sockaddr_storage=no] 27275970Scy )] 28275970Scy) 29275970Scycase "$ntp_cv_sockaddr_storage" in 30275970Scy yes) 31275970Scy AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], [1], 32275970Scy [Does a system header define struct sockaddr_storage?]) 33275970Scy AC_CACHE_CHECK( 34275970Scy [for sockaddr_storage.__ss_family], 35275970Scy [ntp_cv_have___ss_family], 36275970Scy [AC_COMPILE_IFELSE( 37275970Scy [AC_LANG_PROGRAM( 38275970Scy [[ 39275970Scy #ifdef HAVE_SYS_TYPES_H 40275970Scy # include <sys/types.h> 41275970Scy #endif 42275970Scy #ifdef HAVE_SYS_SOCKET_H 43275970Scy # include <sys/socket.h> 44275970Scy #endif 45275970Scy #ifdef HAVE_NETINET_IN_H 46275970Scy # include <netinet/in.h> 47275970Scy #endif 48275970Scy ]], 49275970Scy [[ 50275970Scy struct sockaddr_storage s; 51275970Scy s.__ss_family = 1; 52275970Scy ]] 53275970Scy )], 54275970Scy [ntp_cv_have___ss_family=yes], 55275970Scy [ntp_cv_have___ss_family=no] 56275970Scy )] 57275970Scy ) 58275970Scy case "$ntp_cv_have___ss_family" in 59275970Scy yes) 60275970Scy AC_DEFINE([HAVE___SS_FAMILY_IN_SS], [1], 61275970Scy [Does struct sockaddr_storage have __ss_family?]) 62275970Scy esac 63275970Scy AH_VERBATIM( 64275970Scy [HAVE___SS_FAMILY_IN_SS_VERBATIM], 65275970Scy [ 66275970Scy /* Handle sockaddr_storage.__ss_family */ 67275970Scy #ifdef HAVE___SS_FAMILY_IN_SS 68275970Scy # define ss_family __ss_family 69275970Scy #endif /* HAVE___SS_FAMILY_IN_SS */ 70275970Scy ] 71275970Scy ) 72275970Scyesac 73275970Scy 74275970Scy 75275970Scy# 76275970Scy# Look for in_port_t. 77275970Scy# 78275970ScyAC_CACHE_CHECK( 79275970Scy [for in_port_t], 80275970Scy [isc_cv_have_in_port_t], 81275970Scy [AC_COMPILE_IFELSE( 82275970Scy [AC_LANG_PROGRAM( 83275970Scy [[ 84275970Scy #include <sys/types.h> 85275970Scy #include <netinet/in.h> 86275970Scy ]], 87275970Scy [[ 88275970Scy in_port_t port = 25; 89275970Scy return (0); 90275970Scy ]] 91275970Scy )], 92275970Scy [isc_cv_have_in_port_t=yes], 93275970Scy [isc_cv_have_in_port_t=no] 94275970Scy )] 95275970Scy) 96275970Scycase "$isc_cv_have_in_port_t" in 97275970Scy no) 98275970Scy AC_DEFINE([ISC_PLATFORM_NEEDPORTT], [1], 99275970Scy [Declare in_port_t?]) 100275970Scyesac 101275970Scy 102275970ScyAC_CACHE_CHECK( 103275970Scy [type of socklen arg for getsockname()], 104275970Scy [ntp_cv_getsockname_socklen_type], 105275970Scy [ 106275970Scy getsockname_socklen_type_found=no 107275970Scy for getsockname_arg2 in 'struct sockaddr *' 'void *'; do 108275970Scy for ntp_cv_getsockname_socklen_type in 'socklen_t' 'size_t' 'unsigned int' 'int'; do 109275970Scy AC_COMPILE_IFELSE( 110275970Scy [AC_LANG_PROGRAM( 111275970Scy [[ 112275970Scy #ifdef HAVE_SYS_TYPES_H 113275970Scy # include <sys/types.h> 114275970Scy #endif 115275970Scy #ifdef HAVE_SYS_SOCKET_H 116275970Scy # include <sys/socket.h> 117275970Scy #endif 118275970Scy ]], [[ 119275970Scy extern 120275970Scy getsockname(int, $getsockname_arg2, 121275970Scy $ntp_cv_getsockname_socklen_type *); 122275970Scy ]] 123275970Scy )], 124275970Scy [getsockname_socklen_type_found=yes ; break 2], 125275970Scy [] 126275970Scy ) 127275970Scy done 128275970Scy done 129275970Scy case "$getsockname_socklen_type_found" in 130275970Scy no) 131275970Scy ntp_cv_getsockname_socklen_type='socklen_t' 132275970Scy esac 133275970Scy AS_UNSET([getsockname_arg2]) 134275970Scy AS_UNSET([getsockname_socklen_type_found]) 135275970Scy ] 136275970Scy) 137275970ScyAC_DEFINE_UNQUOTED([GETSOCKNAME_SOCKLEN_TYPE], 138275970Scy [$ntp_cv_getsockname_socklen_type], 139275970Scy [What is getsockname()'s socklen type?]) 140275970Scy 141275970ScyAC_CACHE_CHECK( 142275970Scy [struct sockaddr for sa_len], 143275970Scy [isc_cv_platform_havesalen], 144275970Scy [AC_COMPILE_IFELSE( 145275970Scy [AC_LANG_PROGRAM( 146275970Scy [[ 147275970Scy #include <sys/types.h> 148275970Scy #include <sys/socket.h> 149275970Scy ]], 150275970Scy [[ 151275970Scy extern struct sockaddr *ps; 152275970Scy return ps->sa_len; 153275970Scy ]] 154275970Scy )], 155275970Scy [isc_cv_platform_havesalen=yes], 156275970Scy [isc_cv_platform_havesalen=no] 157275970Scy )] 158275970Scy) 159275970Scycase "$isc_cv_platform_havesalen" in 160275970Scy yes) 161275970Scy AC_DEFINE([ISC_PLATFORM_HAVESALEN], [1], 162275970Scy [struct sockaddr has sa_len?]) 163275970Scyesac 164275970Scy 165275970ScyAC_ARG_ENABLE( 166275970Scy [ipv6], 167275970Scy [AS_HELP_STRING( 168275970Scy [--enable-ipv6], 169275970Scy [s use IPv6?] 170275970Scy )] 171275970Scy) 172275970Scy 173275970Scycase "$enable_ipv6" in 174275970Scy yes|''|autodetect) 175275970Scy case "$host" in 176275970Scy powerpc-ibm-aix4*) 177275970Scy ;; 178275970Scy *) 179275970Scy AC_DEFINE([WANT_IPV6], [1], [configure --enable-ipv6]) 180275970Scy ;; 181275970Scy esac 182275970Scy ;; 183275970Scy no) 184275970Scy ;; 185275970Scyesac 186275970Scy 187275970Scy 188275970Scydnl [Bug 1984] ntp/libisc fails to compile on OS X 10.7 (Lion) 189275970Scycase "$host" in 190275970Scy *-*-darwin*) 191275970Scy AC_DEFINE([__APPLE_USE_RFC_3542], [1], [Are we _special_?]) 192275970Scyesac 193275970Scy 194275970Scy 195275970ScyAC_CACHE_CHECK( 196275970Scy [for IPv6 structures], 197275970Scy [isc_cv_found_ipv6], 198275970Scy [AC_COMPILE_IFELSE( 199275970Scy [AC_LANG_PROGRAM( 200275970Scy [[ 201275970Scy #include <sys/types.h> 202275970Scy #include <sys/socket.h> 203275970Scy #include <netinet/in.h> 204275970Scy ]], 205275970Scy [[ 206275970Scy struct sockaddr_in6 sin6; 207275970Scy ]] 208275970Scy )], 209275970Scy [isc_cv_found_ipv6=yes], 210275970Scy [isc_cv_found_ipv6=no] 211275970Scy )] 212275970Scy) 213275970Scy 214275970Scy# 215275970Scy# See whether IPv6 support is provided via a Kame add-on. 216275970Scy# This is done before other IPv6 linking tests so LIBS is properly set. 217275970Scy# 218275970ScyAC_MSG_CHECKING([for Kame IPv6 support]) 219275970ScyAC_ARG_WITH( 220275970Scy [kame], 221275970Scy [AS_HELP_STRING( 222275970Scy [--with-kame], 223275970Scy [- =/usr/local/v6] 224275970Scy )], 225275970Scy [use_kame="$withval"], 226275970Scy [use_kame="no"] 227275970Scy) 228275970Scycase "$use_kame" in 229275970Scy no) 230275970Scy ;; 231275970Scy yes) 232275970Scy kame_path=/usr/local/v6 233275970Scy ;; 234275970Scy *) 235275970Scy kame_path="$use_kame" 236275970Scy ;; 237275970Scyesac 238275970Scycase "$use_kame" in 239275970Scy no) 240275970Scy AC_MSG_RESULT([no]) 241275970Scy ;; 242275970Scy *) 243275970Scy if test -f $kame_path/lib/libinet6.a; then 244275970Scy AC_MSG_RESULT([$kame_path/lib/libinet6.a]) 245275970Scy LIBS="-L$kame_path/lib -linet6 $LIBS" 246275970Scy else 247275970Scy AC_MSG_ERROR([$kame_path/lib/libinet6.a not found. 248275970Scy 249275970ScyPlease choose the proper path with the following command: 250275970Scy 251275970Scy configure --with-kame=PATH 252275970Scy]) 253275970Scy fi 254275970Scy ;; 255275970Scyesac 256275970Scy 257275970Scy# 258275970Scy# Whether netinet6/in6.h is needed has to be defined in isc/platform.h. 259275970Scy# Including it on Kame-using platforms is very bad, though, because 260275970Scy# Kame uses #error against direct inclusion. So include it on only 261275970Scy# the platform that is otherwise broken without it -- BSD/OS 4.0 through 4.1. 262275970Scy# This is done before the in6_pktinfo check because that's what 263275970Scy# netinet6/in6.h is needed for. 264275970Scy# 265275970Scycase "$host" in 266275970Scy *-bsdi4.[[01]]*) 267275970Scy AC_DEFINE([ISC_PLATFORM_NEEDNETINET6IN6H], [1], 268275970Scy [Do we need netinet6/in6.h?]) 269275970Scy isc_netinet6in6_hack="#include <netinet6/in6.h>" 270275970Scy ;; 271275970Scy *) 272275970Scy isc_netinet6in6_hack="" 273275970Scy ;; 274275970Scyesac 275275970Scy 276275970Scy# 277275970Scy# This is similar to the netinet6/in6.h issue. 278275970Scy# 279275970Scycase "$host" in 280275970Scy *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) 281275970Scy AC_DEFINE([ISC_PLATFORM_FIXIN6ISADDR], [1], 282275970Scy [Do we need to fix in6isaddr?]) 283275970Scy isc_netinetin6_hack="#include <netinet/in6.h>" 284275970Scy ;; 285275970Scy *) 286275970Scy isc_netinetin6_hack="" 287275970Scy ;; 288275970Scyesac 289275970Scy 290275970Scy 291275970Scycase "$isc_cv_found_ipv6" in 292275970Scy yes) 293275970Scy AC_DEFINE([ISC_PLATFORM_HAVEIPV6], [1], [have IPv6?]) 294275970Scy AC_CACHE_CHECK( 295275970Scy [for in6_pktinfo], 296275970Scy [isc_cv_have_in6_pktinfo], 297275970Scy [AC_COMPILE_IFELSE( 298275970Scy [AC_LANG_PROGRAM( 299275970Scy [[ 300275970Scy #include <sys/types.h> 301275970Scy #include <sys/socket.h> 302275970Scy #include <netinet/in.h> 303275970Scy $isc_netinetin6_hack 304275970Scy $isc_netinet6in6_hack 305275970Scy ]], 306275970Scy [[ 307275970Scy struct in6_pktinfo xyzzy; 308275970Scy ]] 309275970Scy )], 310275970Scy [isc_cv_have_in6_pktinfo=yes], 311275970Scy [isc_cv_have_in6_pktinfo=no] 312275970Scy )] 313275970Scy ) 314275970Scy case "$isc_cv_have_in6_pktinfo" in 315275970Scy yes) 316275970Scy AC_DEFINE([ISC_PLATFORM_HAVEIN6PKTINFO], [1], 317275970Scy [have struct in6_pktinfo?]) 318275970Scy esac 319275970Scy 320275970Scy 321275970Scy # HMS: Use HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID instead? 322275970Scy AC_CACHE_CHECK( 323275970Scy [for sockaddr_in6.sin6_scope_id], 324275970Scy [isc_cv_have_sin6_scope_id], 325275970Scy [AC_COMPILE_IFELSE( 326275970Scy [AC_LANG_PROGRAM( 327275970Scy [[ 328275970Scy #include <sys/types.h> 329275970Scy #include <sys/socket.h> 330275970Scy #include <netinet/in.h> 331275970Scy $isc_netinetin6_hack 332275970Scy $isc_netinet6in6_hack 333275970Scy ]], 334275970Scy [[ 335275970Scy struct sockaddr_in6 xyzzy; 336275970Scy xyzzy.sin6_scope_id = 0; 337275970Scy ]] 338275970Scy )], 339275970Scy [isc_cv_have_sin6_scope_id=yes], 340275970Scy [isc_cv_have_sin6_scope_id=no] 341275970Scy )] 342275970Scy ) 343275970Scy 344275970Scy case "$isc_cv_have_sin6_scope_id" in 345275970Scy yes) 346275970Scy AC_DEFINE([ISC_PLATFORM_HAVESCOPEID], [1], [sin6_scope_id?]) 347275970Scy esac 348275970Scyesac 349275970Scy 350275970Scy 351275970Scy# We need this check run even without isc_cv_found_ipv6=yes 352275970Scy 353275970ScyAC_CACHE_CHECK( 354275970Scy [for in6addr_any], 355275970Scy [isc_cv_in6addr_any_links], 356275970Scy [ 357275970Scy SAVED_LIBS="$LIBS" 358275970Scy LIBS="$LDADD_LIBNTP $LIBS" 359275970Scy AC_LINK_IFELSE( 360275970Scy [AC_LANG_PROGRAM( 361275970Scy AC_INCLUDES_DEFAULT [[ 362275970Scy #include <sys/socket.h> 363275970Scy #include <netinet/in.h> 364275970Scy $isc_netinetin6_hack 365275970Scy $isc_netinet6in6_hack 366275970Scy ]], 367275970Scy [[ 368275970Scy printf("%x", in6addr_any.s6_addr[15]); 369275970Scy ]] 370275970Scy )], 371275970Scy [isc_cv_in6addr_any_links=yes], 372275970Scy [isc_cv_in6addr_any_links=no] 373275970Scy ) 374275970Scy LIBS="$SAVED_LIBS" 375275970Scy AS_UNSET([SAVED_LIBS]) 376275970Scy ] 377275970Scy) 378275970Scy 379275970Scycase "$isc_cv_in6addr_any_links" in 380275970Scy no) 381275970Scy AC_DEFINE([ISC_PLATFORM_NEEDIN6ADDRANY], [1], [missing in6addr_any?]) 382275970Scyesac 383275970Scy 384275970Scy 385275970ScyAC_CACHE_CHECK( 386275970Scy [for struct if_laddrconf], 387275970Scy [isc_cv_struct_if_laddrconf], 388275970Scy [AC_COMPILE_IFELSE( 389275970Scy [AC_LANG_PROGRAM( 390275970Scy [[ 391275970Scy #include <sys/types.h> 392275970Scy #include <net/if6.h> 393275970Scy ]], 394275970Scy [[ 395275970Scy struct if_laddrconf a; 396275970Scy ]] 397275970Scy )], 398275970Scy [isc_cv_struct_if_laddrconf=yes], 399275970Scy [isc_cv_struct_if_laddrconf=no] 400275970Scy )] 401275970Scy) 402275970Scy 403275970Scycase "$isc_cv_struct_if_laddrconf" in 404275970Scy yes) 405275970Scy AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRCONF], [1], 406275970Scy [have struct if_laddrconf?]) 407275970Scyesac 408275970Scy 409275970ScyAC_CACHE_CHECK( 410275970Scy [for struct if_laddrreq], 411275970Scy isc_cv_struct_if_laddrreq, 412275970Scy [AC_COMPILE_IFELSE( 413275970Scy [AC_LANG_PROGRAM( 414275970Scy [[ 415275970Scy #include <sys/types.h> 416275970Scy #include <net/if6.h> 417275970Scy ]], 418275970Scy [[ 419275970Scy struct if_laddrreq a; 420275970Scy ]] 421275970Scy )], 422275970Scy [isc_cv_struct_if_laddrreq=yes], 423275970Scy [isc_cv_struct_if_laddrreq=no] 424275970Scy )] 425275970Scy) 426275970Scy 427275970Scycase "$isc_cv_struct_if_laddrreq" in 428275970Scy yes) 429275970Scy AC_DEFINE([ISC_PLATFORM_HAVEIF_LADDRREQ], [1], 430275970Scy [have struct if_laddrreq?]) 431275970Scyesac 432275970Scy 433275970ScyAC_CACHE_CHECK( 434275970Scy [for multicast IP support], 435275970Scy [ntp_cv_multicast], 436275970Scy [ 437275970Scy ntp_cv_multicast=no 438275970Scy case "$host" in 439275970Scy i386-sequent-sysv4) 440275970Scy ;; 441275970Scy *) 442275970Scy AC_COMPILE_IFELSE( 443275970Scy [AC_LANG_PROGRAM( 444275970Scy [[ 445275970Scy #ifdef HAVE_NETINET_IN_H 446275970Scy # include <netinet/in.h> 447275970Scy #endif 448275970Scy ]], 449275970Scy [[ 450275970Scy struct ip_mreq ipmr; 451275970Scy ipmr.imr_interface.s_addr = 0; 452275970Scy ]] 453275970Scy )], 454275970Scy [ntp_cv_multicast=yes], 455275970Scy [] 456275970Scy ) 457275970Scy ;; 458275970Scy esac 459275970Scy ] 460275970Scy) 461275970Scycase "$ntp_cv_multicast" in 462275970Scy yes) 463275970Scy AC_DEFINE([MCAST], [1], [Does the target support multicast IP?]) 464275970Scy AC_CACHE_CHECK( 465275970Scy [arg type needed for setsockopt() IP*_MULTICAST_LOOP], 466275970Scy [ntp_cv_typeof_ip_multicast_loop], 467275970Scy [ 468275970Scy case "$host" in 469275970Scy *-*-netbsd*|*-*-*linux*) 470275970Scy ntp_cv_typeof_ip_multicast_loop=u_int 471275970Scy ;; 472275970Scy *) 473275970Scy ntp_cv_typeof_ip_multicast_loop=u_char 474275970Scy ;; 475275970Scy esac 476275970Scy ] 477275970Scy ) 478275970Scy AC_DEFINE_UNQUOTED([TYPEOF_IP_MULTICAST_LOOP], 479275970Scy [$ntp_cv_typeof_ip_multicast_loop], 480275970Scy [What type to use for setsockopt]) 481275970Scyesac 482275970Scy 483275970ScyAC_ARG_ENABLE( 484275970Scy [getifaddrs], 485275970Scy [AS_HELP_STRING( 486275970Scy [--enable-getifaddrs], 487275970Scy [+ Enable the use of getifaddrs() [[yes|no]].] 488275970Scy )], 489275970Scy [want_getifaddrs="$enableval"], 490275970Scy [want_getifaddrs="yes"] 491275970Scy) 492275970Scy 493275970Scycase $want_getifaddrs in 494275970Scy glibc) 495275970Scy AC_MSG_WARN([--enable-getifaddrs=glibc is no longer required]) 496275970Scyesac 497275970Scycase $want_getifaddrs in 498275970Scy no) 499275970Scy ;; 500275970Scy *) 501275970Scy SAVED_LIBS="$LIBS" 502275970Scy LIBS="$LDADD_LIBNTP $LIBS" 503275970Scy AC_CHECK_FUNCS([getifaddrs]) 504275970Scy LIBS="$SAVED_LIBS" 505275970Scy AS_UNSET([SAVED_LIBS]) 506275970Scy ;; 507275970Scyesac 508275970Scy 509275970Scy# 510275970Scy# Check for if_nametoindex() for IPv6 scoped addresses support 511275970Scy# 512275970Scycase "$host" in 513275970Scy *-hp-hpux*) 514275970Scy AC_SEARCH_LIBS([if_nametoindex], [ipv6]) 515275970Scyesac 516275970ScySAVED_LIBS="$LIBS" 517275970ScyLIBS="$LDADD_LIBNTP $LIBS" 518275970ScyAC_CHECK_FUNCS([if_nametoindex]) 519275970ScyLIBS="$SAVED_LIBS" 520275970ScyAS_UNSET([SAVED_LIBS]) 521275970Scycase "$ac_cv_func_if_nametoindex" in 522275970Scy yes) 523275970Scy AC_DEFINE([ISC_PLATFORM_HAVEIFNAMETOINDEX], [1], 524275970Scy [ISC: do we have if_nametoindex()?]) 525275970Scyesac 526275970Scy 527275970Scy])dnl 528275970Scydnl ====================================================================== 529