diff --git a/CHANGES b/CHANGES index dedcceb857..c5601e6a53 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ + 381. [bug] Check for IPV6_RECVPKTINFO and use it instead of + IPV6_PKTINFO if found. [RT #229] + 380. [bug] nsupdate didn't work with IPv6. 379. [func] New library function isc_sockaddr_anyofpf(). diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 52b36069f3..428205b969 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: socket.c,v 1.153 2000/08/01 01:31:27 tale Exp $ */ +/* $Id: socket.c,v 1.154 2000/08/10 00:05:43 bwelling Exp $ */ #include @@ -1201,14 +1201,27 @@ isc_socket_create(isc_socketmgr_t *manager, int pf, isc_sockettype_t type, #endif /* SO_TIMESTAMP */ #if defined(ISC_PLATFORM_HAVEIPV6) +#ifdef IPV6_RECVPKTINFO + /* 2292bis */ + if ((pf == AF_INET6) + && (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, + (void *)&on, sizeof (on)) < 0)) { + UNEXPECTED_ERROR(__FILE__, __LINE__, + "setsockopt(%d, IPV6_RECVPKTINFO) " + "failed: %s", + sock->fd, strerror(errno)); + } +#else + /* 2292 */ if ((pf == AF_INET6) && (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_PKTINFO, (void *)&on, sizeof (on)) < 0)) { UNEXPECTED_ERROR(__FILE__, __LINE__, - "setsockopt(%d, IPV6_PKTINFO) failed: %s", + "setsockopt(%d, IPV6_PKTINFO) " + "failed: %s", sock->fd, strerror(errno)); } - +#endif /* IPV6_RECVPKTINFO */ #ifdef IPV6_USE_MIN_MTU /*2292bis, not too common yet*/ /* use minimum MTU */ if (pf == AF_INET6) {