From 90c47e06db660d4de455769fc291b1580a9f9414 Mon Sep 17 00:00:00 2001 From: Brent Cook Date: Sat, 18 Jul 2015 01:14:55 -0500 Subject: [PATCH 13/13] Deal with missing SO_TIMESTAMP from Paul B. Henson" Fall back to the previous client.c implementation when it is not found. SO_TIMESTAMP was added in CVS rev 1.85 by henning@. --- src/usr.sbin/ntpd/client.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/usr.sbin/ntpd/client.c b/src/usr.sbin/ntpd/client.c index 2be1f93..e2076f8 100644 --- a/src/usr.sbin/ntpd/client.c +++ b/src/usr.sbin/ntpd/client.c @@ -169,10 +169,12 @@ client_query(struct ntp_peer *p) if (p->addr->ss.ss_family == AF_INET && setsockopt(p->query->fd, IPPROTO_IP, IP_TOS, &val, sizeof(val)) == -1) log_warn("setsockopt IPTOS_LOWDELAY"); +#ifdef SO_TIMESTAMP val = 1; if (setsockopt(p->query->fd, SOL_SOCKET, SO_TIMESTAMP, &val, sizeof(val)) == -1) fatal("setsockopt SO_TIMESTAMP"); +#endif } /* @@ -219,7 +221,9 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) struct cmsghdr hdr; char buf[CMSG_SPACE(sizeof(tv))]; } cmsgbuf; +#ifdef SO_TIMESTAMP struct cmsghdr *cmsg; +#endif ssize_t size; double T1, T2, T3, T4; time_t interval; @@ -232,7 +236,6 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) somsg.msg_control = cmsgbuf.buf; somsg.msg_controllen = sizeof(cmsgbuf.buf); - T4 = getoffset(); if ((size = recvmsg(p->query->fd, &somsg, 0)) == -1) { if (errno == EHOSTUNREACH || errno == EHOSTDOWN || errno == ENETUNREACH || errno == ENETDOWN || @@ -264,6 +267,8 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) fatal("client_dispatch setsockopt SO_RTABLE"); #endif +#ifdef SO_TIMESTAMP + T4 = getoffset(); for (cmsg = CMSG_FIRSTHDR(&somsg); cmsg != NULL; cmsg = CMSG_NXTHDR(&somsg, cmsg)) { if (cmsg->cmsg_level == SOL_SOCKET && @@ -273,6 +278,9 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) break; } } +#else + T4 = gettime_corrected(); +#endif if (T4 < JAN_1970) { client_log_error(p, "recvmsg control format", EBADF); -- 2.4.5