<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/31b309b046489c03e5f9d1199e5de4f90916d50a">https://github.com/macports/macports-ports/commit/31b309b046489c03e5f9d1199e5de4f90916d50a</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 31b309b ntpsec: Fixes build for macOS <10.13.
</span>31b309b is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 31b309b046489c03e5f9d1199e5de4f90916d50a
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sat Mar 17 20:30:20 2018 -0700
<span style='display:block; white-space:pre;color:#404040;'> ntpsec: Fixes build for macOS <10.13.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> The 1.1.0 release of ntpsec included further desupport of macOS
</span><span style='display:block; white-space:pre;color:#404040;'> such that it no longer builds on 10.12. This change adds a patch
</span><span style='display:block; white-space:pre;color:#404040;'> which reverts the offending changes, as well as making a few
</span><span style='display:block; white-space:pre;color:#404040;'> additional changes to allow building on earlier OSX versions.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This code is also visible (for now) at:
</span><span style='display:block; white-space:pre;color:#404040;'> https://gitlab.com/fhgwright/ntpsec/tree/NTPsec_1_1_0_macports
</span><span style='display:block; white-space:pre;color:#404040;'> which is derived from:
</span><span style='display:block; white-space:pre;color:#404040;'> https://gitlab.com/fhgwright/ntpsec/tree/NTPsec_1_1_0_fw
</span><span style='display:block; white-space:pre;color:#404040;'> by excluding unnecessary changes for this context.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'> Built and ran on MacPro 10.9, PowerBook 10.5, and VMs for 10.5-10.13.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Closes: https://trac.macports.org/ticket/56087
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also adds author as maintainer.
</span>---
sysutils/ntpsec/Portfile | 12 +-
sysutils/ntpsec/files/patch-PreHighSierra.diff | 814 +++++++++++++++++++++++++
2 files changed, 819 insertions(+), 7 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/ntpsec/Portfile b/sysutils/ntpsec/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 75cd9b1..6108ab2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/sysutils/ntpsec/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/ntpsec/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -6,8 +6,10 @@ PortGroup python 1.0
</span>
name ntpsec
version 1.1.0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+revision 1
</span> categories sysutils net
<span style='display:block; white-space:pre;background:#ffe0e0;'>-maintainers {lbschenkel @lbschenkel} openmaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers {lbschenkel @lbschenkel} {fwright.net:fw @fhgwright} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ openmaintainer
</span> description A secure, hardened, and improved implementation of NTP
license Permissive
platforms darwin
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -25,6 +27,8 @@ checksums rmd160 65e6f3a2339b98ffa0b0cdf7310dd850cd3082a6 \
</span> depends_build port:bison
depends_lib path:lib/libssl.dylib:openssl port:python${python.version}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles patch-PreHighSierra.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> post-patch {
foreach f {ntpdig ntpkeygen ntploggps ntplogtemp ntpmon ntpq ntpsnmpd ntpsweep ntptrace ntpviz ntpwait} {
reinplace "s,^#!/usr/bin/env python,#!${python.bin}," ${worksrcpath}/ntpclients/$f.py
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -55,12 +59,6 @@ variant smear description {Enable smearing of leap seconds} {
</span> configure.args-append --enable-leap-smear
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-pre-fetch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.platform} eq "darwin" && ${os.major} < 16} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "${name} @${version} requires macOS 10.12 or greater."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error "incompatible macOS version"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span> post-destroot {
xinstall -o root -m 644 ${filespath}/ntp.conf \
${destroot}${prefix}/etc/ntp.conf.dist
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/ntpsec/files/patch-PreHighSierra.diff b/sysutils/ntpsec/files/patch-PreHighSierra.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..c591c67
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/ntpsec/files/patch-PreHighSierra.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,814 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- attic/digest-timing.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ attic/digest-timing.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -33,6 +33,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <openssl/rand.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <openssl/objects.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "ntp_machine.h" /* For clock_gettime fallback */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define UNUSED_ARG(arg) ((void)(arg))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef EVP_MD_CTX_reset
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -43,6 +45,23 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define EVP_MD_CTX_reset(ctx) EVP_MD_CTX_init(ctx)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Pecking order for clock_gettime interval measurements
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CLOCK_MONOTONIC_RAW is free of NTP adjustments
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CLOCK_MONOTONIC is affected by NTP slewing but not step adjustments
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CLOCK_REALTIME is affected by all NTP adjustments, including stepping
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Assuming this test isn't run while stepping is a possibility,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * even CLOCK_REALTIME is acceptable.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(CLOCK_MONOTONIC_RAW)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define CLOCK_INTERVAL CLOCK_MONOTONIC_RAW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(CLOCK_MONOTONIC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define CLOCK_INTERVAL CLOCK_MONOTONIC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define CLOCK_INTERVAL CLOCK_REALTIME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Get timing for old slower way too. Pre Feb 2018 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define DoSLOW 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -144,21 +163,21 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (NULL == digest) return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- clock_gettime(CLOCK_MONOTONIC, &start);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ clock_gettime(CLOCK_INTERVAL, &start);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (i = 0; i < NUM; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ digestlength = SSL_Digest(digest, key, keylength, pkt, pktlength);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- clock_gettime(CLOCK_MONOTONIC, &stop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ clock_gettime(CLOCK_INTERVAL, &stop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf("%10s %2d %2d %2u %6.0f %6.3f",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name, keylength, pktlength, digestlength, fast/NUM, fast/1E9);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef DoSLOW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- clock_gettime(CLOCK_MONOTONIC, &start);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ clock_gettime(CLOCK_INTERVAL, &start);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (i = 0; i < NUM; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ digestlength = SSL_DigestSlow(type, key, keylength, pkt, pktlength);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- clock_gettime(CLOCK_MONOTONIC, &stop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ clock_gettime(CLOCK_INTERVAL, &stop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ slow = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf(" %6.0f %2.0f %4.0f",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ slow/NUM, (slow-fast)*100.0/slow, (slow-fast)/NUM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -183,11 +202,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (NULL == cipher) return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- clock_gettime(CLOCK_MONOTONIC, &start);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ clock_gettime(CLOCK_INTERVAL, &start);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (i = 0; i < NUM; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ digestlength = SSL_CMAC(cipher, key, keylength, pkt, pktlength);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- clock_gettime(CLOCK_MONOTONIC, &stop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ clock_gettime(CLOCK_INTERVAL, &stop);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fast = (stop.tv_sec-start.tv_sec)*1E9 + (stop.tv_nsec-start.tv_nsec);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ printf("%10s %2d %2d %2lu %6.0f %6.3f",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name, keylength, pktlength, digestlength, fast/NUM, fast/1E9);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/ntp_machine.h.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/ntp_machine.h 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -13,14 +13,53 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef CLOCK_REALTIME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * Pacify platforms that don't have a real clock_gettime(2),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * notably Mac OS X.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Handle platforms that don't have a real clock_gettime(2),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * notably some versions of Mac OS X.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <errno.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define CLOCK_REALTIME 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define CLOCK_MONOTONIC 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef int clockid_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-int clock_gettime(clockid_t clock_id, struct timespec *tp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int clock_gettime(clockid_t clk_id, struct timespec *tp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct timeval tv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (clk_id) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case CLOCK_REALTIME:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * On OSX, it's tempting to use clock_get_time() for its apparent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * nanosecond resolution, but it really only has microsecond
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * resolution, and is substantially slower than gettimeofday().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (gettimeofday(&tv, NULL))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tp->tv_sec = tv.tv_sec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tp->tv_nsec = tv.tv_usec * 1000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ errno = EINVAL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline int clock_settime(clockid_t clk_id, const struct timespec *tp)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct timeval tv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (clk_id) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case CLOCK_REALTIME:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tv.tv_sec = tp->tv_sec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ tv.tv_usec = (tp->tv_nsec + 500) / 1000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return settimeofday(&tv, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ errno = EINVAL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* !CLOCK_REALTIME */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int ntp_set_tod (struct timespec *tvs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/ntp_stdlib.h.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/ntp_stdlib.h 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -113,7 +113,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern const char * ceventstr (int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern const char * res_match_flags(unsigned short);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern const char * res_access_flags(unsigned short);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern const char * k_st_flags (uint32_t);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern char * statustoa (int, int);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern sockaddr_u * netof6 (sockaddr_u *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern char * numtoa (uint32_t);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- include/ntp_syscall.h.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ include/ntp_syscall.h 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -9,9 +9,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef GUARD_NTP_SYSCALL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define GUARD_NTP_SYSCALL_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_SYS_TIMEX_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <sys/time.h> /* prerequisite on NetBSD */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include <sys/timex.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extern int ntp_adjtime_ns(struct timex *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * The units of the maxerror and esterror fields vary by platform. If
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libntp/clockwork.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libntp/clockwork.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5,8 +5,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "config.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <sys/time.h> /* prerequisite on NetBSD */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <sys/timex.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_SYS_TIMEX_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <sys/time.h> /* prerequisite on NetBSD */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <sys/timex.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntp.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntp_machine.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -77,14 +79,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int saved_errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TPRINT(1, ("In ntp_set_tod\n"));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifdef HAVE_CLOCK_SETTIME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ errno = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rc = clock_settime(CLOCK_REALTIME, tvs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ saved_errno = errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TPRINT(1, ("ntp_set_tod: clock_settime: %d %m\n", rc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#error POSIX clock_settime(2) is required
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif /* HAVE_CLOCK_SETTIME */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ errno = saved_errno; /* for %m below */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TPRINT(1, ("ntp_set_tod: Final result: clock_settime: %d %m\n", rc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libntp/statestr.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libntp/statestr.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -12,7 +12,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "lib_strbuf.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntp_refclock.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntp_control.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # include "ntp_syscall.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -186,23 +188,50 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* not used with getcode(), no terminating entry needed */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * kernel discipline status bits
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const struct codestring k_st_bits[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_PLL, "pll" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_PPSFREQ
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_PPSFREQ, "ppsfreq" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_PPSTIME
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_PPSTIME, "ppstime" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_FLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_FLL, "fll" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_INS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_INS, "ins" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_DEL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_DEL, "del" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_UNSYNC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_UNSYNC, "unsync" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_FREQHOLD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_FREQHOLD, "freqhold" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_PPSSIGNAL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_PPSSIGNAL, "ppssignal" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_PPSJITTER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_PPSJITTER, "ppsjitter" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_PPSWANDER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_PPSWANDER, "ppswander" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_PPSERROR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_PPSERROR, "ppserror" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef STA_CLOCKERR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_CLOCKERR, "clockerr" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ifdef STA_NANO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { STA_NANO, "nano" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -214,6 +243,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* not used with getcode(), no terminating entry needed */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Forwards */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const char * getcode(int, const struct codestring *);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -315,9 +345,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (tab == peer_st_bits)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ? "peer_st"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (tab == k_st_bits)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ? "kern_st"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (unsigned)bits, (int)LIB_BUFLENGTH);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ errno = saved_errno;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -356,6 +388,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ k_st_flags(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint32_t st
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -363,6 +396,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return decode_bitflags((int)st, " ", k_st_bits, COUNTOF(k_st_bits));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * statustoa - return a descriptive string for a peer status
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ntpd/ntp_control.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ntpd/ntp_control.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1437,6 +1437,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char str[256];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ double dtemp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char *ss;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static struct timex ntx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static unsigned long ntp_adjtime_time;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1451,6 +1452,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ntp_adjtime_time = current_time;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch (varid) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1823,50 +1825,93 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- * CTL_IF_KERNPPS() puts a zero if kernel hard PPS is not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CTL_IF_KERNLOOP() puts a zero if the kernel loop is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * unavailable, otherwise calls putfunc with args.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define CTL_IF_KERNLOOP(putfunc, args) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putint(sys_var[varid].text, 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define CTL_IF_KERNLOOP(putfunc, args) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ putfunc args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * CTL_IF_KERNPPS() puts a zero if either the kernel
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * loop is unavailable, or kernel hard PPS is not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * active, otherwise calls putfunc with args.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# define CTL_IF_KERNPPS(putfunc, args) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putint(sys_var[varid].text, 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define CTL_IF_KERNPPS(putfunc, args) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (0 == ntx.shift) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ctl_putint(sys_var[varid].text, 0); \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ putfunc args /* no trailing ; */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_OFFSET:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctl_putdblf(sys_var[varid].text, 0, -1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ntp_error_in_seconds(ntx.offset) * MS_PER_S);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CTL_IF_KERNLOOP(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putdblf,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (sys_var[varid].text, 0, -1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ntp_error_in_seconds(ntx.offset) * MS_PER_S)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_FREQ:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctl_putsfp(sys_var[varid].text, ntx.freq);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CTL_IF_KERNLOOP(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putsfp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (sys_var[varid].text, ntx.freq)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_MAXERR:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctl_putdblf(sys_var[varid].text, 0, 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ntp_error_in_seconds(ntx.maxerror) * MS_PER_S);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CTL_IF_KERNLOOP(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putdblf,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (sys_var[varid].text, 0, 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ntp_error_in_seconds(ntx.maxerror) * MS_PER_S)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_ESTERR:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctl_putdblf(sys_var[varid].text, 0, 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ntp_error_in_seconds(ntx.esterror) * MS_PER_S);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CTL_IF_KERNLOOP(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putdblf,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (sys_var[varid].text, 0, 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ntp_error_in_seconds(ntx.esterror) * MS_PER_S)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_STFLAGS:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ss = "";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ss = k_st_flags((uint32_t)ntx.status);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ctl_putstr(sys_var[varid].text, ss, strlen(ss));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_TIMECONST:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctl_putint(sys_var[varid].text, ntx.constant);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CTL_IF_KERNLOOP(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putint,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (sys_var[varid].text, ntx.constant)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_PRECISION:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctl_putdblf(sys_var[varid].text, 0, 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ntp_error_in_seconds(ntx.precision) * MS_PER_S);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CTL_IF_KERNLOOP(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putdblf,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (sys_var[varid].text, 0, 6,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ntp_error_in_seconds(ntx.precision) * MS_PER_S)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_FREQTOL:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctl_putsfp(sys_var[varid].text, ntx.tolerance);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CTL_IF_KERNLOOP(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctl_putsfp,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (sys_var[varid].text, ntx.tolerance)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case CS_K_PPS_FREQ:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ntpd/ntp_loopfilter.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ntpd/ntp_loopfilter.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -23,8 +23,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define NTP_MAXFREQ 500e-6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define FREQTOD(x) ((x) / 65536e6) /* NTP to double */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define DTOFREQ(x) ((int32_t)((x) * 65536e6)) /* double to NTP */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This is an implementation of the clock discipline algorithm described
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -122,13 +124,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static double init_drift_comp; /* initial frequency (PPM) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ double clock_stability; /* frequency stability (wander) (s/s) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ unsigned int sys_tai; /* TAI offset from UTC */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#ifndef ENABLE_LOCKCLOCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !defined(ENABLE_LOCKCLOCK) && defined(HAVE_KERNEL_PLL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static bool loop_started; /* true after LOOP_DRIFTINIT */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* !ENABLE_LOCKCLOCK && HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef ENABLE_LOCKCLOCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void rstclock (int, double); /* transition function */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static double direct_freq(double); /* direct set frequency */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void set_freq(double); /* set frequency */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef PATH_MAX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define PATH_MAX MAX_PATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -144,6 +149,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void start_kern_loop(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void stop_kern_loop(void);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Clock state machine control flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -152,13 +158,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool pll_control = false; /* kernel support available */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool kern_enable = true; /* kernel support enabled */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool hardpps_enable; /* kernel PPS discipline enabled */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static bool ext_enable; /* external clock enabled */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool allow_panic = false; /* allow panic correction (-g) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool force_step_once = false; /* always step time once at startup (-G) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool mode_ntpdate = false; /* exit on first clock set (-q) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int freq_cnt; /* initial frequency clamp */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int freq_set; /* initial set frequency switch */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static bool ext_enable; /* external clock enabled */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Clock state machine variables
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -178,6 +185,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int sys_huffptr; /* huff-n'-puff filter pointer */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static double sys_mindly; /* huff-n'-puff filter min delay */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_KERNEL_PLL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Emacs cc-mode goes nuts if we split the next line... */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define MOD_BITS (MOD_OFFSET | MOD_MAXERROR | MOD_ESTERROR | \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MOD_STATUS | MOD_TIMECONST)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -187,7 +195,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static struct sigaction newsigsys; /* new sigaction status */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static sigjmp_buf env; /* environment var. for pll_trap() */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* SIGSYS */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef ENABLE_LOCKCLOCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sync_status(const char *what, int ostatus, int nstatus)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -213,6 +223,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return this_file;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * init_loopfilter - initialize loop filter data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -228,6 +239,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ freq_cnt = (int)clock_minstep;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * ntp_adjtime_error_handler - process errors from ntp_adjtime
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -430,6 +442,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * local_clock - the NTP logical clock loop filter.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -455,7 +468,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int rval; /* return code */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int osys_poll; /* old system poll */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int ntp_adj_ret; /* returned by ntp_adjtime */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ double mu; /* interval since last update */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ double clock_frequency; /* clock frequency */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ double dtemp, etemp; /* double temps */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -724,6 +739,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * This code segment works when clock adjustments are made using
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * precision time kernel support and the ntp_adjtime() system
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -839,6 +855,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* STA_NANO */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Clamp the frequency within the tolerance range and calculate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -952,8 +969,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (freq_cnt > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ offset_adj = clock_offset / (CLOCK_PLL * ULOGTOD(1));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ freq_cnt--;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else if (pll_control && kern_enable) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ offset_adj = 0.;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ offset_adj = clock_offset / (CLOCK_PLL * ULOGTOD(sys_poll));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -964,9 +983,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * set_freq(). Otherwise it is a component of the adj_systime()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * offset.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (pll_control && kern_enable)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ freq_adj = 0.;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ freq_adj = drift_comp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Bound absolute value of total adjustment to NTP_MAXFREQ. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1058,6 +1079,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ drift_comp = freq;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ loop_desc = "ntpd";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (pll_control) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int ntp_adj_ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ZERO(ntv);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1070,11 +1092,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ntp_adjtime_error_handler(__func__, &ntv, ntp_adj_ret, errno, false, false, __LINE__ - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mprintf_event(EVNT_FSET, NULL, "%s %.6f PPM", loop_desc,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ drift_comp * US_PER_S);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* HAVE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ start_kern_loop(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1135,8 +1159,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "kernel time sync enabled");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stop_kern_loop(void)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1144,6 +1170,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ report_event(EVNT_KERN, NULL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "kernel time sync disabled");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1156,17 +1183,21 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (kern_enable == use_kern_loop)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (pll_control && !use_kern_loop)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stop_kern_loop();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ kern_enable = use_kern_loop;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (pll_control && use_kern_loop)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ start_kern_loop();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * If this loop selection change occurs after initial startup,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * call set_freq() to switch the frequency compensation to or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * from the kernel loop.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if !defined(ENABLE_LOCKCLOCK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_KERNEL_PLL) && !defined(ENABLE_LOCKCLOCK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (pll_control && loop_started)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set_freq(drift_comp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1217,10 +1248,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case LOOP_DRIFTINIT:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef ENABLE_LOCKCLOCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (mode_ntpdate)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ start_kern_loop();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * Initialize frequency if given; otherwise, begin frequency
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1238,13 +1271,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rstclock(EVNT_FSET, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rstclock(EVNT_NSET, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ loop_started = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* !ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case LOOP_KERN_CLEAR:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if 0 /* XXX: needs more review, and how can we get here? */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef ENABLE_LOCKCLOCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (pll_control && kern_enable) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memset((char *)&ntv, 0, sizeof(ntv));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ntv.modes = MOD_STATUS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1254,6 +1290,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pll_status,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ntv.status);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif /* ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1333,7 +1370,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(SIGSYS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_KERNEL_PLL) && defined(SIGSYS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * _trap - trap processor for undefined syscalls
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1351,4 +1388,4 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pll_control = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ siglongjmp(env, 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif /* SIGSYS */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL && SIGSYS */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ntpd/ntp_timer.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ntpd/ntp_timer.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -13,7 +13,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <signal.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntp_syscall.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef HAVE_TIMER_CREATE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* TC_ERR represents the timer_create() error return value. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -374,7 +376,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ leap_result_t lsdata;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint32_t lsprox;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef HAVE_KERNEL_PLL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ leapsec_electric((pll_control && kern_enable) ? electric_on : electric_off);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ leapsec_electric(electric_off);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef ENABLE_LEAP_SMEAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ leap_smear.enabled = (leap_smear_intv != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ntpd/refclock_local.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ntpd/refclock_local.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -131,6 +131,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct peer *peer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_KERNEL_PLL) && defined(ENABLE_LOCKCLOCK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ struct timex ntv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct refclockproc *pp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ UNUSED_ARG(unit);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -156,8 +159,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * If another process is disciplining the system clock, we set
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ * the leap bits and quality indicators from the kernel.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(ENABLE_LOCKCLOCK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- struct timex ntv;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(HAVE_KERNEL_PLL) && defined(ENABLE_LOCKCLOCK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memset(&ntv, 0, sizeof ntv);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch (ntp_adjtime(&ntv)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case TIME_OK:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -181,11 +183,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pp->disp = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pp->jitter = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#else /* ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else /* HAVE_KERNEL_PLL && ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pp->leap = LEAP_NOWARNING;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pp->disp = DISPERSION;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pp->jitter = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#endif /* ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* HAVE_KERNEL_PLL && ENABLE_LOCKCLOCK */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pp->lastref = pp->lastrec;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ refclock_receive(peer);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ntpfrob/precision.c.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ntpfrob/precision.c 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -11,6 +11,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntp_types.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntp_calendar.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "ntpfrob.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "ntp_machine.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define DEFAULT_SYS_PRECISION -99
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- wafhelpers/options.py.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ wafhelpers/options.py 2018-03-17 20:07:07.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -21,6 +21,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default=False, help="Enable seccomp (restricts syscalls).")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ grp.add_option('--disable-dns-lookup', action='store_true',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default=False, help="Disable DNS lookups.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ grp.add_option('--disable-kernel-pll', action='store_true',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default=False, help="Disable kernel PLL.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ grp.add_option('--disable-mdns-registration', action='store_true',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default=False, help="Disable MDNS registration.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ grp.add_option(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- wscript.orig 2018-03-14 20:28:15.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ wscript 2018-03-17 21:02:38.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -553,13 +553,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ctx.define("__EXTENSIONS__", "1", quote=False)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ structures = (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ("struct if_laddrconf", ["sys/types.h", "net/if6.h"], False),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ("struct if_laddrreq", ["sys/types.h", "net/if6.h"], False),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ("struct timex", ["sys/time.h", "sys/timex.h"], True),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ("struct ntptimeval", ["sys/time.h", "sys/timex.h"], False),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ("struct if_laddrconf", ["sys/types.h", "net/if6.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ("struct if_laddrreq", ["sys/types.h", "net/if6.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ("struct timex", ["sys/time.h", "sys/timex.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ("struct ntptimeval", ["sys/time.h", "sys/timex.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- for (s, h, r) in structures:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ctx.check_cc(type_name=s, header_name=h, mandatory=r)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (s, h) in structures:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctx.check_cc(type_name=s, header_name=h, mandatory=False)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # waf's SNIP_FIELD should likely include this header itself
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # This is needed on some systems to get size_t for following checks
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -616,8 +616,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ('adjtimex', ["sys/time.h", "sys/timex.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ('backtrace_symbols_fd', ["execinfo.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ('closefrom', ["stdlib.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ('clock_gettime', ["time.h"], "RT"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ('clock_settime', ["time.h"], "RT"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ('ntp_adjtime', ["sys/time.h", "sys/timex.h"]), # BSD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ('ntp_gettime', ["sys/time.h", "sys/timex.h"]), # BSD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ('res_init', ["netinet/in.h", "arpa/nameser.h", "resolv.h"]),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -763,6 +761,21 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ctx.define("HAVE_WORKING_FORK", 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ comment="Whether a working fork() exists")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # Does the kernel implement a phase-locked loop for timing?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # All modern Unixes (in particular Linux and *BSD) have this.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # The README for the (now deleted) kernel directory says this:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # "If the precision-time kernel (KERNEL_PLL define) is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # configured, the installation process requires the header
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # file /usr/include/sys/timex.h for the particular
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ # architecture to be in place."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if ((ctx.get_define("HAVE_SYS_TIMEX_H") and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ not ctx.options.disable_kernel_pll)):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ctx.define("HAVE_KERNEL_PLL", 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ comment="Whether phase-locked loop for timing "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "exists and is enabled")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # SO_REUSEADDR socket option is needed to open a socket on an
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # interface when the port number is already in use on another
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # interface. Linux needs this, NetBSD does not, status on
</span></pre><pre style='margin:0'>
</pre>