mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 05:57:52 +00:00
Cause runtime probing of v6 addresses to fail, even if we can actually
make v6 sockets, but we do not have struct in6_pktinfo. Add a check in configure.in for struct in6_pktinfo. Use the result of that check to define (if needed) in6_pktinfo in net.h. This change makes us build on platforms that have SOME ipv6 structures (like in6_addr, etc) but not enough to be useful to us. Note: Before making an ipv6 socket the code should verify that ipv6 sockets can be made using isc_net_probeipv6(). It should also check for v4 sockets using isc_net_probeipv4() to be consistant.
This commit is contained in:
parent
7c80c51030
commit
ece3d6c356
16
configure.in
16
configure.in
@ -13,7 +13,7 @@ dnl PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
dnl ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
dnl SOFTWARE.
|
||||
|
||||
AC_REVISION($Revision: 1.124 $)
|
||||
AC_REVISION($Revision: 1.125 $)
|
||||
|
||||
AC_PREREQ(2.13)
|
||||
|
||||
@ -616,6 +616,8 @@ case "$enable_ipv6" in
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "======= $found_ipv6"
|
||||
|
||||
case "$found_ipv6" in
|
||||
yes)
|
||||
ISC_PLATFORM_HAVEIPV6="#define ISC_PLATFORM_HAVEIPV6 1"
|
||||
@ -630,11 +632,22 @@ case "$found_ipv6" in
|
||||
ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"],
|
||||
[AC_MSG_RESULT(no)
|
||||
ISC_PLATFORM_NEEDIN6ADDRANY="#define ISC_PLATFORM_NEEDIN6ADDRANY 1"])
|
||||
AC_MSG_CHECKING(for in6_pktinfo)
|
||||
AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>],
|
||||
[struct in6_pktinfo xyzzy; return (0);],
|
||||
[AC_MSG_RESULT(yes)
|
||||
ISC_PLATFORM_HAVEIN6PKTINFO="#define ISC_PLATFORM_HAVEIN6PKTINFO 1"],
|
||||
[AC_MSG_RESULT(no -- disabling runtime ipv6 support)
|
||||
ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"])
|
||||
;;
|
||||
no)
|
||||
ISC_PLATFORM_HAVEIPV6="#undef ISC_PLATFORM_HAVEIPV6"
|
||||
LWRES_PLATFORM_HAVEIPV6="#undef LWRES_PLATFORM_HAVEIPV6"
|
||||
ISC_PLATFORM_NEEDIN6ADDRANY="#undef ISC_PLATFORM_NEEDIN6ADDRANY"
|
||||
ISC_PLATFORM_HAVEIN6PKTINFO="#undef ISC_PLATFORM_HAVEIN6PKTINFO"
|
||||
ISC_IPV6_H="ipv6.h"
|
||||
ISC_IPV6_O="ipv6.$O"
|
||||
ISC_ISCIPV6_O="unix/ipv6.$O"
|
||||
@ -645,6 +658,7 @@ esac
|
||||
AC_SUBST(ISC_PLATFORM_HAVEIPV6)
|
||||
AC_SUBST(LWRES_PLATFORM_HAVEIPV6)
|
||||
AC_SUBST(ISC_PLATFORM_NEEDIN6ADDRANY)
|
||||
AC_SUBST(ISC_PLATFORM_HAVEIN6PKTINFO)
|
||||
AC_SUBST(ISC_IPV6_H)
|
||||
AC_SUBST(ISC_IPV6_O)
|
||||
AC_SUBST(ISC_ISCIPV6_O)
|
||||
|
@ -87,11 +87,6 @@ struct sockaddr_in6 {
|
||||
#define SIN6_LEN 1
|
||||
#endif
|
||||
|
||||
struct in6_pktinfo {
|
||||
struct in6_addr ipi6_addr; /* src/dst IPv6 address */
|
||||
unsigned int ipi6_ifindex; /* send/recv interface index */
|
||||
};
|
||||
|
||||
/*
|
||||
* Unspecified
|
||||
*/
|
||||
|
@ -49,6 +49,12 @@
|
||||
*/
|
||||
@ISC_PLATFORM_NEEDIN6ADDRANY@
|
||||
|
||||
/*
|
||||
* If this system has in6_pktinfo, ISC_PLATFORM_HAVEIN6PKTINFO will be
|
||||
* defined.
|
||||
*/
|
||||
@ISC_PLATFORM_HAVEIN6PKTINFO@
|
||||
|
||||
/*
|
||||
* If this system needs inet_ntop(), ISC_PLATFORM_NEEDNTOP will be defined.
|
||||
*/
|
||||
|
@ -30,6 +30,7 @@
|
||||
*
|
||||
* struct in_addr
|
||||
* struct in6_addr
|
||||
* struct in6_pktinfo
|
||||
* struct sockaddr
|
||||
* struct sockaddr_in
|
||||
* struct sockaddr_in6
|
||||
@ -90,6 +91,13 @@
|
||||
#include <isc/ipv6.h>
|
||||
#endif
|
||||
|
||||
#ifndef ISC_PLATFORM_HAVEIN6PKTINFO
|
||||
struct in6_pktinfo {
|
||||
struct in6_addr ipi6_addr; /* src/dst IPv6 address */
|
||||
unsigned int ipi6_ifindex; /* send/recv interface index */
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Cope with a missing in6addr_any.
|
||||
*/
|
||||
|
@ -68,7 +68,11 @@ static void
|
||||
initialize_action(void) {
|
||||
ipv4_result = try_proto(PF_INET);
|
||||
#ifdef ISC_PLATFORM_HAVEIPV6
|
||||
#ifdef ISC_PLATFORM_HAVEIN6PKTINFO
|
||||
ipv6_result = try_proto(PF_INET6);
|
||||
#else
|
||||
ipv6_result = 0;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user