From: Harlan Stenn Date: Thu, 3 Jan 2002 04:52:46 +0000 (-0500) Subject: The loopback is OK if we're listening to virtual IPs. X-Git-Tag: NTP_4_1_0B_RC3~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=253345c045a2f57254448b46a63adeba2c4f61dc;p=thirdparty%2Fntp.git The loopback is OK if we're listening to virtual IPs. Show candidate interface addresses during debug. From: Paul Vixie bk: 3c33e39eRTeTRMk32unVzMPYSMvs5g --- diff --git a/ntpd/ntp_io.c b/ntpd/ntp_io.c index f3fb4948d3..ef0c14698f 100644 --- a/ntpd/ntp_io.c +++ b/ntpd/ntp_io.c @@ -41,6 +41,8 @@ #endif #include +extern int listen_to_virtual_ips; + #if _BSDI_VERSION >= 199510 # include #endif @@ -275,9 +277,15 @@ create_sockets( if ((ifap->ifa_flags & IFF_UP) == 0) continue; + if (debug) + printf("after getifaddrs(), considering %s (%s)\n", + ifap->ifa_name, + inet_ntoa(((struct sockaddr_in *)ifap->ifa_addr)->sin_addr)); + if (ifap->ifa_flags & IFF_LOOPBACK) { sin = (struct sockaddr_in *)ifap->ifa_addr; - if (ntohl(sin->sin_addr.s_addr) != 0x7f000001) + if (ntohl(sin->sin_addr.s_addr) != 0x7f000001 && + !listen_to_virtual_ips) continue; } inter_list[i].flags = 0; @@ -318,10 +326,10 @@ create_sockets( * one physical interface. -wsr */ for (j=0; j < i; j++) - if (inter_list[j].sin.sin_addr.s_addr & - inter_list[j].mask.sin_addr.s_addr == - inter_list[i].sin.sin_addr.s_addr & - inter_list[i].mask.sin_addr.s_addr) + if ((inter_list[j].sin.sin_addr.s_addr & + inter_list[j].mask.sin_addr.s_addr) == + (inter_list[i].sin.sin_addr.s_addr & + inter_list[i].mask.sin_addr.s_addr)) { if (inter_list[j].flags & INT_LOOPBACK) inter_list[j] = inter_list[i]; @@ -395,8 +403,6 @@ create_sockets( for(n = ifc.ifc_len, ifr = ifc.ifc_req; n > 0; ifr = (struct ifreq *)((char *)ifr + size)) { - extern int listen_to_virtual_ips; - size = sizeof(*ifr); # ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR @@ -1235,7 +1241,7 @@ fdbits( /* * input_handler - receive packets asynchronously */ -extern void +void input_handler( l_fp *cts )