From 15d8c08eaad5429c0136be2b1ce64e3b22e5842c Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 8 Oct 2014 15:10:33 +0200 Subject: [PATCH] ntp: enable PKTINFO on client sockets This will be useful to detect synchronization loops. --- ntp_io.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/ntp_io.c b/ntp_io.c index e90f58f..a582807 100644 --- a/ntp_io.c +++ b/ntp_io.c @@ -174,8 +174,7 @@ prepare_socket(int family, int port_number, int client_only) if (family == AF_INET) { #ifdef IP_PKTINFO /* We want the local IP info on server sockets */ - if (!client_only && - setsockopt(sock_fd, IPPROTO_IP, IP_PKTINFO, (char *)&on_off, sizeof(on_off)) < 0) { + if (setsockopt(sock_fd, IPPROTO_IP, IP_PKTINFO, (char *)&on_off, sizeof(on_off)) < 0) { LOG(LOGS_ERR, LOGF_NtpIO, "Could not set packet info socket option"); /* Don't quit - we might survive anyway */ } @@ -190,17 +189,15 @@ prepare_socket(int family, int port_number, int client_only) } #endif - if (!client_only) { #ifdef IPV6_RECVPKTINFO - if (setsockopt(sock_fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, (char *)&on_off, sizeof(on_off)) < 0) { - LOG(LOGS_ERR, LOGF_NtpIO, "Could not set IPv6 packet info socket option"); - } -#elif defined(IPV6_PKTINFO) - if (setsockopt(sock_fd, IPPROTO_IPV6, IPV6_PKTINFO, (char *)&on_off, sizeof(on_off)) < 0) { - LOG(LOGS_ERR, LOGF_NtpIO, "Could not set IPv6 packet info socket option"); - } -#endif + if (setsockopt(sock_fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, (char *)&on_off, sizeof(on_off)) < 0) { + LOG(LOGS_ERR, LOGF_NtpIO, "Could not set IPv6 packet info socket option"); } +#elif defined(IPV6_PKTINFO) + if (setsockopt(sock_fd, IPPROTO_IPV6, IPV6_PKTINFO, (char *)&on_off, sizeof(on_off)) < 0) { + LOG(LOGS_ERR, LOGF_NtpIO, "Could not set IPv6 packet info socket option"); + } +#endif } #endif