From: Harlan Stenn Date: Sat, 21 Feb 2015 09:28:08 +0000 (+0000) Subject: [Bug 1960] setsockopt IPV6_MULTICAST_IF: Invalid argument X-Git-Tag: NTP_4_2_8P2_RC1~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a687d43f92b00739e2f9bcfac20ffe02ce5a1934;p=thirdparty%2Fntp.git [Bug 1960] setsockopt IPV6_MULTICAST_IF: Invalid argument bk: 54e84fa8H2bt0wt8WLE5FWaCTm4xSw --- diff --git a/ChangeLog b/ChangeLog index 60173cc7c..1822ea050 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ --- +* [Bug 1960] setsockopt IPV6_MULTICAST_IF: Invalid argument. * [Bug 2728] See if C99-style structure initialization works. * [Bug 2747] Upgrade libevent to 2.1.5-beta. --- diff --git a/lib/isc/unix/ifiter_getifaddrs.c b/lib/isc/unix/ifiter_getifaddrs.c index c2e4044ac..425b9b4c3 100644 --- a/lib/isc/unix/ifiter_getifaddrs.c +++ b/lib/isc/unix/ifiter_getifaddrs.c @@ -212,6 +212,9 @@ internal_current(isc_interfaceiter_t *iter) { get_addr(family, &iter->current.broadcast, ifa->ifa_broadaddr, ifa->ifa_name); +#ifdef ISC_PLATFORM_HAVEIFNAMETOINDEX + iter->current.ifindex = if_nametoindex(iter->current.name); +#endif return (ISC_R_SUCCESS); } diff --git a/lib/isc/unix/ifiter_ioctl.c b/lib/isc/unix/ifiter_ioctl.c index a684867ce..747b70202 100644 --- a/lib/isc/unix/ifiter_ioctl.c +++ b/lib/isc/unix/ifiter_ioctl.c @@ -588,6 +588,9 @@ internal_current4(isc_interfaceiter_t *iter) { } iter->current.netmask.type.in6.s6_addr[i] = (~0 << bits) & 0xff; } +#ifdef ISC_PLATFORM_HAVEIFNAMETOINDEX + iter->current.ifindex = if_nametoindex(iter->current.name); +#endif return (ISC_R_SUCCESS); inet: @@ -664,6 +667,9 @@ internal_current4(isc_interfaceiter_t *iter) { } get_addr(family, &iter->current.netmask, (struct sockaddr *)&ifreq.ifr_addr, ifreq.ifr_name); +#ifdef ISC_PLATFORM_HAVEIFNAMETOINDEX + iter->current.ifindex = if_nametoindex(iter->current.name); +#endif return (ISC_R_SUCCESS); } @@ -704,7 +710,6 @@ internal_current6(isc_interfaceiter_t *iter) { get_addr(family, &iter->current.address, (struct sockaddr *)&lifreq.lifr_addr, lifreq.lifr_name); - iter->current.ifindex = lifreq.lifr_index; if (isc_netaddr_islinklocal(&iter->current.address)) isc_netaddr_setzone(&iter->current.address, (isc_uint32_t)lifreq.lifr_index); @@ -844,7 +849,9 @@ internal_current6(isc_interfaceiter_t *iter) { iter->current.netmask.type.in6.s6_addr[i / 8] = (~0 << bits) & 0xff; } - +#ifdef ISC_PLATFORM_HAVEIFNAMETOINDEX + iter->current.ifindex = if_nametoindex(iter->current.name); +#endif return (ISC_R_SUCCESS); } #endif @@ -867,6 +874,9 @@ internal_current6(isc_interfaceiter_t *iter) { get_addr(family, &iter->current.netmask, (struct sockaddr *)&lifreq.lifr_addr, lifreq.lifr_name); +#ifdef ISC_PLATFORM_HAVEIFNAMETOINDEX + iter->current.ifindex = if_nametoindex(iter->current.name); +#endif return (ISC_R_SUCCESS); } #endif