From c311ed52d45334e182a093efad827fe4cbe7e686 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 3 Apr 2002 06:44:11 +0000 Subject: [PATCH] 1247. [bug] Don't reset the interface index for link/site local addresses. [RT #2576] --- CHANGES | 3 +++ lib/isc/unix/socket.c | 26 +++++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index 2a70a3716f..818af62b02 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +1247. [bug] Don't reset the interface index for link/site local + addresses. [RT #2576] + 1246. [func] New functions isc_sockaddr_issitelocal(), isc_sockaddr_islinklocal(), isc_netaddr_issitelocal() and isc_netaddr_islinklocal(). diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 8cc6ffa031..86a299d1ac 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.224 2002/04/03 05:41:20 marka Exp $ */ +/* $Id: socket.c,v 1.225 2002/04/03 06:44:11 marka Exp $ */ #include @@ -2571,18 +2571,22 @@ socket_send(isc_socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, set_dev_address(address, sock, dev); if (pktinfo != NULL) { - socket_log(sock, NULL, TRACE, isc_msgcat, ISC_MSGSET_SOCKET, - ISC_MSG_PKTINFOPROVIDED, - "pktinfo structure provided, ifindex %u (set to 0)", - pktinfo->ipi6_ifindex); - dev->attributes |= ISC_SOCKEVENTATTR_PKTINFO; dev->pktinfo = *pktinfo; - /* - * Set the pktinfo index to 0 here, to let the kernel decide - * what interface it should send on. - */ - dev->pktinfo.ipi6_ifindex = 0; + + if (!isc_sockaddr_issitelocal(address) && + !isc_sockaddr_islinklocal(address)) { + socket_log(sock, NULL, TRACE, isc_msgcat, + ISC_MSGSET_SOCKET, ISC_MSG_PKTINFOPROVIDED, + "pktinfo structure provided, ifindex %u " + "(set to 0)", pktinfo->ipi6_ifindex); + + /* + * Set the pktinfo index to 0 here, to let the + * kernel decide what interface it should send on. + */ + dev->pktinfo.ipi6_ifindex = 0; + } } if (sock->type == isc_sockettype_udp)