Portable build framework for OpenNTPD
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.0 KiB

  1. From f8b926e15aa22ed9b2e82258819d9e3e130ef4b4 Mon Sep 17 00:00:00 2001
  2. From: "Paul B. Henson" <henson@acm.org>
  3. Date: Sat, 11 Jul 2015 21:48:53 -0700
  4. Subject: [PATCH] Deal with missing SO_TIMESTAMP by falling back to
  5. client.c,v1.84 behavior.
  6. ---
  7. src/usr.sbin/ntpd/client.c | 10 +++++++++-
  8. 1 file changed, 9 insertions(+), 1 deletion(-)
  9. diff --git a/src/usr.sbin/ntpd/client.c b/src/usr.sbin/ntpd/client.c
  10. index 2be1f93..e2076f8 100644
  11. --- a/src/usr.sbin/ntpd/client.c
  12. +++ b/src/usr.sbin/ntpd/client.c
  13. @@ -169,10 +169,12 @@ client_query(struct ntp_peer *p)
  14. if (p->addr->ss.ss_family == AF_INET && setsockopt(p->query->fd,
  15. IPPROTO_IP, IP_TOS, &val, sizeof(val)) == -1)
  16. log_warn("setsockopt IPTOS_LOWDELAY");
  17. +#ifdef SO_TIMESTAMP
  18. val = 1;
  19. if (setsockopt(p->query->fd, SOL_SOCKET, SO_TIMESTAMP,
  20. &val, sizeof(val)) == -1)
  21. fatal("setsockopt SO_TIMESTAMP");
  22. +#endif
  23. }
  24. /*
  25. @@ -219,7 +221,9 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
  26. struct cmsghdr hdr;
  27. char buf[CMSG_SPACE(sizeof(tv))];
  28. } cmsgbuf;
  29. +#ifdef SO_TIMESTAMP
  30. struct cmsghdr *cmsg;
  31. +#endif
  32. ssize_t size;
  33. double T1, T2, T3, T4;
  34. time_t interval;
  35. @@ -232,7 +236,6 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
  36. somsg.msg_control = cmsgbuf.buf;
  37. somsg.msg_controllen = sizeof(cmsgbuf.buf);
  38. - T4 = getoffset();
  39. if ((size = recvmsg(p->query->fd, &somsg, 0)) == -1) {
  40. if (errno == EHOSTUNREACH || errno == EHOSTDOWN ||
  41. errno == ENETUNREACH || errno == ENETDOWN ||
  42. @@ -264,6 +267,8 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
  43. fatal("client_dispatch setsockopt SO_RTABLE");
  44. #endif
  45. +#ifdef SO_TIMESTAMP
  46. + T4 = getoffset();
  47. for (cmsg = CMSG_FIRSTHDR(&somsg); cmsg != NULL;
  48. cmsg = CMSG_NXTHDR(&somsg, cmsg)) {
  49. if (cmsg->cmsg_level == SOL_SOCKET &&
  50. @@ -273,6 +278,9 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
  51. break;
  52. }
  53. }
  54. +#else
  55. + T4 = gettime_corrected();
  56. +#endif
  57. if (T4 < JAN_1970) {
  58. client_log_error(p, "recvmsg control format", EBADF);
  59. --
  60. 2.0.4