+* [Bug 1343] lib/isc build breaks on systems without IPv6 headers.
(4.2.5p234-RC) 2009/10/16 Released by Harlan Stenn <stenn@ntp.org>
* [Bug 1339] redux, use unmodified lib/isc/win32/strerror.c and
move #define strerror... to a header not used by lib/isc code.
#
# Look for in_port_t.
#
-AC_MSG_CHECKING([for in_port_t])
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <netinet/in.h>],
-[in_port_t port = 25; return (0);],
- [AC_MSG_RESULT(yes)
- ],
- [AC_MSG_RESULT(no)
- AC_DEFINE(ISC_PLATFORM_NEEDPORTT, 1, [Do we need our own in_port_t?])
- ])
+AC_CACHE_CHECK(
+ [for in_port_t],
+ isc_cv_have_in_port_t,
+ [
+ AC_TRY_COMPILE(
+ [
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ ],
+ [
+ in_port_t port = 25;
+ return (0);
+ ],
+ [isc_cv_have_in_port_t=yes],
+ [isc_cv_have_in_port_t=no]
+ )
+ ]
+)
+case "$isc_cv_have_in_port_t" in
+ no)
+ AC_DEFINE(ISC_PLATFORM_NEEDPORTT, 1, [Declare in_port_t?])
+esac
AC_CACHE_CHECK([for a fallback value for HZ], ac_cv_var_default_hz,
[ac_cv_var_default_hz=100
AC_DEFINE(HAVE_STRUCT_PPSCLOCKEV, 1, [Does a system header define struct ppsclockev?])
fi
-AC_CACHE_CHECK([struct sockaddr for sa_len], ac_cv_struct_sockaddr_has_sa_len,
-[AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/socket.h>],[
-extern struct sockaddr *ps;
-return ps->sa_len;],
- ac_cv_struct_sockaddr_has_sa_len=yes,
- ac_cv_struct_sockaddr_has_sa_len=no)
-])
-if test $ac_cv_struct_sockaddr_has_sa_len = yes; then
- AC_DEFINE(HAVE_SA_LEN_IN_STRUCT_SOCKADDR, 1, [Should be obvious...])
-fi
-
AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage,
[AC_TRY_COMPILE([
#include <sys/types.h>
*/
#include <config.h>
#include <netdb.h>
-/*
- * Don't include any additional IPv6 definitions
- * We are defining our own here.
- */
-#define ISC_IPV6_H 1
#include <isc/net.h>
#include "ntp_types.h"
# define _SS_MAXSIZE 128
# define _SS_ALIGNSIZE (sizeof(ntp_uint64_t))
-# ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+# ifdef ISC_PLATFORM_HAVESALEN
# define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) - sizeof(ntp_u_int8_t))
# define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) - sizeof(ntp_u_int8_t) - \
_SS_PAD1SIZE - _SS_ALIGNSIZE)
# define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(short))
# define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(short) - \
_SS_PAD1SIZE - _SS_ALIGNSIZE)
-# endif /* HAVE_SA_LEN_IN_STRUCT_SOCKADDR */
+# endif /* ISC_PLATFORM_HAVESALEN */
#endif
#ifndef INET6_ADDRSTRLEN
#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
struct sockaddr_storage {
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
ntp_u_int8_t ss_len; /* address length */
ntp_u_int8_t ss_family; /* address family */
#else
#endif
#ifndef ISC_PLATFORM_HAVEIPV6
-/*
- * Definition of some useful macros to handle IP6 addresses
- */
-#ifdef ISC_PLATFORM_NEEDIN6ADDRANY
-#ifdef SYS_WINNT
-#define IN6ADDR_ANY_INIT {{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }}
-#else
-#define IN6ADDR_ANY_INIT \
- {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
-#endif
-#endif
-
-/*
- * IPv6 address
- */
#ifdef SYS_WINNT
-#define in6_addr in_addr6
-#else
-
-struct in6_addr {
- union {
- ntp_u_int8_t __u6_addr8[16];
- ntp_u_int16_t __u6_addr16[8];
- ntp_u_int32_t __u6_addr32[4];
- } __u6_addr; /* 128-bit IP6 address */
-};
-
-#define s6_addr __u6_addr.__u6_addr8
-#endif
-
-#if defined(ISC_PLATFORM_HAVEIPV6) && defined(ISC_PLATFORM_NEEDIN6ADDRANY)
-extern const struct in6_addr in6addr_any;
-#endif
-
-#define SIN6_LEN
-#ifndef HAVE_SOCKADDR_IN6
-struct sockaddr_in6 {
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
- ntp_u_int8_t sin6_len; /* length of this struct(sa_family_t)*/
- ntp_u_int8_t sin6_family; /* AF_INET6 (sa_family_t) */
-#else
- short sin6_family; /* AF_INET6 (sa_family_t) */
-#endif
- ntp_u_int16_t sin6_port; /* Transport layer port # (in_port_t)*/
- ntp_u_int32_t sin6_flowinfo; /* IP6 flow information */
- struct in6_addr sin6_addr; /* IP6 address */
- ntp_u_int32_t sin6_scope_id; /* scope zone index */
-};
-#endif
-
-/*
- * Unspecified
- */
-#ifndef IN6_IS_ADDR_UNSPECIFIED
-#define IN6_IS_ADDR_UNSPECIFIED(a) \
- ((*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
- (*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
- (*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
- (*(const ntp_u_int32_t *)(const void *)(&(a)->s6_addr[12]) == 0))
-#endif
-/*
- * Multicast
- */
-#ifndef IN6_IS_ADDR_MULTICAST
-#define IN6_IS_ADDR_MULTICAST(a) ((a)->s6_addr[0] == 0xff)
-#endif
-/*
- * Unicast link / site local.
- */
-#ifndef IN6_IS_ADDR_LINKLOCAL
-#define IN6_IS_ADDR_LINKLOCAL(a) (\
-(*((u_long *)((a)->s6_addr) ) == 0xfe) && \
-((*((u_long *)((a)->s6_addr) + 1) & 0xc0) == 0x80))
-#endif
-
-#ifndef IN6_IS_ADDR_SITELOCAL
-#define IN6_IS_ADDR_SITELOCAL(a) (\
-(*((u_long *)((a)->s6_addr) ) == 0xfe) && \
-((*((u_long *)((a)->s6_addr) + 1) & 0xc0) == 0xc0))
+# define in6_addr in_addr6
#endif
struct addrinfo {
};
#endif
-#if defined(ISC_PLATFORM_HAVEIPV6) && defined(ISC_PLATFORM_NEEDIN6ADDRANY)
+#if defined(ISC_PLATFORM_NEEDIN6ADDRANY)
extern const struct in6_addr isc_net_in6addrany;
/*%
* Cope with a missing in6addr_any and in6addr_loopback.
#endif /* HAVE_SYSCTLBYNAME */
-#if defined(ISC_PLATFORM_HAVEIPV6)
-# if defined(ISC_PLATFORM_NEEDIN6ADDRANY)
+#if defined(ISC_PLATFORM_NEEDIN6ADDRANY)
const struct in6_addr isc_net_in6addrany = IN6ADDR_ANY_INIT;
-# endif
+#endif
+
+#if defined(ISC_PLATFORM_HAVEIPV6)
# if defined(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK)
const struct in6_addr isc_net_in6addrloop = IN6ADDR_LOOPBACK_INIT;
#define IN6ADDR_LOOPBACK_INIT {{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }}
#endif
-LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_in6addr_any;
-LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_in6addr_loopback;
+LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_net_in6addrany;
+LIBISC_EXTERNAL_DATA extern const struct in6_addr isc_net_in6addrloop;
/*
* Unspecified
#endif
#if _MSC_VER < 1300
-#define in6addr_any isc_in6addr_any
-#define in6addr_loopback isc_in6addr_loopback
+#define in6addr_any isc_net_in6addrany
+#define in6addr_loopback isc_net_in6addrloop
#endif
/*
const struct in6_addr isc_net_in6addrany = IN6ADDR_ANY_INIT;
#endif
+#if defined(ISC_PLATFORM_HAVEIPV6) && defined(ISC_PLATFORM_NEEDIN6ADDRLOOPBACK)
+const struct in6_addr isc_net_in6addrloop = IN6ADDR_LOOPBACK_INIT;
+#endif
+
+
static isc_once_t once = ISC_ONCE_INIT;
static isc_once_t once_ipv6only = ISC_ONCE_INIT;
static isc_once_t once_ipv6pktinfo = ISC_ONCE_INIT;
sockin6->sin6_addr = in6addr_any;
*/
}
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
ai->ai_addr->sa_len = SOCKLEN(ai->ai_addr);
#endif
sockin = (struct sockaddr_in *)ai->ai_addr;
memcpy(&sockin->sin_addr, hp->h_addr, hp->h_length);
ai->ai_addr->sa_family = hp->h_addrtype;
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
ai->ai_addr->sa_len = sizeof(struct sockaddr);
#endif
if (hints != NULL && hints->ai_flags & AI_CANONNAME)
AF(&addr) = AF_INET;
NSRCADR(&addr) = ipl->addr;
}
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
addr.sas.ss_len = SOCKLEN(&addr);
#endif
ipl++;
AF(&addr) = AF_INET;
NSRCADR(&addr) = ipl->addr;
}
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
addr.sas.ss_len = SOCKLEN(&addr);
#endif
DPRINTF(1, ("peer_stats: looking for %s, %d, %d\n",
}
NSRCPORT(&peeraddr) = htons(NTP_PORT);
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sas.ss_len = SOCKLEN(&peeraddr);
#endif
NSRCADR(&peeraddr) = temp_cp.peeraddr;
}
SET_PORT(&peeraddr, NTP_PORT);
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sas.ss_len = SOCKLEN(&peeraddr);
#endif
found = 0;
NSRCADR(&peeraddr) = temp_cp.peeraddr;
}
SET_PORT(&peeraddr, NTP_PORT);
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sas.ss_len = SOCKLEN(&peeraddr);
#endif
found = 0;
NSRCADR(&peeraddr) = cp->peeraddr;
}
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sas.ss_len = SOCKLEN(&peeraddr);
#endif
peer = findexistingpeer(&peeraddr, NULL, -1);
NSRCADR(&peeraddr) = cp->peeraddr;
}
SET_PORT(&peeraddr, 123);
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sas.ss_len = SOCKLEN(&peeraddr);
#endif
peer = findexistingpeer(&peeraddr, NULL, -1);
ZERO_SOCK(&addr);
AF(&addr) = AF_INET;
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
addr.sas.ss_len = SOCKLEN(&addr);
#endif
SET_PORT(&addr, NTP_PORT);
while (items-- > 0) {
AF(&addr) = AF_INET;
NSRCADR(&addr) = cf->clockadr;
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
addr.sas.ss_len = SOCKLEN(&addr);
#endif
SET_PORT(&addr, NTP_PORT);
ZERO_SOCK(&addr);
AF(&addr) = AF_INET;
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
addr.sas.ss_len = SOCKLEN(&addr);
#endif
SET_PORT(&addr, NTP_PORT);
* SET_SS_LEN_IF_PRESENT - used by SET_ADDR, SET_ADDRS macros
*/
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
#define SET_SS_LEN_IF_PRESENT(psau) \
do { \
(psau)->sas.ss_len = SOCKLEN(psau); \
NSRCADR(&dst) = pp->dstadr;
NSRCADR(&src) = pp->srcadr;
}
-#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
+#ifdef ISC_PLATFORM_HAVESALEN
src.sas.ss_len = SOCKLEN(&src);
dst.sas.ss_len = SOCKLEN(&dst);
#endif
>
</File>
<File
- RelativePath="..\..\include\isc\net.h"
+ RelativePath="..\..\..\..\lib\isc\win32\include\isc\net.h"
>
</File>
<File
>
</File>
<File
- RelativePath="..\..\..\..\lib\isc\win32\include\isc\time.h"
+ RelativePath="..\..\include\sys\time.h"
>
</File>
<File
- RelativePath="..\..\include\sys\time.h"
+ RelativePath="..\..\..\..\lib\isc\win32\include\isc\time.h"
>
</File>
<File
AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], 1, [Does a system header define struct sockaddr_storage?])
fi
-AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
- ac_cv_have_ss_family_in_struct_ss, [
+AC_CACHE_CHECK(
+ [for ss_family field in struct sockaddr_storage],
+ ac_cv_have_ss_family_in_struct_ss,
+ [
AC_TRY_COMPILE(
- [
-#include <sys/types.h>
-#include <sys/socket.h>
- ],
- [ struct sockaddr_storage s; s.ss_family = 1; ],
- [ ac_cv_have_ss_family_in_struct_ss="yes" ],
- [ ac_cv_have_ss_family_in_struct_ss="no" ],
+ [
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ struct sockaddr_storage s;
+ s.ss_family = 1;
+ ],
+ [ac_cv_have_ss_family_in_struct_ss=yes],
+ [ac_cv_have_ss_family_in_struct_ss=no]
)
-])
+ ]
+)
if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Does struct sockaddr_storage have ss_family?])
else
esac
fi
-AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
- ac_cv_have___ss_family_in_struct_ss, [
+AC_CACHE_CHECK(
+ [for __ss_family field in struct sockaddr_storage],
+ ac_cv_have___ss_family_in_struct_ss,
+ [
AC_TRY_COMPILE(
- [
-#include <sys/types.h>
-#include <sys/socket.h>
- ],
- [ struct sockaddr_storage s; s.__ss_family = 1; ],
- [ ac_cv_have___ss_family_in_struct_ss="yes" ],
- [ ac_cv_have___ss_family_in_struct_ss="no" ]
+ [
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ struct sockaddr_storage s;
+ s.__ss_family = 1;
+ ],
+ [ac_cv_have___ss_family_in_struct_ss=yes],
+ [ac_cv_have___ss_family_in_struct_ss=no]
)
])
if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
# define ss_family __ss_family
#endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */])
+#
+# Look for in_port_t.
+#
+AC_CACHE_CHECK(
+ [for in_port_t],
+ isc_cv_have_in_port_t,
+ [
+ AC_TRY_COMPILE(
+ [
+ #include <sys/types.h>
+ #include <netinet/in.h>
+ ],
+ [
+ in_port_t port = 25;
+ return (0);
+ ],
+ [isc_cv_have_in_port_t=yes],
+ [isc_cv_have_in_port_t=no]
+ )
+ ]
+)
+case "$isc_cv_have_in_port_t" in
+ no)
+ AC_DEFINE(ISC_PLATFORM_NEEDPORTT, 1, [Declare in_port_t?])
+esac
AC_ARG_ENABLE([ipv6], [AC_HELP_STRING([--enable-ipv6], [s use IPv6?])])
;;
esac
-
AC_CACHE_CHECK(
[for IPv6 structures],
ac_cv_isc_found_ipv6,
[
- AC_COMPILE_IFELSE(
+ AC_COMPILE_IFELSE(
[
AC_LANG_PROGRAM(
[