|
From 38933e5e9b3aa2d1b6d2b6fcb609494694fdfe44 Mon Sep 17 00:00:00 2001
|
|
From: Brent Cook <bcook@openbsd.org>
|
|
Date: Sun, 6 Dec 2015 22:35:38 -0600
|
|
Subject: [PATCH 12/12] Deal with missing SO_TIMESTAMP
|
|
|
|
from Paul B. Henson" <henson@acm.org>
|
|
|
|
Fall back to the previous client.c implementation when it is not found.
|
|
---
|
|
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 7ce3b38..edca87c 100644
|
|
--- a/src/usr.sbin/ntpd/client.c
|
|
+++ b/src/usr.sbin/ntpd/client.c
|
|
@@ -163,10 +163,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
|
|
}
|
|
|
|
/*
|
|
@@ -213,7 +215,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;
|
|
@@ -226,7 +230,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 ||
|
|
@@ -251,6 +254,8 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
|
|
return (0);
|
|
}
|
|
|
|
+#ifdef SO_TIMESTAMP
|
|
+ T4 = getoffset();
|
|
for (cmsg = CMSG_FIRSTHDR(&somsg); cmsg != NULL;
|
|
cmsg = CMSG_NXTHDR(&somsg, cmsg)) {
|
|
if (cmsg->cmsg_level == SOL_SOCKET &&
|
|
@@ -260,6 +265,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.6.3
|
|
|