Merge ^/head r285153 through r285283.

This commit is contained in:
Dimitry Andric 2015-07-08 18:43:55 +00:00
commit 635b2e1e5a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/projects/clang-trunk/; revision=285287
800 changed files with 70541 additions and 19024 deletions

View File

@ -99,6 +99,13 @@ OLD_FILES+=usr/lib/clang/3.6.1/lib/freebsd/libclang_rt.ubsan_cxx-x86_64.a
OLD_DIRS+=usr/lib/clang/3.6.1/lib/freebsd
OLD_DIRS+=usr/lib/clang/3.6.1/lib
OLD_DIRS+=usr/lib/clang/3.6.1
# 20150705: Rename DTrace provider man pages.
OLD_FILES+=usr/share/man/man4/dtrace-io.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-ip.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-proc.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-sched.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-tcp.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-udp.4.gz
# 20150604: Move nvlist man pages to section 9.
OLD_FILES+=usr/share/man/man3/libnv.3.gz
OLD_FILES+=usr/share/man/man3/nvlist.3.gz

View File

@ -36,6 +36,20 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11.x IS SLOW:
20141231 entry below for information about prerequisites and upgrading,
if you are not already using 3.5.0 or higher.
20150706:
sendmail has been updated to 8.15.2. Starting with FreeBSD 11.0
and sendmail 8.15, sendmail uses uncompressed IPv6 addresses by
default, i.e., they will not contain "::". For example, instead
of ::1, it will be 0:0:0:0:0:0:0:1. This permits a zero subnet
to have a more specific match, such as different map entries for
IPv6:0:0 vs IPv6:0. This change requires that configuration
data (including maps, files, classes, custom ruleset, etc.) must
use the same format, so make certain such configuration data is
upgrading. As a very simple check search for patterns like
'IPv6:[0-9a-fA-F:]*::' and 'IPv6::'. To return to the old
behavior, set the m4 option confUSE_COMPRESSED_IPV6_ADDRESSES or
the cf option UseCompressedIPv6Addresses.
20150630:
The default kernel entropy-processing algorithm is now
Fortuna, replacing Yarrow.

View File

@ -1,8 +1,145 @@
---
(4.2.8p3) 2015/06/29 Released by Harlan Stenn <stenn@ntp.org>
* [Sec 2853] Crafted remote config packet can crash some versions of
ntpd. Aleksis Kauppinen, Juergen Perlinger, Harlan Stenn.
* [Sec 2853] Initial work on tests/sec-2853/. Harlan Stenn.
* [Bug 1060] Buffer overruns in libparse/clk_rawdcf.c. Helge Oldach.
* [Bug 2846] Report 'unsynchronized' status during the leap second.
Fixed in Martin's changes to Bug 2855. Martin Burnicki.
* [Bug 2859] Improve raw DCF77 robustness deconding. Frank Kardel.
* [Bug 2860] ntpq ifstats sanity check is too stringent. Frank Kardel.
* README.leapsmear added. Martin Burnicki.
* README.leapsmear edited. Harlan Stenn.
* tests/libntp/msyslog.c: fixed a gcc warning. Tomasz Flendrich.
* ntpd/ntp.conf.def: Document DSCP and leapsmearinterval. Harlan Stenn.
* html/miscopt.html: Document leapsmearinterval, other cleanup. Harlan Stenn.
---
(4.2.8p3-RC3) 2015/06/27 Released by Harlan Stenn <stenn@ntp.org>
* [Bug 2855] Parser fix for conditional leap smear code. Harlan Stenn.
* [Bug 2855] Report leap smear in the REFID. Harlan Stenn.
* [Bug 2856] ntpd should wait() on terminated child processes. Paul Green.
* [Bug 2857] Stratus VOS does not support SIGIO. Paul Green.
* html/drivers/driver22.html: typo fix. Harlan Stenn.
* refidsmear test cleanup. Tomasz Flendrich.
* refidsmear function support and tests. Harlan Stenn.
* sntp/tests/Makefile.am: remove g_nameresolution.cpp as it tested
something that was only in the 4.2.6 sntp. Harlan Stenn.
* Modified tests/bug-2803/Makefile.am so it builds Unity framework tests.
Damir Tomić
* Modified tests/libtnp/Makefile.am so it builds Unity framework tests.
Damir Tomić
* Modified sntp/tests/Makefile.am so it builds Unity framework tests.
Damir Tomić
* tests/sandbox/smeartest.c: Harlan Stenn, Damir Tomic, Juergen Perlinger.
* Converted from gtest to Unity: tests/bug-2803/. Damir Tomić
* Converted from gtest to Unity: tests/libntp/ a_md5encrypt, atoint.c,
atouint.c, authkeys.c, buftvtots.c, calendar.c, caljulian.c,
calyearstart.c, clocktime.c, hextoint.c, lfpfunc.c, modetoa.c,
numtoa.c, numtohost.c, refnumtoa.c, ssl_init.c, statestr.c,
timespecops.c, timevalops.c, uglydate.c, vi64ops.c, ymd2yd.c.
Damir Tomić
* Converted from gtest to Unity: sntp/tests/ kodDatabase.c, kodFile.c,
networking.c, keyFile.c, utilities.cpp, sntptest.h,
fileHandlingTest.h. Damir Tomić
* Converted from gtest to Unity: sntp/tests/ caltontp.c, humandate.c,
msyslog.c, prettydate.c, recvbuff.c, sfptostr.c, tstotv.c, tvtots.c,
sntp/tests/packetProcessing.c. Tomasz Flendrich
---
(4.2.8p3-RC2) 2015/06/24 Released by Harlan Stenn <stenn@ntp.org>
* [Bug 2778] Implement "apeers" ntpq command to include associd.
* [Bug 2805] ntpd fails to join multicast group.
* [Bug 2824] Convert update-leap to perl. (also see 2769)
* [Bug 2830] ntpd doesn't always transfer the correct TAI offset via autokey
NTPD transfers the current TAI (instead of an announcement) now.
This might still needed improvement.
Update autokey data ASAP when 'sys_tai' changes.
Fix unit test that was broken by changes for autokey update.
Avoid potential signature length issue and use DPRINTF where possible
in ntp_crypto.c.
* [Bug 2832] refclock_jjy.c supports the TDC-300.
* [Bug 2834] Correct a broken html tag in html/refclock.html
* [Bug 2836] DFC77 patches from Frank Kardel to make decoding more
robust, and require 2 consecutive timestamps to be consistent.
* [Bug 2837] Allow a configurable DSCP value.
* [Bug 2837] add test for DSCP to ntpd/complete.conf.in
* [Bug 2842] Glitch in ntp.conf.def documentation stanza.
* [Bug 2842] Bug in mdoc2man.
* [Bug 2843] make check fails on 4.3.36
Fixed compiler warnings about numeric range overflow
(The original topic was fixed in a byplay to bug#2830)
* [Bug 2845] Harden memory allocation in ntpd.
* [Bug 2852] 'make check' can't find unity.h. Hal Murray.
* [Bug 2854] Missing brace in libntp/strdup.c. Masanari Iida.
* [Bug 2855] Implement conditional leap smear code. Martin Burnicki.
* [Bug 2855] leap smear cleanup. Harlan Stenn.
* Initial support for experimental leap smear code. Harlan Stenn.
* Fixes to sntp/tests/fileHandlingTest.h.in. Harlan Stenn.
* Report select() debug messages at debug level 3 now.
* sntp/scripts/genLocInfo: treat raspbian as debian.
* Unity test framework fixes.
** Requires ruby for changes to tests.
* Initial support for PACKAGE_VERSION tests.
* sntp/libpkgver belongs in EXTRA_DIST, not DIST_SUBDIRS.
* tests/bug-2803/Makefile.am must distribute bug-2803.h.
* automake-1.15 cleanup for sntp/tests/fileHandlingTest.h.in . Harlan Stenn.
---
(4.2.8p3-RC1) 2015/05/12 Released by Harlan Stenn <stenn@ntp.org>
* CID 739725: Fix a rare resource leak in libevent/listener.c.
* CID 1295478: Quiet a pedantic potential error from the fix for Bug 2776.
* CID 1296235: Fix refclock_jjy.c and correcting type of the driver40-ja.html
* CID 1269537: Clean up a line of dead code in getShmTime().
* [Bug 2590] autogen-5.18.5.
* [Bug 2612] restrict: Warn when 'monitor' can't be disabled because
of 'limited'.
* [Bug 2650] fix includefile processing.
* [Bug 2745] ntpd -x steps clock on leap second
Fixed an initial-value problem that caused misbehaviour in absence of
any leapsecond information.
Do leap second stepping only of the step adjustment is beyond the
proper jump distance limit and step correction is allowed at all.
* [Bug 2750] build for Win64
Building for 32bit of loopback ppsapi needs def file
* [Bug 2776] Improve ntpq's 'help keytype'.
* [Bug 2782] Refactor refclock_shm.c, add memory barrier protection.
* [Bug 2792] If the IFF_RUNNING interface flag is supported then an
interface is ignored as long as this flag is not set since the
interface is not usable (e.g., no link).
* [Bug 2794] Clean up kernel clock status reports.
* [Bug 2800] refclock_true.c true_debug() can't open debug log because
of incompatible open/fdopen parameters.
* [Bug 2804] install-local-data assumes GNU 'find' semantics.
* [Bug 2806] refclock_jjy.c supports the Telephone JJY.
* [Bug 2808] GPSD_JSON driver enhancements, step 1.
Fix crash during cleanup if GPS device not present and char device.
Increase internal token buffer to parse all JSON data, even SKY.
Defer logging of errors during driver init until the first unit is
started, so the syslog is not cluttered when the driver is not used.
Various improvements, see http://bugs.ntp.org/2808 for details.
Changed libjsmn to a more recent version.
* [Bug 2810] refclock_shm.c memory barrier code needs tweaks for QNX.
* [Bug 2813] HP-UX needs -D__STDC_VERSION__=199901L and limits.h.
* [Bug 2815] net-snmp before v5.4 has circular library dependencies.
* [Bug 2821] Add a missing NTP_PRINTF and a missing const.
* [Bug 2822] New leap column in sntp broke NTP::Util.pm.
* [Bug 2825] Quiet file installation in html/ .
* [Bug 2830] ntpd doesn't always transfer the correct TAI offset via autokey
NTPD transfers the current TAI (instead of an announcement) now.
This might still needed improvement.
* Add an assert to the ntpq ifstats code.
* Clean up the RLIMIT_STACK code.
* Improve the ntpq documentation around the controlkey keyid.
* ntpq.c cleanup.
* Windows port build cleanup.
---
(4.2.8p2) 2015/04/07 Released by Harlan Stenn <stenn@ntp.org>
(4.2.8p2-RC3) 2015/04/03 Released by Harlan Stenn <stenn@ntp.org>
* [Bug 2763] Fix for different thresholds for forward and backward steps.
* Initial import of the Unity test framework.
---
(4.2.8p2-RC2) 2015/04/03 Released by Harlan Stenn <stenn@ntp.org>
@ -62,6 +199,7 @@
* [Sec 2781] Authentication doesn't protect symmetric associations against
DoS attacks.
* [Bug 2783] Quiet autoconf warnings about missing AC_LANG_SOURCE.
* [Bug 2784] Fix for 2782 uses clock_gettime() instead of get_ostime().
* [Bug 2789] Quiet compiler warnings from libevent.
* [Bug 2790] If ntpd sets the Windows MM timer highest resolution
pause briefly before measuring system clock precision to yield

File diff suppressed because it is too large Load Diff

View File

@ -34,6 +34,7 @@ EXTRA_DIST = \
NOTES.y2kfixes \
README.bk \
README.hackers \
README.leapsmear \
README.patches \
README.refclocks \
README.versions \
@ -113,10 +114,13 @@ dist-hook:
@find $(distdir) -type d -name SCCS -print | xargs rm -rf
install-data-local:
( cd $(srcdir) && find html -name SCCS -prune -o -type d \
-exec $(INSTALL) -d $(DESTDIR)$(htmldir)/{} ";" )
( cd $(srcdir) && find html -name SCCS -prune -o -type f \
-exec $(INSTALL_DATA) {} $(DESTDIR)$(htmldir)/{} ";" )
@echo "Installing stand-alone HTML documentation"
@( cd $(srcdir) && \
for i in `find html -type d | grep -v SCCS` ; \
do $(INSTALL) -d $(DESTDIR)$(htmldir)/$$i ; done )
@( cd $(srcdir) && \
for i in `find html -type f | grep -v SCCS` ; \
do $(INSTALL_DATA) $$i $(DESTDIR)$(htmldir)/$$i ; done )
uninstall-local:
rm -rf $(DESTDIR)$(htmldir)/html

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -15,6 +14,61 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -34,18 +88,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/configure ChangeLog INSTALL NEWS TODO compile \
config.guess config.sub depcomp install-sh ltmain.sh missing \
sntp/libevent/build-aux/compile \
sntp/libevent/build-aux/config.guess \
sntp/libevent/build-aux/config.sub \
sntp/libevent/build-aux/depcomp \
sntp/libevent/build-aux/install-sh \
sntp/libevent/build-aux/ltmain.sh \
sntp/libevent/build-aux/missing sntp/libevent/build-aux/ylwrap \
ylwrap
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/libopts/m4/stdnoreturn.m4 \
@ -76,6 +118,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -85,42 +128,99 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(am__DIST_COMMON)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
install-exec-recursive install-html-recursive \
install-info-recursive install-pdf-recursive \
install-ps-recursive install-recursive installcheck-recursive \
installdirs-recursive pdf-recursive ps-recursive \
tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
distdir dist dist-all distcheck
am__recursive_targets = \
$(RECURSIVE_TARGETS) \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
cscope distdir dist dist-all distcheck
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
$(LISP)config.h.in
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/sntp/libevent/build-aux/ar-lib \
$(top_srcdir)/sntp/libevent/build-aux/compile \
$(top_srcdir)/sntp/libevent/build-aux/config.guess \
$(top_srcdir)/sntp/libevent/build-aux/config.sub \
$(top_srcdir)/sntp/libevent/build-aux/install-sh \
$(top_srcdir)/sntp/libevent/build-aux/ltmain.sh \
$(top_srcdir)/sntp/libevent/build-aux/missing ChangeLog \
INSTALL NEWS README TODO compile config.guess config.sub \
depcomp install-sh ltmain.sh missing \
sntp/libevent/build-aux/ar-lib sntp/libevent/build-aux/compile \
sntp/libevent/build-aux/config.guess \
sntp/libevent/build-aux/config.sub \
sntp/libevent/build-aux/depcomp \
sntp/libevent/build-aux/install-sh \
sntp/libevent/build-aux/ltmain.sh \
sntp/libevent/build-aux/missing sntp/libevent/build-aux/ylwrap \
ylwrap
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d "$(distdir)" \
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr "$(distdir)"; }; }
if test -d "$(distdir)"; then \
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
am__post_remove_distdir = $(am__remove_distdir)
am__relativize = \
dir0=`pwd`; \
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@ -148,7 +248,10 @@ am__relativize = \
reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
DIST_TARGETS = dist-gzip
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -199,6 +302,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -315,6 +419,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -444,6 +549,7 @@ EXTRA_DIST = \
NOTES.y2kfixes \
README.bk \
README.hackers \
README.leapsmear \
README.patches \
README.refclocks \
README.versions \
@ -488,7 +594,7 @@ all: $(BUILT_SOURCES) config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh:
am--refresh: Makefile
@:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
@ -503,7 +609,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -524,10 +629,8 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__aclocal_m4_deps):
config.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
else :; fi
@test -f $@ || rm -f stamp-h1
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
@ -550,22 +653,25 @@ distclean-libtool:
-rm -f libtool config.lt
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
@fail=; \
if $(am__make_keepgoing); then \
failcom='fail=yes'; \
else \
failcom='exit 1'; \
fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
@ -580,57 +686,12 @@ $(RECURSIVE_TARGETS):
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-recursive
TAGS: tags
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@ -646,12 +707,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -663,15 +719,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -680,9 +732,31 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscope: cscope.files
test ! -s cscope.files \
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
clean-cscope:
-rm -f cscope.files
cscope.files: clean-cscope cscopelist
cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
distdir: $(DISTFILES)
$(am__remove_distdir)
@ -718,13 +792,10 @@ distdir: $(DISTFILES)
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
@ -756,36 +827,42 @@ distdir: $(DISTFILES)
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
$(am__post_remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
$(am__post_remove_distdir)
dist-lzma: distdir
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
$(am__remove_distdir)
dist-lzip: distdir
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
$(am__post_remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
$(am__remove_distdir)
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
dist-tarZ: distdir
@echo WARNING: "Support for distribution archives compressed with" \
"legacy program 'compress' is deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
$(am__post_remove_distdir)
dist-shar: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
$(am__post_remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
$(am__post_remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist dist-all:
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
$(am__post_remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
@ -796,8 +873,8 @@ distcheck: dist
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lzma*) \
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.lz*) \
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
@ -807,17 +884,19 @@ distcheck: dist
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod -R a-w $(distdir)
chmod u+w $(distdir)
mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
&& $(am__cd) $(distdir)/_build/sub \
&& ../../configure \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
--srcdir=../.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
@ -840,13 +919,21 @@ distcheck: dist
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__remove_distdir)
$(am__post_remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@$(am__cd) '$(distuninstallcheck_dir)' \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
@test -n '$(distuninstallcheck_dir)' || { \
echo 'ERROR: trying to run $@ with an empty' \
'$$(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
$(am__cd) '$(distuninstallcheck_dir)' || { \
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
exit 1; \
}; \
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
@ -879,10 +966,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -967,26 +1059,27 @@ ps-am:
uninstall-am: uninstall-local
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
ctags-recursive install install-am install-strip \
tags-recursive
.MAKE: $(am__recursive_targets) all check install install-am \
install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
dist-zip distcheck distclean distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am \
install-data-local install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-local
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
am--refresh check check-am clean clean-cscope clean-generic \
clean-libtool cscope cscopelist-am ctags ctags-am dist \
dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
dist-tarZ dist-xz dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-libtool \
distclean-tags distcleancheck distdir distuninstallcheck dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-data-local install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-am uninstall uninstall-am uninstall-local
.PRECIOUS: Makefile
.gcc-warning:
@ -1032,10 +1125,13 @@ dist-hook:
@find $(distdir) -type d -name SCCS -print | xargs rm -rf
install-data-local:
( cd $(srcdir) && find html -name SCCS -prune -o -type d \
-exec $(INSTALL) -d $(DESTDIR)$(htmldir)/{} ";" )
( cd $(srcdir) && find html -name SCCS -prune -o -type f \
-exec $(INSTALL_DATA) {} $(DESTDIR)$(htmldir)/{} ";" )
@echo "Installing stand-alone HTML documentation"
@( cd $(srcdir) && \
for i in `find html -type d | grep -v SCCS` ; \
do $(INSTALL) -d $(DESTDIR)$(htmldir)/$$i ; done )
@( cd $(srcdir) && \
for i in `find html -type f | grep -v SCCS` ; \
do $(INSTALL_DATA) $$i $(DESTDIR)$(htmldir)/$$i ; done )
uninstall-local:
rm -rf $(DESTDIR)$(htmldir)/html

View File

@ -1,5 +1,154 @@
---
NTP 4.2.8p2 (Harlan Stenn <stenn@ntp.org>, 2015/04/xx)
NTP 4.2.8p3 (Harlan Stenn <stenn@ntp.org>, 2015/06/29)
Focus: 1 Security fix. Bug fixes and enhancements. Leap-second improvements.
Severity: MEDIUM
Security Fix:
* [Sec 2853] Crafted remote config packet can crash some versions of
ntpd. Aleksis Kauppinen, Juergen Perlinger, Harlan Stenn.
Under specific circumstances an attacker can send a crafted packet to
cause a vulnerable ntpd instance to crash. This requires each of the
following to be true:
1) ntpd set up to allow remote configuration (not allowed by default), and
2) knowledge of the configuration password, and
3) access to a computer entrusted to perform remote configuration.
This vulnerability is considered low-risk.
New features in this release:
Optional (disabled by default) support to have ntpd provide smeared
leap second time. A specially built and configured ntpd will only
offer smeared time in response to client packets. These response
packets will also contain a "refid" of 254.a.b.c, where the 24 bits
of a, b, and c encode the amount of smear in a 2:22 integer:fraction
format. See README.leapsmear and http://bugs.ntp.org/2855 for more
information.
*IF YOU CHOOSE TO CONFIGURE NTPD TO PROVIDE LEAP SMEAR TIME*
*BE SURE YOU DO NOT OFFER THAT TIME ON PUBLIC TIMESERVERS.*
We've imported the Unity test framework, and have begun converting
the existing google-test items to this new framework. If you want
to write new tests or change old ones, you'll need to have ruby
installed. You don't need ruby to run the test suite.
Bug Fixes and Improvements:
* CID 739725: Fix a rare resource leak in libevent/listener.c.
* CID 1295478: Quiet a pedantic potential error from the fix for Bug 2776.
* CID 1296235: Fix refclock_jjy.c and correcting type of the driver40-ja.html
* CID 1269537: Clean up a line of dead code in getShmTime().
* [Bug 1060] Buffer overruns in libparse/clk_rawdcf.c. Helge Oldach.
* [Bug 2590] autogen-5.18.5.
* [Bug 2612] restrict: Warn when 'monitor' can't be disabled because
of 'limited'.
* [Bug 2650] fix includefile processing.
* [Bug 2745] ntpd -x steps clock on leap second
Fixed an initial-value problem that caused misbehaviour in absence of
any leapsecond information.
Do leap second stepping only of the step adjustment is beyond the
proper jump distance limit and step correction is allowed at all.
* [Bug 2750] build for Win64
Building for 32bit of loopback ppsapi needs def file
* [Bug 2776] Improve ntpq's 'help keytype'.
* [Bug 2778] Implement "apeers" ntpq command to include associd.
* [Bug 2782] Refactor refclock_shm.c, add memory barrier protection.
* [Bug 2792] If the IFF_RUNNING interface flag is supported then an
interface is ignored as long as this flag is not set since the
interface is not usable (e.g., no link).
* [Bug 2794] Clean up kernel clock status reports.
* [Bug 2800] refclock_true.c true_debug() can't open debug log because
of incompatible open/fdopen parameters.
* [Bug 2804] install-local-data assumes GNU 'find' semantics.
* [Bug 2805] ntpd fails to join multicast group.
* [Bug 2806] refclock_jjy.c supports the Telephone JJY.
* [Bug 2808] GPSD_JSON driver enhancements, step 1.
Fix crash during cleanup if GPS device not present and char device.
Increase internal token buffer to parse all JSON data, even SKY.
Defer logging of errors during driver init until the first unit is
started, so the syslog is not cluttered when the driver is not used.
Various improvements, see http://bugs.ntp.org/2808 for details.
Changed libjsmn to a more recent version.
* [Bug 2810] refclock_shm.c memory barrier code needs tweaks for QNX.
* [Bug 2813] HP-UX needs -D__STDC_VERSION__=199901L and limits.h.
* [Bug 2815] net-snmp before v5.4 has circular library dependencies.
* [Bug 2821] Add a missing NTP_PRINTF and a missing const.
* [Bug 2822] New leap column in sntp broke NTP::Util.pm.
* [Bug 2824] Convert update-leap to perl. (also see 2769)
* [Bug 2825] Quiet file installation in html/ .
* [Bug 2830] ntpd doesn't always transfer the correct TAI offset via autokey
NTPD transfers the current TAI (instead of an announcement) now.
This might still needed improvement.
Update autokey data ASAP when 'sys_tai' changes.
Fix unit test that was broken by changes for autokey update.
Avoid potential signature length issue and use DPRINTF where possible
in ntp_crypto.c.
* [Bug 2832] refclock_jjy.c supports the TDC-300.
* [Bug 2834] Correct a broken html tag in html/refclock.html
* [Bug 2836] DFC77 patches from Frank Kardel to make decoding more
robust, and require 2 consecutive timestamps to be consistent.
* [Bug 2837] Allow a configurable DSCP value.
* [Bug 2837] add test for DSCP to ntpd/complete.conf.in
* [Bug 2842] Glitch in ntp.conf.def documentation stanza.
* [Bug 2842] Bug in mdoc2man.
* [Bug 2843] make check fails on 4.3.36
Fixed compiler warnings about numeric range overflow
(The original topic was fixed in a byplay to bug#2830)
* [Bug 2845] Harden memory allocation in ntpd.
* [Bug 2852] 'make check' can't find unity.h. Hal Murray.
* [Bug 2854] Missing brace in libntp/strdup.c. Masanari Iida.
* [Bug 2855] Parser fix for conditional leap smear code. Harlan Stenn.
* [Bug 2855] Report leap smear in the REFID. Harlan Stenn.
* [Bug 2855] Implement conditional leap smear code. Martin Burnicki.
* [Bug 2856] ntpd should wait() on terminated child processes. Paul Green.
* [Bug 2857] Stratus VOS does not support SIGIO. Paul Green.
* [Bug 2859] Improve raw DCF77 robustness deconding. Frank Kardel.
* [Bug 2860] ntpq ifstats sanity check is too stringent. Frank Kardel.
* html/drivers/driver22.html: typo fix. Harlan Stenn.
* refidsmear test cleanup. Tomasz Flendrich.
* refidsmear function support and tests. Harlan Stenn.
* sntp/tests/Makefile.am: remove g_nameresolution.cpp as it tested
something that was only in the 4.2.6 sntp. Harlan Stenn.
* Modified tests/bug-2803/Makefile.am so it builds Unity framework tests.
Damir Tomić
* Modified tests/libtnp/Makefile.am so it builds Unity framework tests.
Damir Tomić
* Modified sntp/tests/Makefile.am so it builds Unity framework tests.
Damir Tomić
* tests/sandbox/smeartest.c: Harlan Stenn, Damir Tomic, Juergen Perlinger.
* Converted from gtest to Unity: tests/bug-2803/. Damir Tomić
* Converted from gtest to Unity: tests/libntp/ a_md5encrypt, atoint.c,
atouint.c, authkeys.c, buftvtots.c, calendar.c, caljulian.c,
calyearstart.c, clocktime.c, hextoint.c, lfpfunc.c, modetoa.c,
numtoa.c, numtohost.c, refnumtoa.c, ssl_init.c, statestr.c,
timespecops.c, timevalops.c, uglydate.c, vi64ops.c, ymd2yd.c.
Damir Tomić
* Converted from gtest to Unity: sntp/tests/ kodDatabase.c, kodFile.c,
networking.c, keyFile.c, utilities.cpp, sntptest.h,
fileHandlingTest.h. Damir Tomić
* Initial support for experimental leap smear code. Harlan Stenn.
* Fixes to sntp/tests/fileHandlingTest.h.in. Harlan Stenn.
* Report select() debug messages at debug level 3 now.
* sntp/scripts/genLocInfo: treat raspbian as debian.
* Unity test framework fixes.
** Requires ruby for changes to tests.
* Initial support for PACKAGE_VERSION tests.
* sntp/libpkgver belongs in EXTRA_DIST, not DIST_SUBDIRS.
* tests/bug-2803/Makefile.am must distribute bug-2803.h.
* Add an assert to the ntpq ifstats code.
* Clean up the RLIMIT_STACK code.
* Improve the ntpq documentation around the controlkey keyid.
* ntpq.c cleanup.
* Windows port build cleanup.
---
NTP 4.2.8p2 (Harlan Stenn <stenn@ntp.org>, 2015/04/07)
Focus: Security and Bug fixes, enhancements.

View File

@ -0,0 +1,272 @@
Leap Second Smearing with NTP
-----------------------------
By Martin Burnicki
with some edits by Harlan Stenn
The NTP software protocol and its reference implementation, ntpd, were
originally designed to distribute UTC time over a network as accurately as
possible.
Unfortunately, leap seconds are scheduled to be inserted into or deleted
from the UTC time scale in irregular intervals to keep the UTC time scale
synchronized with the Earth rotation. Deletions haven't happened, yet, but
insertions have happened over 30 times.
The problem is that POSIX requires 86400 seconds in a day, and there is no
prescribed way to handle leap seconds in POSIX.
Whenever a leap second is to be handled ntpd either:
- passes the leap second announcement down to the OS kernel (if the OS
supports this) and the kernel handles the leap second automatically, or
- applies the leap second correction itself.
NTP servers also pass a leap second warning flag down to their clients via
the normal NTP packet exchange, so clients also become aware of an
approaching leap second, and can handle the leap second appropriately.
The Problem on Unix-like Systems
--------------------------------
If a leap second is to be inserted then in most Unix-like systems the OS
kernel just steps the time back by 1 second at the beginning of the leap
second, so the last second of the UTC day is repeated and thus duplicate
timestamps can occur.
Unfortunately there are lots of applications which get confused it the
system time is stepped back, e.g. due to a leap second insertion. Thus,
many users have been looking for ways to avoid this, and tried to introduce
workarounds which may work properly, or not.
So even though these Unix kernels normally can handle leap seconds, the way
they do this is not optimal for applications.
One good way to handle the leap second is to use ntp_gettime() instead of
the usual calls, because ntp_gettime() includes a "clock state" variable
that will actually tell you if the time you are receiving is OK or not, and
if it is OK, if the current second is an in-progress leap second. But even
though this mechanism has been available for about 20 years' time, almost
nobody uses it.
NTP Client for Windows Contains a Workaround
--------------------------------------------
The Windows system time knows nothing about leap seconds, so for many years
the Windows port of ntpd provides a workaround where the system time is
slewed by the client to compensate the leap second.
Thus it is not required to use a smearing NTP server for Windows clients,
but of course the smearing server approach also works.
The Leap Smear Approach
-----------------------
Due to the reasons mentioned above some support for leap smearing has
recently been implemented in ntpd. This means that to insert a leap second
an NTP server adds a certain increasing "smear" offset to the real UTC time
sent to its clients, so that after some predefined interval the leap second
offset is compensated. The smear interval should be long enough,
e.g. several hours, so that NTP clients can easily follow the clock drift
caused by the smeared time.
During the period while the leap smear is being performed, ntpd will include
a specially-formatted 'refid' in time packets that contain "smeared" time.
This refid is of the form 254.x.y.z, where x.y.z are 24 encoded bits of the
smear value.
With this approach the time an NTP server sends to its clients still matches
UTC before the leap second, up to the beginning of the smear interval, and
again corresponds to UTC after the insertion of the leap second has
finished, at the end of the smear interval. By examining the first byte of
the refid, one can also determine if the server is offering smeared time or
not.
Of course, clients which receive the "smeared" time from an NTP server don't
have to (and even must not) care about the leap second anymore. Smearing is
just transparent to the clients, and the clients don't even notice there's a
leap second.
Pros and Cons of the Smearing Approach
--------------------------------------
The disadvantages of this approach are:
- During the smear interval the time provided by smearing NTP servers
differs significantly from UTC, and thus from the time provided by normal,
non-smearing NTP servers. The difference can be up to 1 second, depending
on the smear algorithm.
- Since smeared time differs from true UTC, and many applications require
correct legal time (UTC), there may be legal consequences to using smeared
time. Make sure you check to see if this requirement affects you.
However, for applications where it's only important that all computers have
the same time and a temporary offset of up to 1 s to UTC is acceptable, a
better approach may be to slew the time in a well defined way, over a
certain interval, which is what we call smearing the leap second.
The Motivation to Implement Leap Smearing
-----------------------------------------
Here is some historical background for ntpd, related to smearing/slewing
time.
Up to ntpd 4.2.4, if kernel support for leap seconds was either not
available or was not enabled, ntpd didn't care about the leap second at all.
So if ntpd was run with -x and thus kernel support wasn't used, ntpd saw a
sudden 1 s offset after the leap second and normally would have stepped the
time by -1 s a few minutes later. However, 'ntpd -x' does not step the time
but "slews" the 1-second correction, which takes 33 minutes and 20 seconds
to complete. This could be considered a bug, but certainly this was only an
accidental behavior.
However, as we learned in the discussion in http://bugs.ntp.org/2745, this
behavior was very much appreciated since indeed the time was never stepped
back, and even though the start of the slewing was somewhat undefined and
depended on the poll interval. The system time was off by 1 second for
several minutes before slewing even started.
In ntpd 4.2.6 some code was added which let ntpd step the time at UTC
midnight to insert a leap second, if kernel support was not used.
Unfortunately this also happened if ntpd was started with -x, so the folks
who expected that the time was never stepped when ntpd was run with -x found
this wasn't true anymore, and again from the discussion in NTP bug 2745 we
learn that there were even some folks who patched ntpd to get the 4.2.4
behavior back.
In 4.2.8 the leap second code was rewritten and some enhancements were
introduced, but the resulting code still showed the behavior of 4.2.6,
i.e. ntpd with -x would still step the time. This has only recently been
fixed in the current ntpd stable code, but this fix is only available with a
certain patch level of ntpd 4.2.8.
So a possible solution for users who were looking for a way to come over the
leap second without the time being stepped could have been to check the
version of ntpd installed on each of their systems. If it's still 4.2.4 be
sure to start the client ntpd with -x. If it's 4.2.6 or 4.2.8 it won't work
anyway except if you had a patched ntpd version instead of the original
version. So you'd need to upgrade to the current -stable code to be able to
run ntpd with -x and get the desired result, so you'd still have the
requirement to check/update/configure every single machine in your network
that runs ntpd.
Google's leap smear approach is a very efficient solution for this, for
sites that do not require correct timestamps for legal purposes. You just
have to take care that your NTP servers support leap smearing and configure
those few servers accordingly. If the smear interval is long enough so that
NTP clients can follow the smeared time it doesn't matter at all which
version of ntpd is installed on a client machine, it just works, and it even
works around kernel bugs due to the leap second.
Since all clients follow the same smeared time the time difference between
the clients during the smear interval is as small as possible, compared to
the -x approach. The current leap second code in ntpd determines the point
in system time when the leap second is to be inserted, and given a
particular smear interval it's easy to determine the start point of the
smearing, and the smearing is finished when the leap second ends, i.e. the
next UTC day begins.
The maximum error doesn't exceed what you'd get with the old smearing caused
by -x in ntpd 4.2.4, so if users could accept the old behavior they would
even accept the smearing at the server side.
In order to affect the local timekeeping as little as possible the leap
smear support currently implemented in ntpd does not affect the internal
system time at all. Only the timestamps and refid in outgoing reply packets
*to clients* are modified by the smear offset, so this makes sure the basic
functionality of ntpd is not accidentally broken. Also peer packets
exchanged with other NTP servers are based on the real UTC system time and
the normal refid, as usual.
The leap smear implementation is optionally available in ntp-4.2.8p3 and
later, and the changes can be tracked via http://bugs.ntp.org/2855.
Using NTP's Leap Second Smearing
--------------------------------
- Leap Second Smearing MUST NOT be used for public servers, e.g. servers
provided by metrology institutes, or servers participating in the NTP pool
project. There would be a high risk that NTP clients get the time from a
mixture of smearing and non-smearing NTP servers which could result in
undefined client behavior. Instead, leap second smearing should only be
configured on time servers providing dedicated clients with time, if all
those clients can accept smeared time.
- Leap Second Smearing is NOT configured by default. The only way to get
this behavior is to invoke the ./configure script from the NTP source code
package with the --enable-leap-smear parameter before the executables are
built.
- Even if ntpd has been compiled to enable leap smearing support, leap
smearing is only done if explicitly configured.
- The leap smear interval should be at least several hours' long, and up to
1 day (86400s). If the interval is too short then the applied smear offset
is applied too quickly for clients to follow. 86400s (1 day) is a good
choice.
- If several NTP servers are set up for leap smearing then the *same* smear
interval should be configured on each server.
- Smearing NTP servers DO NOT send a leap second warning flag to client time
requests. Since the leap second is applied gradually the clients don't even
notice there's a leap second being inserted, and thus there will be no log
message or similar related to the leap second be visible on the clients.
- Since clients don't (and must not) become aware of the leap second at all,
clients getting the time from a smearing NTP server MUST NOT be configured
to use a leap second file. If they had a leap second file they would apply
the leap second twice: the smeared one from the server, plus another one
inserted by themselves due to the leap second file. As a result, the
additional correction would soon be detected and corrected/adjusted.
- Clients MUST NOT be configured to poll both smearing and non-smearing NTP
servers at the same time. During the smear interval they would get
different times from different servers and wouldn't know which server(s) to
accept.
Setting Up A Smearing NTP Server
--------------------------------
If an NTP server should perform leap smearing then the leap smear interval
(in seconds) needs to be specified in the NTP configuration file ntp.conf,
e.g.:
leapsmearinterval 86400
Please keep in mind the leap smear interval should be between several and 24
hours' long. With shorter values clients may not be able to follow the
drift caused by the smeared time, and with longer values the discrepancy
between system time and UTC will cause more problems when reconciling
timestamp differences.
When ntpd starts and a smear interval has been specified then a log message
is generated, e.g.:
ntpd[31120]: config: leap smear interval 86400 s
While ntpd is running with a leap smear interval specified the command:
ntpq -c rv
reports the smear status, e.g.:
# ntpq -c rv
associd=0 status=4419 leap_add_sec, sync_uhf_radio, 1 event, leap_armed,
version="ntpd 4.2.8p3-RC1@1.3349-o Mon Jun 22 14:24:09 UTC 2015 (26)",
processor="i586", system="Linux/3.7.1", leap=01, stratum=1,
precision=-18, rootdelay=0.000, rootdisp=1.075, refid=MRS,
reftime=d93dab96.09666671 Tue, Jun 30 2015 23:58:14.036,
clock=d93dab9b.3386a8d5 Tue, Jun 30 2015 23:58:19.201, peer=2335,
tc=3, mintc=3, offset=-0.097015, frequency=44.627, sys_jitter=0.003815,
clk_jitter=0.451, clk_wander=0.035, tai=35, leapsec=201507010000,
expire=201512280000, leapsmearinterval=86400, leapsmearoffset=-932.087
In the example above 'leapsmearinterval' reports the configured leap smear
interval all the time, while the 'leapsmearoffset' value is 0 outside the
interval and increases from 0 to -1000 ms over the interval. So this can be
used to monitor if and how the time sent to clients is smeared. With a
leapsmearoffset of -.932087, the refid reported in smeared packets would be
254.196.88.176.

796
contrib/ntp/aclocal.m4 vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -20,6 +19,61 @@
# subdir to warn folks if there is another version there.
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -42,9 +96,6 @@ bin_PROGRAMS =
libexec_PROGRAMS =
sbin_PROGRAMS =
EXTRA_PROGRAMS = adjtimed$(EXEEXT)
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/bincheck.mf $(top_srcdir)/depsver.mf \
$(top_srcdir)/includes.mf $(top_srcdir)/sntp/check-libntp.mf
subdir = adjtimed
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@ -76,6 +127,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -85,6 +137,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@ -98,9 +151,22 @@ adjtimed_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
adjtimed_DEPENDENCIES = ../libntp/libntp.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/sntp/libevent/build-aux/depcomp
am__depfiles_maybe = depfiles
@ -111,26 +177,48 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = adjtimed.c
DIST_SOURCES = adjtimed.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bincheck.mf \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf \
$(top_srcdir)/sntp/libevent/build-aux/depcomp README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -181,6 +269,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -297,6 +386,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -418,7 +508,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/bincheck.mf $(top_sr
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign adjtimed/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign adjtimed/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -427,6 +516,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_srcdir)/bincheck.mf $(top_srcdir)/sntp/check-libntp.mf $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@ -438,14 +528,19 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -466,7 +561,8 @@ uninstall-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
@ -481,14 +577,19 @@ clean-binPROGRAMS:
rm -f $$list
install-libexecPROGRAMS: $(libexec_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -509,7 +610,8 @@ uninstall-libexecPROGRAMS:
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
@ -524,14 +626,19 @@ clean-libexecPROGRAMS:
rm -f $$list
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -552,7 +659,8 @@ uninstall-sbinPROGRAMS:
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(sbindir)" && rm -f $$files
@ -565,7 +673,8 @@ clean-sbinPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
adjtimed$(EXEEXT): $(adjtimed_OBJECTS) $(adjtimed_DEPENDENCIES)
adjtimed$(EXEEXT): $(adjtimed_OBJECTS) $(adjtimed_DEPENDENCIES) $(EXTRA_adjtimed_DEPENDENCIES)
@rm -f adjtimed$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(adjtimed_OBJECTS) $(adjtimed_LDADD) $(LIBS)
@ -580,26 +689,23 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
@ -607,26 +713,15 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -638,15 +733,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -655,6 +746,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -708,10 +814,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -801,22 +912,25 @@ uninstall-am: uninstall-binPROGRAMS uninstall-libexecPROGRAMS \
.MAKE: all check install install-am install-exec-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libexecPROGRAMS clean-libtool \
clean-sbinPROGRAMS ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-exec-hook \
install-html install-html-am install-info install-info-am \
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
clean-binPROGRAMS clean-generic clean-libexecPROGRAMS \
clean-libtool clean-sbinPROGRAMS cscopelist-am ctags ctags-am \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-exec-hook install-html \
install-html-am install-info install-info-am \
install-libexecPROGRAMS install-man install-pdf install-pdf-am \
install-ps install-ps-am install-sbinPROGRAMS install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-libexecPROGRAMS uninstall-sbinPROGRAMS
.PRECIOUS: Makefile
install-exec-hook:
@test -z "${bin_PROGRAMS}${bin_SCRIPTS}" \

View File

@ -50,6 +50,7 @@ AUTORECONF=${AUTORECONF:-autoreconf}
# ;;
# esac
## Old way
# 20060629: HMS: Let's try checking in libopts and the autogen-generated files
## The copy for ntp...
#rm -rf libopts*
@ -64,22 +65,34 @@ AUTORECONF=${AUTORECONF:-autoreconf}
# tar -xvf -
# mv libopts-*.*.* libopts )
def_files=`find [B-Za-z]* -type f -name '*.def' -print | fgrep -v /SCCS/`
prog_opt_files=`grep -l '^prog.name' $def_files`
## EOOld way
## Unity test runners
# the ruby generator must be older than the test files.
# the test files must be older than the runner files.
runner_files=`find [B-Za-z]* -type f -name 'run-*' -print | fgrep -v /SCCS/`
l=
lt=
lr=
for f in ${runner_files}
do
fb=`echo $f | sed -e 's/run-//'`
lt="$lt $fb"
lr="$lr $f" # Yes, lr and runner_files are eventually the same
done
touch $lt
echo "Touching <$lt>"
sleep 1
touch $lr
echo "Touching <$lr>"
## EOUnity test runners
## AutoGen stuff
#incdir=${PWD}/include
#for f in ${prog_opt_files}
#do
# ( cd $(dirname ${f})
# echo "Running autogen on $f..."
# autogen -L${incdir} $(basename ${f})
# ) || exit 1
#done
## Non-AutoGen stuff
def_files=`find [B-Za-z]* -type f -name '*.def' -print | fgrep -v /SCCS/`
prog_opt_files=`grep -l '^prog.name' $def_files`
# touch the stuff generated by the opt files
@ -129,6 +142,8 @@ esac
## EOAutoGen stuff
## Yacc/bison files
# Yacc/bison files ntp_parser.[ch] so we don't require the tool if
# ntp_parser.y hasn't been updated. At the same time, keyword-gen-utd
# and ntp_keyword.h which are derived from ntp_parser.h and
@ -136,6 +151,8 @@ esac
touch ntpd/ntp_parser.[ch] ntpd/keyword-gen-utd ntpd/ntp_keyword.h
## EOYacc/bison files
cp bincheck.mf sntp/
cp depsver.mf sntp/

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -16,6 +15,61 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -35,9 +89,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
EXTRA_PROGRAMS = propdelay$(EXEEXT) chutest$(EXEEXT)
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf
subdir = clockstuff
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@ -69,6 +120,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -78,6 +130,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@ -89,14 +142,27 @@ chutest_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
chutest_DEPENDENCIES = ../libntp/libntp.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
propdelay_SOURCES = propdelay.c
propdelay_OBJECTS = propdelay.$(OBJEXT)
am__DEPENDENCIES_2 = ../libntp/libntp.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
propdelay_DEPENDENCIES = $(am__DEPENDENCIES_2)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/sntp/libevent/build-aux/depcomp
am__depfiles_maybe = depfiles
@ -107,26 +173,47 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = chutest.c propdelay.c
DIST_SOURCES = chutest.c propdelay.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depsver.mf \
$(top_srcdir)/includes.mf $(top_srcdir)/sntp/check-libntp.mf \
$(top_srcdir)/sntp/libevent/build-aux/depcomp README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -177,6 +264,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -293,6 +381,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -416,7 +505,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/sntp/check-libntp.mf
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign clockstuff/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign clockstuff/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -425,6 +513,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_srcdir)/sntp/check-libntp.mf $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@ -443,10 +532,12 @@ clean-noinstPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
chutest$(EXEEXT): $(chutest_OBJECTS) $(chutest_DEPENDENCIES)
chutest$(EXEEXT): $(chutest_OBJECTS) $(chutest_DEPENDENCIES) $(EXTRA_chutest_DEPENDENCIES)
@rm -f chutest$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(chutest_OBJECTS) $(chutest_LDADD) $(LIBS)
propdelay$(EXEEXT): $(propdelay_OBJECTS) $(propdelay_DEPENDENCIES)
propdelay$(EXEEXT): $(propdelay_OBJECTS) $(propdelay_DEPENDENCIES) $(EXTRA_propdelay_DEPENDENCIES)
@rm -f propdelay$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(propdelay_OBJECTS) $(propdelay_LDADD) $(LIBS)
@ -462,26 +553,23 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
@ -489,26 +577,15 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -520,15 +597,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -537,6 +610,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -587,10 +675,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -677,18 +770,21 @@ uninstall-am:
.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstPROGRAMS ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
check-libntp: ../libntp/libntp.a

View File

@ -333,6 +333,9 @@
/* Define to 1 if you have the <arpa/nameser.h> header file. */
#undef HAVE_ARPA_NAMESER_H
/* Define to 1 if you have the `atomic_thread_fence' function. */
#undef HAVE_ATOMIC_THREAD_FENCE
/* Do we have audio support? */
#undef HAVE_AUDIO
@ -386,6 +389,9 @@
/* Define to 1 if you have the <errno.h> header file. */
#undef HAVE_ERRNO_H
/* Define to 1 if you have the `EVP_MD_do_all_sorted' function. */
#undef HAVE_EVP_MD_DO_ALL_SORTED
/* Define to 1 if you have the `fchmod' function. */
#undef HAVE_FCHMOD
@ -821,6 +827,9 @@
/* Define to 1 if you have the <stdarg.h> header file. */
#undef HAVE_STDARG_H
/* Define to 1 if you have the <stdatomic.h> header file. */
#undef HAVE_STDATOMIC_H
/* Define to 1 if you have the <stdbool.h> header file. */
#undef HAVE_STDBOOL_H
@ -1315,6 +1324,9 @@
/* define to 1 if library is thread safe */
#undef LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE
/* leap smear mechanism */
#undef LEAP_SMEAR
/* Define to any value to include libseccomp sandboxing. */
#undef LIBSECCOMP
@ -1473,8 +1485,8 @@
/* Do we want the SCO clock hacks? */
#undef SCO5_CLOCK
/* The size of `char*', as computed by sizeof. */
#undef SIZEOF_CHARP
/* The size of `char *', as computed by sizeof. */
#undef SIZEOF_CHAR_P
/* The size of `int', as computed by sizeof. */
#undef SIZEOF_INT

1534
contrib/ntp/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -65,6 +65,7 @@ ntp_jupiter_ok=${ntp_jupiter_ok=no}
NTP_PROG_CC
AC_PROG_CPP
# Do we need CXX for anything besides google test?
AC_PROG_CXX
AC_PROG_YACC
AC_PROG_CC_C_O
@ -180,6 +181,15 @@ case "$PROG_NET_SNMP_CONFIG" in
esac
AC_MSG_RESULT([$PATH_NET_SNMP_CONFIG])
case "$PATH_NET_SNMP_CONFIG" in
/*) AC_CACHE_CHECK(
[for net-snmp version],
[ntp_cv_net_snmp_version],
[ntp_cv_net_snmp_version=`$PATH_NET_SNMP_CONFIG --version`]
)
;;
esac
case "$host" in
*-*-vxworks*)
ac_link="$ac_link $VX_KERNEL"
@ -291,7 +301,7 @@ AC_CHECK_HEADER(
AC_CHECK_HEADERS([fcntl.h fnmatch.h ieeefp.h inttypes.h kvm.h math.h])
AC_CHECK_HEADERS([memory.h netdb.h poll.h])
AC_CHECK_HEADERS([sgtty.h stdlib.h string.h termio.h])
AC_CHECK_HEADERS([sgtty.h stdatomic.h stdlib.h string.h termio.h])
AC_CHECK_HEADERS([termios.h timepps.h timex.h unistd.h])
case "$host" in
@ -375,6 +385,28 @@ case "$host" in
;;
esac
case "$ac_cv_header_stdatomic_h" in
yes)
AC_CHECK_FUNCS([atomic_thread_fence])
AC_CACHE_CHECK(
[for atomic_thread_fence()],
[ntp_cv_func_atomic_thread_fence],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <stdatomic.h>
]],
[[
atomic_thread_fence(memory_order_seq_cst);
]]
)]
[ntp_cv_func_atomic_thread_fence=yes],
[ntp_cv_func_atomic_thread_fence=no]
)]
)
;;
esac
case "$host" in
*-*-solaris2.6)
# Broken...
@ -3426,6 +3458,9 @@ AC_CACHE_CHECK(
*-sni-sysv*)
ans=dosynctodr
;;
*-stratus-vos)
ans=no
;;
*-*-aix*)
ans=dosynctodr
;;
@ -3480,6 +3515,9 @@ AC_CACHE_CHECK(
*-sni-sysv*)
ans=noprintf
;;
*-stratus-vos)
ans=no
;;
*-*-aix*)
ans=noprintf
;;
@ -3873,6 +3911,11 @@ case "$ans" in
case "$PATH_NET_SNMP_CONFIG" in
/*)
SNMP_LIBS=`$PATH_NET_SNMP_CONFIG --agent-libs`
# Bug 2815. This is a bit of a hack, but it works...
case "$ntp_cv_net_snmp_version" in
5.3*) SNMP_LIBS=`echo $SNMP_LIBS | $SED -e 's/-lnetsnmpagent/-lnetsnmpagent -lnetsnmpmibs/'`
;;
esac
AC_SUBST([SNMP_LIBS])
# HMS: we really want to separate CPPFLAGS and CFLAGS
foo=`$PATH_NET_SNMP_CONFIG --cflags`
@ -3986,6 +4029,9 @@ case "$host" in
*-sni-sysv*)
ans=yes
;;
*-stratus-vos)
ans=no
;;
*-univel-sysv*)
ans=no
;;
@ -4306,6 +4352,31 @@ esac
AM_CONDITIONAL([SAVECONFIG_ENABLED], [test x$ntp_saveconfig_enabled = x1])
AC_MSG_RESULT([$ntp_ok])
###
AC_MSG_CHECKING([if we want the experimental leap smear code])
AC_ARG_ENABLE(
[leap-smear],
[AS_HELP_STRING(
[--enable-leap-smear],
[- experimental leap smear code]
)],
[ntp_ok=$enableval],
[ntp_ok=no]
)
ntp_leap_smear_enabled=0
case "$ntp_ok" in
yes)
ntp_leap_smear_enabled=1
AC_DEFINE([LEAP_SMEAR], [1], [leap smear mechanism])
AC_SUBST([HAVE_LEAPSMEARINTERVAL])
HAVE_LEAPSMEARINTERVAL="leapsmearinterval 0"
;;
esac
AC_MSG_RESULT([$ntp_ok])
NTP_UNITYBUILD
dnl gtest is needed for our tests subdirs. It would be nice if we could
dnl require a C++ compiler only if we will use gtest, but AC_PROG_CXX
dnl can't be conditionalized.
@ -4326,7 +4397,7 @@ AC_CONFIG_FILES([kernel/sys/Makefile])
AC_CONFIG_FILES([libntp/Makefile])
AC_CONFIG_FILES([libparse/Makefile])
AC_CONFIG_FILES([ntpd/Makefile])
AC_CONFIG_FILES([ntpd/complete.conf], [sed -e '/^rlimit$/d' < ntpd/complete.conf > ntpd/complete.conf.new && mv ntpd/complete.conf.new ntpd/complete.conf])
AC_CONFIG_FILES([ntpd/complete.conf], [sed -e '/^rlimit$/d' -e '/^$/d' < ntpd/complete.conf > ntpd/complete.conf.new && mv ntpd/complete.conf.new ntpd/complete.conf])
AC_CONFIG_FILES([ntpdate/Makefile])
AC_CONFIG_FILES([ntpdc/Makefile])
AC_CONFIG_FILES([ntpdc/nl.pl], [chmod +x ntpdc/nl.pl])
@ -4349,9 +4420,13 @@ AC_CONFIG_FILES([scripts/ntpver], [chmod +x scripts/ntpver])
AC_CONFIG_FILES([scripts/plot_summary], [chmod +x scripts/plot_summary])
AC_CONFIG_FILES([scripts/summary], [chmod +x scripts/summary])
AC_CONFIG_FILES([scripts/update-leap/Makefile])
AC_CONFIG_FILES([scripts/update-leap/update-leap], [chmod +x scripts/update-leap/update-leap])
AC_CONFIG_FILES([tests/Makefile])
AC_CONFIG_FILES([tests/bug-2803/Makefile])
AC_CONFIG_FILES([tests/libntp/Makefile])
AC_CONFIG_FILES([tests/ntpd/Makefile])
AC_CONFIG_FILES([tests/sandbox/Makefile])
AC_CONFIG_FILES([tests/sec-2853/Makefile])
AC_CONFIG_FILES([util/Makefile])
perllibdir="${datadir}/ntp/lib"

View File

@ -80,7 +80,7 @@
<dd>Specifies PPS capture on the rising (assert) pulse edge if 0 (default) or falling
(clear) pulse edge if 1. Not used under Windows - if the special <tt>serialpps.sys</tt> serial port driver is installed then the leading edge will <i>always</i> be used.</dd>
<dt><tt>flag3 0 | 1</tt></dt>
<dd>Controls the kernel PPS discipline: 0 for disable (default), 1 for enable. Not used under Windows - if the special <tt>serialpps.sys<\tt> serial port driver is used then kernel PPS will be available and used.</dd>
<dd>Controls the kernel PPS discipline: 0 for disable (default), 1 for enable. Not used under Windows - if the special <tt>serialpps.sys</tt> serial port driver is used then kernel PPS will be available and used.</dd>
<dt><tt>flag4 0 | 1</tt></dt>
<dd>Record a timestamp once for each second if 1. Useful for constructing
Allan deviation plots.</dd>

View File

@ -0,0 +1,534 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta name="generator" content="HTML Tidy, see www.w3.org">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JJY Receivers</title>
<link rev="made" href="http://www.bea.hi-ho.ne.jp/abetakao/">
<link rel="start" href="http://www.eecis.udel.edu/~mills/ntp/html/refclock.html">
<link href="scripts/style.css" type="text/css" rel="stylesheet">
</head>
<body>
<h3>JJY Receivers</h3>
<p>Last update:
<!-- #BeginDate format:En2m -->15-May-2015 00:00<!-- #EndDate -->
UTC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="driver40.html">ENGLISH英語</a> &nbsp; <a href="driver40-ja.html">JAPANESE日本語</a></p>
<hr>
<h4>Synopsis</h4>
Address: 127.127.40.<em>u</em><br>
Reference ID: <code>JJY</code><br>
Driver ID: <code>JJY</code><br>
Serial Port: <code>/dev/jjy<em>u</em></code>; それぞれのJJY受信機、GPS時計、テレフォンJJYを参照して下さい。
<h4>Description</h4>
<p>このドライバーは、以下の、日本で販売されている JJY受信機、GPS時計と、電話回線による時刻配信サービスをサポートしています。
</p>
<table width="100%">
<tr>
<td width="50%" style="vertical-align:top;">
<a href="#mode-1">トライステート &nbsp; TS-JJY01, TS-JJY02</a><br>
<a href="#mode-2">シーデックス &nbsp; JST2000</a><br>
<a href="#mode-3">エコー計測器 &nbsp; LT-2000</a><br>
<a href="#mode-4">シチズンTIC &nbsp; JJY-200</a><br>
<a href="#mode-5">トライステート &nbsp; TS-GPSclock-01</a><br>
</td>
<td width="50%" style="vertical-align:top; border-left:solid; padding:0px 0px 0px 10px;">
<a href="#mode-6">セイコー タイム システム &nbsp; TDC-300</a><br>
<a href="#mode-100">テレフォンJJY</a><br>
</td>
</tr>
</table>
<ul>
<li>
<p><a name="mode-1">トライステート &nbsp; TS-JJY01, TS-JJY02</a> &nbsp; <a href="http://www.tristate.ne.jp/">http://www.tristate.ne.jp/</a> (日本語)</p><br>
<dl>
<dt>NTPの設定 ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 1</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN &nbsp; flag1 0|1</dt>
<dd>
<p>Time1 は、受信機からの時刻に加算する調整時間を、固定小数点形式の秒で設定します。<br>
この受信機には、数10ミリ秒 ( 0.0NN秒 ) から百数10ミリ秒 ( 0.1NN秒 ) の調整時間を設定すると良いでしょう。</p>
<p>Flag1 は、時刻同期には無関係です。Flag1 を 1 に設定すると、状態を問い合わせるコマンドを DATE コマンドと STIM コマンドの前に発行して、応答を clockstats ファイルに記録します。</p>
<table border="1" summary="fudge flag1">
<tr><td>0 (Default)</td><td>DCST と STUS コマンドは、発行しません。</td></tr>
<tr><td>1</td><td>DCST と STUS コマンドを、発行します。</td></tr>
</table>
</dd>
</dl>
<br>
</dd>
<dt>インターフェース</dt>
<dd>
<p>RS-232C, 9600 BPS, 8ビット, パリティなし, 1ストップ・ビット</p>
<br>
</dd>
<dt>日時データの形式</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>コマンド</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>応答</td>
</tr>
<tr>
<td><code>dcst{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>valid{CR}{LF} | invalid{CR}{LF}</code></td>
</tr>
<tr>
<td><code>stus{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>adjusted{CR}{LF} | unadjusted{CR}{LF}</code></td>
</tr>
<tr>
<td><code>time{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
<tr>
<td><code>date{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>YYYY/MM/DD WWW{CR}{LF}</code></td>
</tr>
<tr>
<td><code>stim{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
</table>
<p>日付と時刻は、別々に問い合わせます。日付が深夜0時の前か後かの不確定をチェックするため、日付の問い合わせの前後に時刻を問い合わせています。</p><br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-2">シーデックス &nbsp; JST2000</a> &nbsp; <a href="http://www.c-dex.co.jp/">http://www.c-dex.co.jp/</a> (日本語)</p><br>
<dl>
<dt>NTPの設定 ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 2</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>インターフェース</dt>
<dd>
<p>RS-232C, 9600 BPS, 8ビット, パリティなし, 1ストップ・ビット</p>
<br>
</dd>
<dt>日時データの形式</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>コマンド</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>応答</td>
</tr>
<tr>
<td><code>{ENQ}1J{ETX}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>{STX}JYYMMDD HHMMSSS{ETX}</code></td>
</tr>
</table>
<br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-3">エコー計測器 &nbsp; LT-2000</a> &nbsp; <a href="http://www.clock.co.jp/">http://www.clock.co.jp/</a> (日本語)</p><br>
<dl>
<dt>NTPの設定 ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 3</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>Interface</dt>
<dd>
<p>RS-232C, 9600 BPS, 8ビット, パリティなし, 1ストップ・ビット</p>
<br>
</dd>
<dt>Time code format</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>コマンド</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>応答</td>
</tr>
<tr>
<td><code>C</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>( Mode 2 : Continuous )</td>
</tr>
<tr>
<td>( Every second before 0.5 second )</td>
<td></td>
<td><code>YYMMDDWHHMMSS{ST1}{ST2}{ST3}{ST4}{CR}</code></td>
</tr>
<tr>
<td><code>#</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>( Mode 1 : Request&amp;Send )</td>
</tr>
</table>
<br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-4">シチズンTIC &nbsp; JJY-200</a> &nbsp; <a href="http://www.tic-citizen.co.jp/">http://www.tic-citizen.co.jp/</a> (日本語)</p><br>
<dl>
<dt>NTPの設定 ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 4</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>インターフェース</dt>
<dd>
<p>RS-232C, 4800 BPS, 8ビット, パリティなし, 1ストップ・ビット</p>
<br>
</dd>
<dt>日時データの形式</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>コマンド</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>応答</td>
</tr>
<tr>
<td>( Every second )</td>
<td></td>
<td><code>'XX YY/MM/DD W HH:MM:SS{CR}</code></td>
</tr>
</table>
<br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-5">トライステート &nbsp; TS-GPSclock-01</a> &nbsp; <a href="http://www.tristate.ne.jp/">http://www.tristate.ne.jp/</a> (日本語)</p>
<p>このドライバーは、JJY受信機ではないGPS時計のトライステート TS-GPSclock-01 のコマンド・レスポンス・モードをサポートします。<br>
TS-GPSclock-01 は、オンボードのスイッチとメニューでコマンド・レスポンス・モードとタイム・ゾーンをJST日本標準時に設定しなければなりまん。<br>
この Type 40 のドライバーの他, TS-GPSclock-01 のNMEAモードは、<a href="driver20.html">一般 NMEA GPS ドライバー ( Type 20 )</a> でも利用することができます。</p>
<dl>
<dt>NTPの設定 ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 5</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN &nbsp; flag1 0|1</dt>
<dd>
<p>Time1 は、受信機からの時刻に加算する調整時間を、固定小数点形式の秒で設定します</p>
<p>Flag1 は、時刻同期には無関係です。Flag1 を 1 に設定すると、状態を問い合わせるコマンドを DATE コマンドと STIM コマンドの前に発行して、応答を clockstats ファイルに記録します。</p>
<table border="1" summary="fudge flag1">
<tr><td>0 (Default)</td><td>STUS コマンドは、発行しません。</td></tr>
<tr><td>1</td><td>STUS コマンドを、発行します。</td></tr>
</table>
</dd>
</dl>
<br>
</dd>
<dt>インターフェース</dt>
<dd>
<p>USB ( /dev/ttyACM<em>0</em> )</p>
<br>
</dd>
<dt>日時データの形式</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>コマンド</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>応答</td>
</tr>
<tr>
<td><code>stus{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>*R{CR}{LF} | *G{CR}{LF} | *U{CR}{LF} | +U{CR}{LF}</code></td>
</tr>
<tr>
<td><code>time{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
<tr>
<td><code>date{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>YYYY/MM/DD{CR}{LF}</code></td>
</tr>
<tr>
<td><code>time{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
</table>
<p>日付と時刻は、別々に問い合わせます。日付が深夜0時の前か後かの不確定をチェックするため、日付の問い合わせの前後に時刻を問い合わせています。</p><br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-6">セイコー タイム システム &nbsp; TDC-300</a> &nbsp; <a href="http://www.seiko-sts.co.jp/">http://www.seiko-sts.co.jp/</a> (英語と日本語)</p><br>
<p>TDC-300 は、フロント・パネルのメニュー表示とスイッチで type 3 のデータ形式に設定しなければなりません。</p>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 6</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>インターフェース</dt>
<dd>
<p>RS-232C, 2400 BPS, 8-bits, no parity, 1 stop bit</p>
<br>
</dd>
<dt>日時データの形式</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>コマンド</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>応答</td>
</tr>
<tr>
<td></td>
<td></td>
<td><code>{STX}YYMMDDWHHMMSS{ETX}</code></td>
</tr>
<tr>
<td>( 5 to 10 mSec. before second )</td>
<td></td>
<td><code>{STX}{xE5}{ETX}</code></td>
</tr>
</table>
<br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-100">テレフォンJJY</a> &nbsp; <a href="http://jjy.nict.go.jp/">http://jjy.nict.go.jp/</a> (英語と日本語)</p>
<p>テレフォンJJYは、電話回線による時刻配信サービスです。<br>
このサービスは、国立研究開発法人 情報通信研究機構が提供しています。</p>
<p>注意 このモードテレフォンJJYは、refclock_acts ( Type 18 ) のドライバーと同時に利用することはできません。
設定ファイルの phone は、server と関係付けられていないため、ドライバーの refclock_acts ( type 18 ) も、この refclock_jjy ( type 40, mode 100 to 180 ) のいずれも、
複数の phone のうち、どれが自分に関係するものか識別できないからです。</p>
<dl>
<dt>NTPの設定 ( ntp.conf )</dt>
<dd>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode (100, 101 to 180) &nbsp; minpoll N</dt>
<dd>
<p>モード 100 を設定した場合、このドライバーは、遅延を計測するためのループバック・コマンドは発行せず、電話回線とシステムの処理による遅延は調整しません。<br>
モード 101 から 180 を設定した場合、このドライバーは、ループバック・コマンドを発行して、テレフォンJJYのループバック回路を通して電話回線とシステムの処理による遅延を計測します。<br>
テレフォンJJYのループバック回路を経由した往復の時間は、5回、計測されます。
それぞれの遅延時間のうち、700ミリ秒を超えたものは、平均遅延時間の計算より除外されます。
また、700ミリ秒以下の有効な遅延時間が、3回以上の場合は、そのうち、最大の遅延時間は、平均遅延時間の計算より除外され、
4回以上の場合は、そのうち、最小の遅延時間は、平均遅延時間の計算より除外されます。
調整時間は、往復時間 × ( モード番号 - 100 ) % で計算し、同期する時刻に加算されます。<br>
モード 101 から 180 を設定して自動遅延補正を選択するなら、モード 145 から 165 が良いでしょう。</p>
<p>デフォルトの日時問い合わせ処理間隔 6 ( 64 秒 ) は、このモードには、短すぎます。 "minpoll" は、8 ( 256 秒, 約 4 分 ) 以上を設定して下さい。<br>
日時問い合わせ処理間隔は、秒数を 2 のべき乗で指定します。 minpoll の値が、12 なら 4096 秒約1時間、14 なら 16384 秒約4.5時間、16 なら 65536 秒約18時間となります。</p><br>
</dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; flag1 0|1 &nbsp; flag2 0|1 &nbsp; flag3 0|1 &nbsp; flag4 0|1</dt>
<dd>
<p>Time1 は、受信機からの時刻に加算する調整時間を、固定小数点形式の秒で設定します。<br>
mode 100 の場合は、time1 で調整する時間を設定したほうが良いでしょう。<br>
mode 101 から 180 の場合は、このドライバーが計測したループバックの遅延時間の一定の割合を同期時刻に加算しますので、time1 は設定しないほうが良いでしょう。</p>
<div style="text-align:left;">Flag1 は、タッチ・トーンかダイヤル・パルスかを指定します。</div>
<table border="1" summary="fudge flag1">
<tr><td>0 (Default)</td><td>タッチ・トーン</td><td>ATDWTnn...nn</td></tr>
<tr><td>1</td><td>ダイヤル・パルス</td><td>ATDWPnn...nn</td></tr>
</table>
<br>
<div style="text-align:left;">Flag2 は、エラー訂正プロトコルを指定します。</div>
<table border="1" summary="fudge flag2">
<tr><td>0 (Default)</td><td>ノーマル(エラー訂正なし)</td><td>AT\N0</td></tr>
<tr><td>1</td><td>V42, MNP, ノーマルの自動選択</td><td>AT\N3</td></tr>
</table>
<br>
<div style="text-align:left;">Flag3 は、スピーカーのオン/オフを指定します。</div>
<table border="1" summary="fudge flag3">
<tr><td>0 (Default)</td><td>オフ</td><td>ATM0Ln</td></tr>
<tr><td>1</td><td>オン</td><td>ATM2Ln</td></tr>
</table>
<br>
<div style="text-align:left;">Flag4 は、スピーカーの音量を指定します。</div>
<table border="1" summary="fudge flag4">
<tr><td>0 (Default)</td><td></td><td>ATMnL1</td></tr>
<tr><td>1</td><td></td><td>ATMnL2</td></tr>
</table>
<br>
</dd>
<dt>phone 042NNNNNNN</dt>
<dd>
<p>電話番号は、<a href="http://jjy.nict.go.jp/">http://jjy.nict.go.jp/</a> で公開されています。<br>
電話番号の桁数をチェックしています。もし、日本国外から発信するために国際電話アクセス番号と国番号を付加すると、桁数制限を超えます。<br>
また、電話番号の最初の2桁や3桁をチェックしています。日本の緊急番号や特別のサービスの番号を指定することはできません。<br>
内線から外線に発信する時は、"0," ( ゼロとカンマ ) を先頭に付加して下さい。外線発信番号は、チェックしていて、それ以外の外線発信番号を指定することはできません。</p>
</dd>
</dl>
<br>
</dd>
<dt>インターフェース</dt>
<dd>
<p>RS-232C 又は USB, 2400 BPS, 8ビット, パリティなし, 1ストップ・ビット</p>
<p>モデム制御コマンド:<br>
<code>ATE0Q0V1, ATMnLn, AT&amp;K4, AT+MS=V22B, AT%C0, AT\Nn, ATH1, ATDWxnn...nn</code><br>
<code>+++, ATH0</code></p>
<br>
</dd>
<dt>日時データの形式</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>プロンプト</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>コマンド</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>応答</td>
</tr>
<tr>
<td><code>Name{SP}?{SP}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>TJJY{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>Welcome messages</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>LOOP{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>( Switch to the loopback circuit )</td>
</tr>
<tr>
<td><code>&nbsp;</code></td>
<td>&nbsp;&nbsp;</td>
<td><code>( One char. )</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>( One char. )</code></td>
</tr>
<tr>
<td><code>&nbsp;</code></td>
<td>&nbsp;&nbsp;</td>
<td><code>COM{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>( Exit from the loopback circuit )</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>TIME{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HHMMSS{CR}HHMMSS{CR}HHMMSS{CR}</code> 3 times on second</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>4DATE{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>YYYYMMDD{CR}</code></td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>LEAPSEC{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>{SP}0{CR} | +1{CR} | -1{CR}</code></td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>TIME{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HHMMSS{CR}HHMMSS{CR}HHMMSS{CR}</code> 3 times on second</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>BYE{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>Sayounara messages</td>
</tr>
</table>
<p>日付と時刻は、別々に問い合わせます。日付が深夜0時の前か後かの不確定をチェックするため、日付の問い合わせの前後に時刻を問い合わせています。<br>
うるう秒は、処理していません。情報として clockstats ファイルに記録しているだけです。</p>
<br>
</dd>
</dl>
</li>
</ul>
<p>JJY は、長波で日本標準時(JST)を送信している無線局で、国立研究開発法人 情報通信研究機構が運用しています。JJY の運用情報などは、 <a href="http://www.nict.go.jp/">http://www.nict.go.jp/</a>(英語と日本語)や <a href="http://jjy.nict.go.jp/">http://jjy.nict.go.jp/</a>(英語と日本語)で提供されています。</p>
<p>実際のシリアル・ポートのデバイスにシンボリック・リンクを作成して下さい。シンボリック・リンクを作成するコマンドは、以下のとおりです。</p>
<p><code>ln -s /dev/ttyS0 /dev/jjy0</code></p>
<p>RS-232C から USB への変換ケーブルを利用して、JJY受信機、GPS時計、モデムをRS-232Cポートではなく、USBに接続することができます。この場合のシンボリック・リンクを作成するコマンドは、以下のとおりです。</p>
<p><code>ln -s /dev/ttyUSB0 /dev/jjy0</code></p>
<p>Windows NT の場合は、 COM<em>X</em>: の数字部分がドライバーのユニット番号に使用されます。 ドライバーのユニット 1 は、COM1: にユニット 3 は、COM3: に対応します。</p>
<h4>Monitor Data</h4>
<p>このドライバーは、JJY受信機、GPS時計、モデムとの送受信データを <code>clockstats</code> ファイルに記録します。</p>
<p><code>
statsdir /var/log/ntpd/<br>
filegen clockstats file clockstats type day enable
</code></p>
<div style="text-align:left;">レコード中のマークについて</div>
<table border="1" summary="Clockstats">
<tr><td><code>JJY</code>&nbsp;</td><td>情報(このドライバーの開始または終了)</td></tr>
<tr><td><code>--&gt;</code>&nbsp;</td><td>送信データ</td></tr>
<tr><td><code>&lt;--</code>&nbsp;</td><td>受信データ</td></tr>
<tr><td><code>---</code>&nbsp;</td><td>情報</td></tr>
<tr><td><code>===</code>&nbsp;</td><td>情報(ポーリングの開始、および、同期時刻)</td></tr>
<tr><td><code>-W-</code>&nbsp;</td><td>警告メッセージ</td></tr>
<tr><td><code>-X-</code>&nbsp;</td><td>エラー・メッセージ</td></tr>
</table>
<h4>Fudge Factors</h4>
<dl>
<dt><code>time1 <em>time</em></code></dt>
<dd>受信機からの時刻に対する調整時間を、固定小数点形式の秒で設定します。デフォルトは、0.0秒です。</dd>
<dt><code>time2 <em>time</em></code></dt>
<dd>未使用。</dd>
<dt><code>stratum <em>number</em></code></dt>
<dd>NTPの階層番号を 0 から 15 で指定します。デフォルトは、0です。</dd>
<dt><code>refid <em>string</em></code></dt>
<dd>ドライバーIDで、ASCII の1文字から4文字で指定します。デフォルトは、<code>JJY</code> です。</dd>
<dt><code>flag1 0 | 1</code></dt>
<dd>それぞれのモードを参照して下さい。</dd>
<dt><code>flag2 0 | 1</code></dt>
<dd>それぞれのモードを参照して下さい。</dd>
<dt><code>flag3 0 | 1</code></dt>
<dd>それぞれのモードを参照して下さい。</dd>
<dt><code>flag4 0 | 1</code></dt>
<dd>それぞれのモードを参照して下さい。</dd>
</dl>
<hr>
<script type="text/javascript" language="javascript" src="scripts/footer.txt"></script>
</body>
</html>

View File

@ -5,6 +5,7 @@
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<meta name="generator" content="HTML Tidy, see www.w3.org">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JJY Receivers</title>
<link rev="made" href="http://www.bea.hi-ho.ne.jp/abetakao/">
@ -15,8 +16,8 @@
<body>
<h3>JJY Receivers</h3>
<p>Last update:
<!-- #BeginDate format:En2m -->3-May-2011 00:20<!-- #EndDate -->
UTC</p>
<!-- #BeginDate format:En2m -->15-May-2015 00:00<!-- #EndDate -->
UTC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="driver40.html">ENGLISH</a> &nbsp; <a href="driver40-ja.html">JAPANESE</a></p>
<hr>
<h4>Synopsis</h4>
Address: 127.127.40.<em>u</em><br>
@ -24,19 +25,37 @@
Driver ID: <code>JJY</code><br>
Serial Port: <code>/dev/jjy<em>u</em></code>; See corresponding receiver
<h4>Description</h4>
<p>This driver supports the following JJY receivers sold in Japan.</p>
<p>This driver supports the following the JJY receivers and the GPS clock sold in Japan, and the time service through a telephone line.
</p>
<table width="100%">
<tr>
<td width="50%" style="vertical-align:top;">
<a href="#mode-1">Tristate Ltd. &nbsp; TS-JJY01, TS-JJY02</a><br>
<a href="#mode-2">C-DEX Co.,Ltd. &nbsp; JST2000</a><br>
<a href="#mode-3">Echo Keisokuki Co.,Ltd. &nbsp; LT-2000</a><br>
<a href="#mode-4">CITIZEN T.I.C. CO.,LTD. &nbsp; JJY-200</a><br>
<a href="#mode-5">Tristate Ltd. &nbsp; TS-GPSclock-01</a><br>
</td>
<td width="50%" style="vertical-align:top; border-left:solid; padding:0px 0px 0px 10px;">
<a href="#mode-6">SEIKO TIME SYSTEMS INC. &nbsp; TDC-300</a><br>
<a href="#mode-100">Telephone JJY</a><br>
</td>
</tr>
</table>
<ul>
<li>
<p>Tristate Ltd. JJY01, JJY02 <a href="http://www.tristate.ne.jp/">http://www.tristate.ne.jp/</a> (Japanese only)</p><br>
<p><a name="mode-1">Tristate Ltd. &nbsp; TS-JJY01, TS-JJY02</a> &nbsp; <a href="http://www.tristate.ne.jp/">http://www.tristate.ne.jp/</a> (Japanese only)</p><br>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd>
<p>server &nbsp; 127.127.40.X &nbsp; mode 1</p>
<dd><br>
<dl>
<dt>fudge &nbsp; 127.127.40.X &nbsp; flag1 0|1</dt>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 1</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN &nbsp; flag1 0|1</dt>
<dd>
<p>Flag1 has no effect for time synchronization. When a flag1 is set to 1, status commands are issued before DATE and STIM commands, and write a response text into a clockstats file.</p>
<p>Time1 may specify a constant to be added to the time offset for the time from the receiver, a fixed-point decimal number in seconds. You may specify the time offset from several tens of milli-seconds ( 0.0NN seconds ) to a hundred and several tens of milli-seconds ( 0.1NN seconds ) for this clock.</p>
<p>Flag1 has no effect for time synchronization. When flag1 is set to 1, status commands are issued before DATE and STIM commands, and write a response text into the clockstats file.</p>
<table border="1" summary="fudge flag1">
<tr><td>0 (Default)</td><td>DCST and STUS commands are not issued</td></tr>
<tr><td>1</td><td>DCST and STUS commands are issued</td></tr>
@ -47,7 +66,7 @@
</dd>
<dt>Interface</dt>
<dd>
<p>RS-232C, 9600 baud, 8-bits, no parity, 1 stop bit</p>
<p>RS-232C, 9600 BPS, 8-bits, no parity, 1 stop bit</p>
<br>
</dd>
<dt>Time code format</dt>
@ -58,6 +77,21 @@
<td>&nbsp;--&gt;&nbsp;</td>
<td>Reply</td>
</tr>
<tr>
<td><code>dcst{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>valid{CR}{LF} | invalid{CR}{LF}</code></td>
</tr>
<tr>
<td><code>stus{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>adjusted{CR}{LF} | unadjusted{CR}{LF}</code></td>
</tr>
<tr>
<td><code>time{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
<tr>
<td><code>date{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
@ -69,22 +103,26 @@
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
</table>
<br>
<p>The date and time are requested separately. The time is requested before and after the date request to check uncertainty of the date whether it's before or after midnight.</p><br>
</dd>
</dl>
</li>
<li>
<p>C-DEX Co.,Ltd. JST2000 <a href="http://www.c-dex.co.jp/">http://www.c-dex.co.jp/</a> (Japanese only)</p><br>
<p><a name="mode-2">C-DEX Co.,Ltd. &nbsp; JST2000</a> &nbsp; <a href="http://www.c-dex.co.jp/">http://www.c-dex.co.jp/</a> (Japanese only)</p><br>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd>
<p>server &nbsp; 127.127.40.X &nbsp; mode 2</p>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 2</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>Interface</dt>
<dd>
<p>RS-232C, 9600 baud, 8-bits, no parity, 1 stop bit</p>
<p>RS-232C, 9600 BPS, 8-bits, no parity, 1 stop bit</p>
<br>
</dd>
<dt>Time code format</dt>
@ -107,16 +145,20 @@
</li>
<li>
<p>Echo Keisokuki Co.,Ltd. LT-2000 <a href="http://www.clock.co.jp/">http://www.clock.co.jp/</a> (Japanese only)</p><br>
<p><a name="mode-3">Echo Keisokuki Co.,Ltd. &nbsp; LT-2000</a> &nbsp; <a href="http://www.clock.co.jp/">http://www.clock.co.jp/</a> (Japanese only)</p><br>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd>
<p>server &nbsp; 127.127.40.X &nbsp; mode 3</p>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 3</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>Interface</dt>
<dd>
<p>RS-232C, 9600 baud, 8-bits, no parity, 1 stop bit</p>
<p>RS-232C, 9600 BPS, 8-bits, no parity, 1 stop bit</p>
<br>
</dd>
<dt>Time code format</dt>
@ -149,16 +191,20 @@
</li>
<li>
<p>CITIZEN T.I.C. CO.,LTD. JJY-200 <a href="http://www.tic-citizen.co.jp/">http://www.tic-citizen.co.jp/</a> (Japanese only)</p><br>
<p><a name="mode-4">CITIZEN T.I.C. CO.,LTD. &nbsp; JJY-200</a> &nbsp; <a href="http://www.tic-citizen.co.jp/">http://www.tic-citizen.co.jp/</a> (Japanese only)</p><br>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd>
<p>server &nbsp; 127.127.40.X &nbsp; mode 4</p>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 4</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>Interface</dt>
<dd>
<p>RS-232C, 4800 baud, 8-bits, no parity, 1 stop bit</p>
<p>RS-232C, 4800 BPS, 8-bits, no parity, 1 stop bit</p>
<br>
</dd>
<dt>Time code format</dt>
@ -181,16 +227,18 @@
</li>
<li>
<p>Tristate Ltd. TS-GPSclock-01 <a href="http://www.tristate.ne.jp/">http://www.tristate.ne.jp/</a> (Japanese only)</p>
<p><a name="mode-5">Tristate Ltd. &nbsp; TS-GPSclock-01</a> &nbsp; <a href="http://www.tristate.ne.jp/">http://www.tristate.ne.jp/</a> (Japanese only)</p>
<p>This driver supports the Tristate TS-GPSclock-01 in command/response mode, though it is a GPS clock, not JJY radio clock. Using the menus and the onboard switches, the TS-GPSclock-01 should be set to command/response mode and JST time zone.<br>
Besides this driver ( Type 40 ), <a href="driver20.html">the generic NMEA GPS driver ( Type 20 )</a> supports the TS-GPSclock-01 in NMEA mode.</p>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd>
<p>server &nbsp; 127.127.40.X &nbsp; mode 5</p>
<dd><br>
<dl>
<dt>fudge &nbsp; 127.127.40.X &nbsp; flag1 0|1</dt>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 5</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN &nbsp; flag1 0|1</dt>
<dd>
<p>Time1 may specify a constant to be added to the time offset for the time from the receiver, a fixed-point decimal number in seconds.</p>
<p>Flag1 has no effect for time synchronization. When a flag1 is set to 1, status command is issued before DATE and TIME commands, and write a response text into a clockstats file.</p>
<table border="1" summary="fudge flag1">
<tr><td>0 (Default)</td><td>STUS command is not issued</td></tr>
@ -213,6 +261,16 @@
<td>&nbsp;--&gt;&nbsp;</td>
<td>Reply</td>
</tr>
<tr>
<td><code>stus{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>*R{CR}{LF} | *G{CR}{LF} | *U{CR}{LF} | +U{CR}{LF}</code></td>
</tr>
<tr>
<td><code>time{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
<tr>
<td><code>date{CR}{LF}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
@ -224,38 +282,250 @@
<td><code>HH:MM:SS{CR}{LF}</code></td>
</tr>
</table>
<p>The date and time are requested separately. The time is requested before and after the date request to check uncertainty of the date whether it's before or after midnight.</p><br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-6">SEIKO TIME SYSTEMS INC. &nbsp; TDC-300</a> &nbsp; <a href="http://www.seiko-sts.co.jp/">http://www.seiko-sts.co.jp/</a> (English and Japanese)</p><br>
<p>The TDC-300 must be set to the type 3 data format using the front panel menu display and the switches.</p>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode 6</dt>
<dd><br></dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; time1 0.NNN</dt>
</dl>
<br>
</dd>
<dt>Interface</dt>
<dd>
<p>RS-232C, 2400 BPS, 8-bits, no parity, 1 stop bit</p>
<br>
</dd>
<dt>Time code format</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>Command</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>Reply</td>
</tr>
<tr>
<td></td>
<td></td>
<td><code>{STX}YYMMDDWHHMMSS{ETX}</code></td>
</tr>
<tr>
<td>( 5 to 10 mSec. before second )</td>
<td></td>
<td><code>{STX}{xE5}{ETX}</code></td>
</tr>
</table>
<br>
</dd>
</dl>
</li>
<li>
<p><a name="mode-100">Telephone JJY</a> &nbsp; <a href="http://jjy.nict.go.jp/">http://jjy.nict.go.jp/</a> (English and Japanese)</p>
<p>The telephone JJY is the time service through a public telephone line.<br>
The service is provided by the National Institute of Information and Communications Technology in Japan.</p>
<p>ATTENTION; This mode, the telephone JJY, can not be used with the refclock_acts ( type 18 ) at the same time.
Because the "phone" statement in the ntp configuration file is not involved with the "server" statement,
so the both the refclock_acts ( type 18 ) and this refclock_jjy ( type 40, mode 100 to 180 ) can not recognize the appropriate "phone" statement among the "phone" statements.</p>
<dl>
<dt>NTP configuration ( ntp.conf )</dt>
<dd><br>
<dl>
<dt>server &nbsp; 127.127.40.X &nbsp; mode (100, 101 to 180) &nbsp; minpoll N</dt>
<dd>
<p>The mode 100 is specified, this driver does not issue the loopback command in order to measure the delay, and the delay of the telephone line and the system processing is not adjusted.<br>
The mode 101 to 180 is specified, this driver issues the loopback command and measures the delay of the telephone line and the system processing through the Telphone JJY loopback circuit.<br>
The round trip time through the Telphone JJY loopback circuit is measured 5 times, and each delay time is greater than 700 milli-seconds,
that delay time is ignored during average delay time calculation. Also, if the valid delay time ( &lt;= 700 mS. ) is measured more than 3 times, the maximum delay time among the valid delay times is ignored,
and if the valid delay time is measured more than 4 times, the minimum delay time among them is ignored, like marking/grading sports judgment.<br>
The adjustment time is calculated by the formula,<br>
multiply ( the measured round trip time ) by ( ( the mode number ) - 100 ) %,<br>
and the adjustment delay time is added to the syncronizing time.<br>
If you choose the automatic delay ajustment, in other words, the mode 101 to 180 is specifed, the recommended mode number is 145 to 165.</p>
<p>The default polling interval 6 ( 64 seconds ) is too short for this mode. The "minpoll" should be set to greater than or equal to 8 ( 256 seconds, about 4 minutes ).<br>
The interval time is given the value in second power of 2. The minpoll value 12 is 4096 seconds interval ( about 1 hour ), 14 is 16384 seconds interval ( about 4.5 hours ), 16 is 65536 seconds ( about 18 hours ), respectively.</p><br>
</dd>
<dt>fudge &nbsp; 127.127.40.X &nbsp; flag1 0|1 &nbsp; flag2 0|1 &nbsp; flag3 0|1 &nbsp; flag4 0|1</dt>
<dd>
<p>Time1 may specify a constant to be added to the time offset for the time from the receiver, a fixed-point decimal number in seconds.<br>
When the mode 100 is specified, the time1 may be specified in order to adjust the time offset.<br>
When the mode 101 to 180 is specified, the time1 should not be specified because this driver adds some percentage of the measured loopback delay, depending on the value of the mode number.</p>
<div style="text-align:left;">Flag1 is the modem dialing type.</div>
<table border="1" summary="fudge flag1">
<tr><td>0 (Default)</td><td>Tone</td><td>ATDWTnn...nn</td></tr>
<tr><td>1</td><td>Pulse</td><td>ATDWPnn...nn</td></tr>
</table>
<br>
<div style="text-align:left;">Flag2 is the modem error correction type.</div>
<table border="1" summary="fudge flag2">
<tr><td>0 (Default)</td><td>Normal</td><td>AT\N0</td></tr>
<tr><td>1</td><td>Auto V42, MNP, Normal</td><td>AT\N3</td></tr>
</table>
<br>
<div style="text-align:left;">Flag3 is the modem speaker switch.</div>
<table border="1" summary="fudge flag3">
<tr><td>0 (Default)</td><td>Off</td><td>ATM0Ln</td></tr>
<tr><td>1</td><td>On</td><td>ATM2Ln</td></tr>
</table>
<br>
<div style="text-align:left;">Flag4 is the modem speaker volume.</div>
<table border="1" summary="fudge flag4">
<tr><td>0 (Default)</td><td>Low</td><td>ATMnL1</td></tr>
<tr><td>1</td><td>Middle</td><td>ATMnL2</td></tr>
</table>
<br>
</dd>
<dt>phone 042NNNNNNN</dt>
<dd>
<p>The phone number is available at <a href="http://jjy.nict.go.jp/">http://jjy.nict.go.jp/</a><br>
The number of digits of the phone number is checked. If the international access number and the country number are added in order to call from outside of Japan, the number of digits is over the limit.<br>
The first 2 or 3 digits are checked. The emergency service number and the special service number in Japan are not allowed.<br>
Calling from extension line, the number for an outside line should be prefix "0," ( Zero, Comma ). The prefix is also checked, and no other outside access number is allowed.</p>
</dd>
</dl>
<br>
</dd>
<dt>Interface</dt>
<dd>
<p>RS-232C or USB, 2400 BPS, 8-bits, no parity, 1 stop bit</p>
<p>Modem control commands:<br>
<code>ATE0Q0V1, ATMnLn, AT&amp;K4, AT+MS=V22B, AT%C0, AT\Nn, ATH1, ATDWxnn...nn</code><br>
<code>+++, ATH0</code></p>
<br>
</dd>
<dt>Time code format</dt>
<dd><br>
<table summary="CommandAndReply">
<tr>
<td>Prompt</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>Command</td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>Reply</td>
</tr>
<tr>
<td><code>Name{SP}?{SP}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>TJJY{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>Welcome messages</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>LOOP{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>( Switch to the loopback circuit )</td>
</tr>
<tr>
<td><code>&nbsp;</code></td>
<td>&nbsp;&nbsp;</td>
<td><code>( One char. )</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>( One char. )</code></td>
</tr>
<tr>
<td><code>&nbsp;</code></td>
<td>&nbsp;&nbsp;</td>
<td><code>COM{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>( Exit from the loopback circuit )</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>TIME{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HHMMSS{CR}HHMMSS{CR}HHMMSS{CR}</code> 3 times on second</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>4DATE{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>YYYYMMDD{CR}</code></td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>LEAPSEC{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>{SP}0{CR} | +1{CR} | -1{CR}</code></td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>TIME{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>HHMMSS{CR}HHMMSS{CR}HHMMSS{CR}</code> 3 times on second</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td><code>BYE{CR}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
<td>Sayounara messages</td>
</tr>
</table>
<p>The date and time are requested separately. The time is requested before and after the date request to check uncertainty of the date whether it's before or after midnight.<br>
The leap second is not handled, and only written in the clockstats file as an information.</p>
<br>
</dd>
</dl>
</li>
</ul>
<p>JJY is the radio station which transmites the JST (Japan Standard Time) in long wave radio. The station JJY is operated by the National Institute of Information and Communications Technology. An operating announcement and some information are avaiable from <a href="http://www.nict.go.jp/">http://www.nict.go.jp/</a> (English and Japanese) and <a href="http://jjy.nict.go.jp/">http://jjy.nict.go.jp/</a> (English and Japanese)</p>
<p>The JJY is the radio station which transmits the JST (Japan Standard Time) in long wave radio. The station JJY is operated by the National Institute of Information and Communications Technology.
An operating announcement and some information are available from <a href="http://www.nict.go.jp/">http://www.nict.go.jp/</a> (English and Japanese) and <a href="http://jjy.nict.go.jp/">http://jjy.nict.go.jp/</a> (English and Japanese)</p>
<p>The user is expected to provide a symbolic link to an available serial port device. This is typically performed by a command such as;</p>
<p><code>ln -s /dev/ttyS0 /dev/jjy0</code></p>
<p>Using RS232C to USB converter cable, the clock can be connected to an USB port instead of a serial port. In this case, typical symbolic link command is as follows;
<p>Using an RS-232C to USB converter cable, the clock or a modem can be connected to a USB port instead of a serial port. In this case, the typical symbolic link command is as follows;</p>
<p><code>ln -s /dev/ttyUSB0 /dev/jjy0</code></p>
<p>Windows NT does not support symbolic links to device files. COM<em>X</em>: is the unit used by the driver, based on the refclock unit number, where unit 1 corresponds to COM1: and unit 3 corresponds to COM3:</p>
<h4>Monitor Data</h4>
<p>The driver writes each timecode as received to the <code>clockstats</code> file.</p>
<p>The driver writes sent and received data to/from the JJY receivers, GPS clock, and the modem into the <code>clockstats</code> file.</p>
<p><code>
statsdir /var/log/ntpd/<br>
filegen clockstats file clockstats type day enable
</code></p>
<div style="text-align:left;">Mark of the clockstats record</div>
<table border="1" summary="Clockstats">
<tr><td><code>JJY</code>&nbsp;</td><td>Infomation message ( This refclock starts or stops. )</td></tr>
<tr><td><code>--&gt;</code>&nbsp;</td><td>Sent data</td></tr>
<tr><td><code>&lt;--</code>&nbsp;</td><td>Received data</td></tr>
<tr><td><code>---</code>&nbsp;</td><td>Infomation message</td></tr>
<tr><td><code>===</code>&nbsp;</td><td>Infomation message ( Start of each polling, and sync. time. )</td></tr>
<tr><td><code>-W-</code>&nbsp;</td><td>Warning message</td></tr>
<tr><td><code>-X-</code>&nbsp;</td><td>Error message</td></tr>
</table>
<h4>Fudge Factors</h4>
<dl>
<dt><code>time1 <em>time</em></code>
<dd>Specifies the time offset calibration factor, in seconds and fraction, with default 0.0.
<dt><code>time2 <em>time</em></code>
<dd>Not used by this driver.
<dt><code>stratum <em>number</em></code>
<dd>Specifies the driver stratum, in decimal from 0 to 15, with default 0.
<dt><code>refid <em>string</em></code>
<dd>Specifies the driver reference identifier, an ASCII string from one to four characters, with default <code>JJY</code>.
<dt><code>flag1 0 | 1</code>
<dd>See corresponding receiver.
<dt><code>flag2 0 | 1</code>
<dd>Not used by this driver.
<dt><code>flag3 0 | 1</code>
<dd>Not used by this driver.
<dt><code>flag4 0 | 1</code>
<dt><code>time1 <em>time</em></code></dt>
<dd>Specifies the time offset calibration factor, in seconds and fraction, with default 0.0.</dd>
<dt><code>time2 <em>time</em></code></dt>
<dd>Not used by this driver.
<dt><code>stratum <em>number</em></code></dt>
<dd>Specifies the driver stratum, in decimal from 0 to 15, with default 0.</dd>
<dt><code>refid <em>string</em></code></dt>
<dd>Specifies the driver reference identifier, an ASCII string from one to four characters, with default <code>JJY</code>.</dd>
<dt><code>flag1 0 | 1</code></dt>
<dd>See corresponding receiver.</dd>
<dt><code>flag2 0 | 1</code></dt>
<dd>See corresponding receiver.</dd>
<dt><code>flag3 0 | 1</code></dt>
<dd>See corresponding receiver.</dd>
<dt><code>flag4 0 | 1</code></dt>
<dd>See corresponding receiver.</dd>
</dl>
<hr>
<script type="text/javascript" language="javascript" src="scripts/footer.txt"></script>

View File

@ -14,7 +14,7 @@
<body>
<h3>GPSD NG client driver</h3>
<p>Last update:
<!-- #BeginDate format:En2m -->1-Mar-2014 03:48<!-- #EndDate -->
<!-- #BeginDate format:En2m -->30-Apr-2015 05:53<!-- #EndDate -->
UTC</p>
<hr>
<h4>Synopsis</h4>
@ -28,8 +28,9 @@
Features: <tt></tt>
</p>
<h4>Description</h4>
<!-- --------------------------------------------------------- -->
<br><h4>Description</h4>
<p>
This driver is a client driver to the <i>GPSD</i> daemon, which
over the time became increasingly popular for UN*Xish
@ -68,25 +69,37 @@
<p>
The overall accuracy depends on the receiver used. The driver
uses the error estimations (95% probability limits) provided by
<i>GPSD</i> to set the clock precision dynamically according to these
readings.
<i>GPSD</i> to set the clock precision dynamically according to
these readings.
</p>
<p>
The driver needs the VERSION, TPV, PPS and WATCH objects of
the <i>GPSD</i> protocol. (Others are quietly ignored.)
The driver needs the VERSION, TPV, PPS, WATCH and TOFF objects
of the <i>GPSD</i> protocol. (Others are quietly ignored.) The
driver can operate without the TOFF objects, which are available
with the <i>protocol</i> version 3.10 and above. (Not to be
confused with the <i>release</i> version of <i>GPSD</i>!)
Running without TOFF objects has a negative impact on the jitter
and offset of the serial timing information; if possible, a
version of <i>GPSD</i> with support for TOFF objects should be
used.
</p>
<p>The acronym <u>STI</u> is used here as a synonym for <i>serial
time information</i> from the data channel of the receiver, no
matter what objects were used to obtain it.
</p>
<!-- --------------------------------------------------------- -->
<h4>Naming a Device</h4>
<br><h4>Naming a Device</h4>
<p>
The <i>GPSD</i> driver uses the same name as the NMEA driver,
namely <tt>/dev/gps<i>u</i></tt>. There is a simple reason for
that: While the NMEA driver and the <i>GPSD</i> driver can be
active at the same time <b>for different devices</b>,
they cannot access the same device at a time. Having the same
name helps on that. It also eases migration from using NMEA
directly to using <i>GPSD</i>, as no new links etc need to be
created.
The <i>GPSD</i> driver uses the same device name as the NMEA
driver, namely <tt>/dev/gps<i>u</i></tt>. There is a simple
reason for that: While the NMEA driver and the <i>GPSD</i>
driver can be active at the same time <b>for different
devices</b>, they cannot access the same device at a
time. Having the same name helps on that. It also eases
migration from using NMEA directly to using <i>GPSD</i>, as no
new links etc need to be created.
</p>
<p>
<i>GPSD</i> is normally started with the device name to access;
@ -97,14 +110,16 @@
identification. This makes the migration from the built-in NMEA
driver a bit easier.
</p>
<p><b>Note:</b> <i>GPSD</i> (as of version 3.10) cannot
use kernel mode PPS on devices that are hot-plugged. This would
require to attach the PPS line discipline to the file, which is
not possible when running with root privileges dropped. This is
not likely to change in the future.
<p><b>Note:</b> <i>GPSD</i> (as of version 3.10) cannot use kernel
mode PPS on devices that are hot-plugged. This would require to
attach the PPS line discipline to the character special file,
which is not possible when running with root privileges already
dropped. This is not likely to change in the future.
</p>
<h4>The 'mode' byte</h4>
<!-- --------------------------------------------------------- -->
<br><h4>The 'mode' word</h4>
<p>
A few operation modes can be selected with the mode word.
</p>
@ -113,70 +128,234 @@
<th colspan="3">The Mode Word</th>
<tr> <td>Bits</td><td>Value</td><td>Description</td>
</tr>
<tr> <td rowspan="4"align="center">0..1</td><td align="center">0</td>
<td>Uses TPV to get absolute time stamps for full
synchronization. If PPS is available , it is used to improve
the precision, but the clock can work without it.</td>
<tr> <td rowspan="4"align="center">0..1</td>
<td align="center">0</td>
<td>STI only operation. This mode is affected by the timing
stability of whatever protocol is used between the GPS
device and GPSD.
<br>
Running on STI only is not recommended in general. Possible
use cases include:
<ul>
<li>The receiver does not provide a PPS signal.
<li>The receiver <i>does</i> provide a PPS signal and
the secondary PPS unit is used.
<li>The receiver has a stable serial timing and a proper
fudge can be established.
<li>You have other time sources available and want to
establish a useful fudge value for <tt>time2</tt>.
</ul>
</td>
</tr>
<tr><td align="center">1</td>
<td>Require TPV <b>and</b> PPS to work.</td>
<tr>
<td align="center">1</td>
<td>Strict operation. This mode needs a valid PPS and a
valid STI to combine the absolute time from the STI with
the time stamp from the PPS record. Does not feed clock
samples if no valid PPS+STI pair is available.
<br><br>
This type of operation results in an ordinary clock with a
very low jitter as long as the PPS data is available, but
the clock fails once PPS drops out. This mode is a
possible choice for receivers that provide a PPS signal
most of the time but have an unstable serial timing that
cannot be fudge-compensated.
</td>
</tr>
<tr><td align="center">2</td>
<td>Ignore PPS data, run on TPV only. This is not a
recommended mode unless the serial timing is very stable
and GPSD provides an information element in TPV that
indicates the receive time of the fix data.</td>
<td>Automatic mode. Tries to operate in strict mode unless
it fails to process valid samples for some time, currently
120s. Then it reverts to STI-only operation until the PPS
is stable again for 40s, when strict mode is engaged
again.
<br><br><b>Important Notice: This is an expiremental
feature!</b><br> Switching between strict and STI-only
mode will cause changes in offset and jitter. Use this
mode only if STI-only works fairly well with your setup,
or if you expect longer dropouts of the PPS signal and
prefer to use STI alone over not getting synchronised at
all.</td>
</tr>
<tr><td align="center">3</td>
<td>PPS-only mode. Ignores TPV and does only the PPS phase
correction. This means that some other source must get NTPD
close to synchronisation; only after that happened and the
phase shift between the system clock and the PPS pulse is
less than 125msec the PPS lock will be engaged.</td>
<tr>
<td align="center">3</td>
<td><i>(reserved for future extension, do not use)</i></td>
</tr>
<tr>
<td align="center">2..31</td>
<td colspan="2"><i>(reserved for future extension, do not
use)</i></td>
</tr>
<tf colspan="3"><b>IMPORTANT: work in progress, mode
word ignored right now. Fixed mode '0' operation.</b></tf>
</table>
</p>
<h4>Syslog flood throttle</h4>
<p>This driver can create a lot of syslog messages when things go
wrong, and cluttering the log files is frowned upon. So we attempt
to log persistent or recurring errors only once per hour. On the
other hand, when tracking a problem the syslog flood throttle can
get into the way.</p>
<p>Therefore, fudge <i>flag3</i> can be used to <i>disable</i> the
flood throttle at any time; the throttle is engaged by
default. Running with the syslog flood throttle disabled for
lengthy time is not recommended unless the log files are closely
monitored.</p>
<!-- --------------------------------------------------------- -->
<h4>Fudge Factors</h4>
<br><h4>Syslog flood throttle</h4>
<p>This driver can create a lot of syslog messages when things go
wrong, and cluttering the log files is frowned upon. So we
attempt to log persistent or recurring errors only once per
hour. On the other hand, when tracking a problem the syslog
flood throttle can get into the way.</p>
<p>Therefore, fudge <i>flag3</i> can be used to <i>disable</i> the
flood throttle at any time; the throttle is engaged by
default. Running with the syslog flood throttle disabled for
lengthy time is not recommended unless the log files are closely
monitored.</p>
<!-- --------------------------------------------------------- -->
<br><h4>PPS secondary clock unit</h4>
<p>Units with numbers &ge;128 act as secondary clock unit for the
primary clock unit (u mod 128). A secondary unit processes only
the PPS data from <i>GPSD</i> and needs the corresponding master
unit to work<a href="#fn1" name="fn1bl"><sup>1</sup></a>. Use
the 'noselect' keyword on the primary unit if you are not
interested in its data.
</p><p>The secondary unit employs the usual precautions before
feeding clock samples:</p>
<ul>
<li>The system must be already in a synchronised state.
<li>The system offset must be less than 400ms absolute.
<li>The phase adjustment from the PPS signal must also be less
than 400ms absolute.
</ul>
<p>If fudge flag <tt>flag1</tt> is set for the secondary unit, the
unit asserts the PPS flag on the clock as long as PPS data is
available. This makes the unit eligible as PPS peer and should
only be used if the GPS receiver can be trusted for the quality
of its PPS signal<a href="fn2"
name="fn2bl"><sup>2</sup></a>. The PPS flag gets cleared if no
PPS records can be aquired for some time. The unit also flushes
the sample buffer at this point to avoid the use of stale PPS
data.</p>
<p><b>Attention:</b> This unit uses its own PPS fudge value
which must be set as fudge <tt>time1</tt>. Only the fudge
values <tt>time1</tt> and <tt>flag1</tt> have an impact on secondary
units.</p>
<!-- --------------------------------------------------------- -->
<br><h4>Clockstats</h4>
<p>If flag4 is set when the driver is polled, a clockstats record
is written for the primary clock unit. (The secondary PPS unit
does not provide clock stats on its own.) The first 3 fields are
the normal date, time, and IP address common to all clockstats
records.
</p><p>
<table border="1" frame="box" rules="all">
<th colspan="2">The Clockstats Line</th>
<tr> <td>field</td><td>Description</td> </tr>
<tr>
<td align="center">1</td>
<td>Date as day number since NTP epoch.</td>
</tr><tr>
<td align="center">2</td>
<td>Time as seconds since midnight.</td>
</tr><tr>
<td align="center">3</td>
<td>(Pseudo-) IP address of clock unit.</td>
</tr><tr>
<td align="center">4</td>
<td>Number of received known JSON records since last
poll. The driver knows about TPV, PPS, TOFF, VERSION and
WATCH records; others are silently ignored.
</td>
</tr><tr>
<td align="center">5</td>
<td>Bad replies since last poll. A record is considered
malformed or a bad reply when it is missing vital fields
or the fields contain malformed data that cannot be
parsed.
</td>
</tr><tr>
<td align="center">6</td>
<td>Number of sample cycles since last poll that were
discarded because there was no GPS fix. This is
effectively the number of TPV records with a fix value
&lt; 2 or without a time stamp.
</td>
</tr><tr>
<td align="center">7</td>
<td>Number of serial time information records (TPV or TOFF,
depending on the GPSD version) received since last poll.
</td>
</tr><tr>
<td align="center">8</td>
<td>Number of serial time information records used for
clock samples since the last poll.
</td>
</tr><tr>
<td align="center">9</td>
<td>Number of PPS records received since the last poll.</td>
</tr><tr>
<td align="center">10</td>
<td>Number of PPS records used for clock samples on the
secondary channel since the last poll.
</td>
</tr>
</table>
</p>
<!-- --------------------------------------------------------- -->
<br><h4>Fudge Factors</h4>
<dl>
<dt><tt>time1 <i>time</i></tt></dt>
<dd>Specifies the PPS time offset calibration factor, in seconds
and fraction, with default 0.0.</dd>
<dt><a name="fudgetime2"><tt>time2 <i>time</i></tt></a></dt>
<dd>Specifies the TPV time offset calibration factor, in seconds
and fraction, with default 0.0.</dd>
<dd><em>[Primary Unit]</em> Specifies the TPV/TIME time offset
calibration factor, in seconds and fraction, with default
0.0.</dd>
<dt><tt>stratum <i>number</i></tt></dt>
<dd>Specifies the driver stratum, in decimal from 0 to 15, with default 0.</dd>
<dd>Specifies the driver stratum, in decimal from 0 to 15, with
default 0.</dd>
<dt><tt>refid <i>string</i></tt></dt>
<dd>Specifies the driver reference identifier, an ASCII string
from one to four characters, with default <tt>GPSD</tt>.</dd>
<dt><tt>flag1 0 | 1</tt></dt><dd><i>(not used)</i></dd>
<dt><tt>flag2 0 | 1</tt></dt><dd><i>(not used)</i></dd>
<dt><tt>flag3 0 | 1</tt></dt><dd>If set, <i>disable</i> the
log throttle. Useful when tracking problems in the interaction
between <i>GPSD</i> and <i>NTPD</i>, since now all error
events are logged. Persistent/recurrent errors can easily fill
up the log, so this should only be enabled during bug
hunts.</dd>
<dt><tt>flag4 0 | 1</tt></dt><dd>If set, write a clock stats
line on every poll cycle.</dd>
<dt><tt>flag1 0 | 1</tt></dt><dd><em>[<b>Secondary</b>
Unit]</em> When set, flags the secondary clock unit as a
potential PPS peer as long as good PPS data is available.
</dd>
<dt><tt>flag2 0 | 1</tt></dt>
<dd><em>[Primary Unit]</em> When set, <u>disables</u> the
processing of incoming PPS records. Intended as an aide to
test the effects of a PPS dropout when using automatic mode
(mode 2).
</dd>
<dt><tt>flag3 0 | 1</tt></dt><dd><em>[Primary Unit]</em>
If set, <u>disables</u> the log throttle. Useful when tracking
problems in the interaction between <i>GPSD</i> and <i>NTPD</i>,
since now all error events are logged. Persistent/recurrent
errors can easily fill up the log, so this should only be
enabled during bug hunts.</dd>
<dt><tt>flag4 0 | 1</tt></dt><dd><em>[Primary Unit]</em>
If set, write a clock stats line on every poll cycle.
</dd>
</dl>
<!-- -- footnotes -------------------------------------------- -->
<hr>
<p><a name="fn1" href="#fn1bl"><sup>1</sup>) </a>Data transmission
an decoding is done only once by the primary unit. The decoded
data is then processed independently in both clock units. This
avoids double transmission over two sockets and decoding the
same data twice, but the primary unit is always needed as a
downside of this approach.
</p>
<p><a name="fn2" href="#fn2bl"><sup>2</sup>) </a>The clock driver
suppresses the processing PPS records when the TPV/TIME data
indicates the receiver has no fix. It can also deal with
situations where the PPS signal is not delivered
to <i>GPSD</i>. But once it is available, it is also processed
and used to create samples. If a receiver cannot be trusted for
the precision of its PPS signal, it should not be used to create
a possible PPS peer: These get extra clout and can effectively
become the sole source of input for the control loop. You do not
want to use sloppy data for that.
<hr>
<p>Additional Information</p>
<p><a href="../refclock.html">Reference Clock Drivers</a></p>
<hr>

View File

@ -3,6 +3,7 @@
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Miscellaneous Commands and Options</title>
<!-- Changed by: Harlan Stenn, 29-Jun-2015 -->
<link href="scripts/style.css" type="text/css" rel="stylesheet">
</head>
<body>
@ -10,7 +11,7 @@
<img src="pic/boom3.gif" alt="gif" align="left"><a href="http://www.eecis.udel.edu/~mills/pictures.html">from <i>Pogo</i>, Walt Kelly</a>
<p>We have three, now looking for more.</p>
<p>Last update:
<!-- #BeginDate format:En2m -->28-Feb-2015 12:01<!-- #EndDate -->
<!-- #BeginDate format:En2m -->29-Jun-2015 05:56<!-- #EndDate -->
UTC</p>
<br clear="left">
<h4>Related Links</h4>
@ -26,6 +27,8 @@
<dd>This command specifies the complete path and name of the file used to record the frequency of the local clock oscillator. This is the same operation as the <tt>-f</tt> command line option. This command is mutually exclusive with the <tt>freq</tt> option of the <tt>tinker</tt> command.</dd>
<dd> If the file exists, it is read at startup in order to set the initial frequency and then updated once per hour or more with the current frequency computed by the daemon. If the file name is specified, but the file itself does not exist, the starts with an initial frequency of zero and creates the file when writing it for the first time. If this command is not given, the daemon will always start with an initial frequency of zero.</dd>
<dd>The file format consists of a single line containing a single floating point number, which records the frequency offset measured in parts-per-million (PPM). The file is updated by first writing the current drift value into a temporary file and then renaming this file to replace the old version.</dd>
<dt id="dscp"><tt>dscp <i>dscp</i></tt></dt>
<dd>This command specifies the Differentiated Services Code Point (DSCP) value that is used in sent NTP packets. The default value is 46 for Expedited Forwarding (EF).</dd>
<dt id="enable"><tt>enable [auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</tt><br>
<tt>disable [auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</tt></dt>
<dd>Provides a way to enable or disable various system options. Flags not mentioned are unaffected. Note that most of these flags can be modified remotely using <a href="ntpq.html"><tt>ntpq</tt></a> utility program's <tt>:config</tt> and <tt>config-from-file</tt> commands.
@ -57,6 +60,8 @@
<dd>This command loads the NIST leapseconds file and initializes the leapsecond values for the next leapsecond time, expiration time and TAI offset. The file can be obtained directly from NIST national time servers using <tt>ftp</tt> as the ASCII file <tt>pub/leap-seconds</tt>.</dd>
<dd>The <i>leapfile</i> is scanned when <tt>ntpd</tt> processes the <tt>leapfile</tt> directive or when <tt>ntpd</tt> detects that <i>leapfile</i> has changed. <tt>ntpd</tt> checks once a day to see if the <i>leapfile</i> has changed.</dd>
<dd>While not strictly a security function, the Autokey protocol provides means to securely retrieve the current or updated leapsecond values from a server.</dd>
<dt id="leapsmearinterval"><tt>leapsmearinterval <i>seconds</i></tt></dt>
<dd>This EXPERIMENTAL option is only available if <tt>ntpd</tt> was built with the <tt>--enable-leap-smear</tt> option to the <tt>configure</tt> script. It specifies the interval over which a leap second correction will be applied. Recommended values for this option are between 7200 (2 hours) and 86400 (24 hours). <b>DO NOT USE THIS OPTION ON PUBLIC-ACCESS SERVERS!</b> See http://bugs.ntp.org/2855 for more information.</dd>
<dt id="logconfig"><tt>logconfig <i>configkeyword</i></tt></dt>
<dd>This command controls the amount and type of output written to the system <tt>syslog</tt> facility or the alternate <tt>logfile</tt> log file. All <i><tt>configkeyword</tt></i> keywords can be prefixed with <tt>=</tt>, <tt>+</tt> and <tt>-</tt>, where <tt>=</tt> sets the <tt>syslogmask</tt>, <tt>+</tt> adds and <tt>-</tt> removes messages. <tt>syslog messages</tt> can be controlled in four classes (<tt>clock</tt>, <tt>peer</tt>, <tt>sys</tt> and <tt>sync</tt>). Within these classes four types of messages can be controlled: informational messages (<tt>info</tt>), event messages (<tt>events</tt>), statistics messages (<tt>statistics</tt>) and status messages (<tt>status</tt>).</dd>
<dd>Configuration keywords are formed by concatenating the message class with the event class. The <tt>all</tt> prefix can be used instead of a message class. A message class may also be followed by the <tt>all</tt> keyword to enable/disable all messages of the respective message class. By default, <tt>logconfig</tt> output is set to <tt>allsync</tt>.</dd>
@ -95,6 +100,18 @@
<dd>This command is used in conjunction with the ACTS modem driver (type 18). The arguments consist of a maximum of 10 telephone numbers used to dial USNO, NIST or European time services. The Hayes command ATDT&nbsp;is normally prepended to the number, which can contain other modem control codes as well.</dd>
<dt id="reset"><tt>reset [allpeers] [auth] [ctl] [io] [mem] [sys] [timer]</tt></dt>
<dd>Reset one or more groups of counters maintained by ntpd and exposed by <tt>ntpq</tt> and <tt>ntpdc</tt>.</dd>
<dt id="rlimit"><tt>rlimit [memlock <i>Nmegabytes</i> | stacksize <i>N4kPages</i> | filenum <i>Nfiledescriptors</i>]</tt></dt>
<dd>This command alters certain process storage allocation limits, and is only available on some operating systems. Options are as follows:</dd>
<dd>
<dl>
<dt><tt>memlock <i>Nmegabytes</i></tt></dt>
<dd>Specify the number of megabytes of memory that can be allocated. Probably only available under Linux, this option is useful when dropping root (the <tt>-i</tt> option). The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.</dd>
<dt><tt>stacksize <i>N4kPages</i></tt></dt>
<dd>Specifies the maximum size of the process stack on systems with the <tt>mlockall()</tt> function. Defaults to 50 4k pages (200 4k pages in OpenBSD).</dd>
<dt><tt>filenum <i>Nfiledescriptors</i></tt></dt>
<dd>Specifies the maximum number of file descriptors ntp may have open at the same time. Defaults to system default.</dd>
</dl>
</dd>
<dt id="saveconfigdir"><tt>saveconfigdir <i>directory_path</i></tt></dt>
<dd>Specify the directory in which to write configuration snapshots requested with <tt>ntpq</tt>'s <a href="ntpq.html#saveconfig">saveconfig</a> command. If <tt>saveconfigdir</tt> does not appear in the configuration file, saveconfig requests are rejected by ntpd.</dd>
<dt id="setvar"><tt>setvar <i>variable</i> [default]</tt></dt>
@ -120,18 +137,6 @@
<dd>Specifies the stepout threshold in seconds. The default without this command is 300 s. Since this option also affects the training and startup intervals, it should not be set less than the default. Further details are on the <a href="clock.html">Clock State Machine</a> page.</dd>
</dl>
</dd>
<dt id="rlimit"><tt>rlimit [memlock <i>Nmegabytes</i> | stacksize <i>N4kPages</i> | filenum <i>Nfiledescriptors</i>]</tt></dt>
<dd>This command alters certain process storage allocation limits, and is only available on some operating systems. Options are as follows:</dd>
<dd>
<dl>
<dt><tt>memlock <i>Nmegabytes</i></tt></dt>
<dd>Specify the number of megabytes of memory that can be allocated. Probably only available under Linux, this option is useful when dropping root (the <tt>-i</tt> option). The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.</dd>
<dt><tt>stacksize <i>N4kPages</i></tt></dt>
<dd>Specifies the maximum size of the process stack on systems with the <tt>mlockall()</tt> function. Defaults to 50 4k pages (200 4k pages in OpenBSD).</dd>
<dt><tt>filenum <i>Nfiledescriptors</i></tt></dt>
<dd>Specifies the maximum number of file descriptors ntp may have open at the same time. Defaults to system default.</dd>
</dl>
</dd>
<dt id="tos"><tt>tos [beacon <i>beacon</i> | ceiling <i>ceiling</i> | cohort {0 | 1} | floor <i>floor</i> | maxclock <i>maxclock </i>| maxdist <i>maxdist</i> | minclock <i>minclock</i> | mindist <i>mindist </i>| minsane <i>minsane</i> | orphan <i>stratum</i> | orphanwait <em>delay</em>]</tt></dt>
<dd>This command alters certain system variables used by the the clock selection and clustering algorithms. The default values of these variables have been carefully optimized for a wide range of network speeds and reliability expectations. Very rarely is it necessary to change the default values; but, some folks can't resist twisting the knobs. It can be used to select the quality and quantity of peers used to synchronize the system clock and is most useful in dynamic server discovery schemes. The options are as follows:</dd>
<dd>

View File

@ -28,7 +28,7 @@
<p>NTP Version 4 supports almost four dozen satellite, radio and telephone modem reference clocks plus several audio devices for instrumentation signals. A general description of the reference clock support is on this page. Additional information about each reference clock driver can be found via links from this page. Additional information is on the <a href="rdebug.html">Debugging Hints for Reference Clock Drivers</a> and <a href="howto.html">How To Write a Reference Clock Driver</a> pages. Information on how to support pulse-per-second (PPS) signals produced by some devices is on the <a href="pps.html">Pulse-per-second (PPS) Signal Interfacing</a> page. All reference clock drivers require that the reference clock use only Coordinated Universal Time (UTC). Timezone and standard/daylight adjustments are performed by the operating system kernel.</p>
<p>A reference clock will generally (though not always) be a radio timecode receiver synchronized to standard time as provided by NIST and USNO in the US, NRC in Canada and their counterparts elsewhere in the world. A device driver specific to each reference clock must be compiled in the distribution; however, most common radio, satellite and telephone modem clocks are included by default and are activated by configuration commands.</p>
<p>Reference clocks are supported in the same way as ordinary NTP clients and use the same filter, select, cluster and combine algorithms. Drivers have addresses in the form 127.127.<i>t.u</i>, where <i>t</i> is the driver type and <i>u</i> is a unit number in the range 0-3 to distinguish multiple instances of the same driver. The connection to the computer is device dependent, usually a serial port, parallel port or special bus peripheral, but some can work directly from an audio codec or sound card. The particular device is specified by adding a soft link from the name used by the driver to the particular device name.</p>
<p>The <tt>server</tt> command is used to configure a reference clock. Only the <tt>mode>,<tt>minpoll</tt>, <tt>maxpoll</tt>, and <tt>prefer</tt> options are supported for reference clocks, as described on the <a href="clockopt.html">Reference Clock Commands</a> page. The <tt>prefer</tt> option is discussed on the <a href="prefer.html">Mitigation Rules and the <tt>prefer</tt> Keyword</a> page. Some of these options have meaning only for selected clock drivers.</p>
<p>The <tt>server</tt> command is used to configure a reference clock. Only the <tt>mode</tt>, <tt>minpoll</tt>, <tt>maxpoll</tt>, and <tt>prefer</tt> options are supported for reference clocks, as described on the <a href="clockopt.html">Reference Clock Commands</a> page. The <tt>prefer</tt> option is discussed on the <a href="prefer.html">Mitigation Rules and the <tt>prefer</tt> Keyword</a> page. Some of these options have meaning only for selected clock drivers.</p>
<p>The <tt>fudge</tt> command can be used to provide additional information for individual drivers and normally follows immediately after the <tt>server</tt> command. The reference clock stratum is by default 0, so that the server stratum appears to clients as 1. The <tt>stratum</tt> option can be used to set the stratum to any value in the range 0 through 15. The <tt>refid</tt> option can be used to change the reference identifier, as might in the case when the driver is disciplined by a pulse-per-second (PPS) source. The device-dependent <tt>mode</tt>, <tt>time</tt> and <tt>flag</tt> options can provide additional driver customization.</p>
<h4 id="spec">Special Considerations</h4>
<p>The <a href="audio.html">Audio Drivers</a> page describes three software drivers that process audio signals from an audio codec or sound card. One is for the NIST time and frequency stations WWV and WWVH, another for the Canadian time and frequency station CHU. These require an external shortwave radio and antenna. A third is for the generic IRIG signal produced by some timing devices. Currently, these are supported in FreeBSD, Solaris and SunOS and likely in other system as well.</p>

View File

@ -64,6 +64,7 @@ noinst_HEADERS = \
parse_conf.h \
recvbuff.h \
refclock_atom.h \
refidsmear.h \
ssl_applink.c \
timepps-SCO.h \
timepps-Solaris.h \

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -16,6 +15,61 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -35,8 +89,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = include
DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/libopts/m4/stdnoreturn.m4 \
@ -67,6 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -76,34 +129,69 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
install-exec-recursive install-html-recursive \
install-info-recursive install-pdf-recursive \
install-ps-recursive install-recursive installcheck-recursive \
installdirs-recursive pdf-recursive ps-recursive \
tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
HEADERS = $(noinst_HEADERS)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
am__recursive_targets = \
$(RECURSIVE_TARGETS) \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@ -179,6 +267,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -295,6 +384,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -455,6 +545,7 @@ noinst_HEADERS = \
parse_conf.h \
recvbuff.h \
refclock_atom.h \
refidsmear.h \
ssl_applink.c \
timepps-SCO.h \
timepps-Solaris.h \
@ -481,7 +572,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign include/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -507,22 +597,25 @@ clean-libtool:
-rm -rf .libs _libs
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
@fail=; \
if $(am__make_keepgoing); then \
failcom='fail=yes'; \
else \
failcom='exit 1'; \
fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
@ -537,57 +630,12 @@ $(RECURSIVE_TARGETS):
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-recursive
TAGS: tags
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@ -603,12 +651,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -620,15 +663,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -637,6 +676,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -673,13 +727,10 @@ distdir: $(DISTFILES)
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
@ -714,10 +765,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -795,22 +851,22 @@ ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
install-am install-strip tags-recursive
.MAKE: $(am__recursive_targets) install-am install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
ctags ctags-recursive distclean distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
check-am clean clean-generic clean-libtool cscopelist-am ctags \
ctags-am distclean distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -16,6 +15,61 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -35,8 +89,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = include/isc
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/libopts/m4/stdnoreturn.m4 \
@ -67,6 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -76,21 +129,52 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -141,6 +225,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -257,6 +342,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -373,7 +459,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/isc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign include/isc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -398,26 +483,15 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -429,15 +503,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -446,6 +516,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -494,10 +579,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -577,19 +667,21 @@ uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool ctags distclean distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool cscopelist-am ctags ctags-am distclean \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -80,6 +80,7 @@ typedef enum {
} nic_rule_action;
extern int qos;
SOCKET move_fd(SOCKET fd);
isc_boolean_t get_broadcastclient_flag(void);
extern int is_ip_address(const char *, u_short, sockaddr_u *);

View File

@ -102,26 +102,35 @@ extern u_int32 addr2refid (sockaddr_u *);
/* emalloc.c */
#ifndef EREALLOC_CALLSITE /* ntp_malloc.h defines */
extern void * ereallocz (void *, size_t, size_t, int);
#define erealloczsite(p, n, o, z, f, l) ereallocz(p, n, o, (z))
#define emalloc(n) ereallocz(NULL, n, 0, FALSE)
extern void * oreallocarray (void *optr, size_t nmemb, size_t size);
#define erealloczsite(p, n, o, z, f, l) ereallocz((p), (n), (o), (z))
#define emalloc(n) ereallocz(NULL, (n), 0, FALSE)
#define emalloc_zero(c) ereallocz(NULL, (c), 0, TRUE)
#define erealloc(p, c) ereallocz(p, (c), 0, FALSE)
#define erealloc_zero(p, n, o) ereallocz(p, n, (o), TRUE)
extern char * estrdup_impl (const char *);
#define erealloc(p, c) ereallocz((p), (c), 0, FALSE)
#define erealloc_zero(p, n, o) ereallocz((p), (n), (o), TRUE)
#define ereallocarray(p, n, s) oreallocarray((p), (n), (s))
#define eallocarray(n, s) oreallocarray(NULL, (n), (s))
extern char * estrdup_impl(const char *);
#define estrdup(s) estrdup_impl(s)
#else
extern void * ereallocz (void *, size_t, size_t, int,
const char *, int);
extern void * oreallocarray (void *optr, size_t nmemb, size_t size,
const char *, int);
#define erealloczsite ereallocz
#define emalloc(c) ereallocz(NULL, (c), 0, FALSE, \
__FILE__, __LINE__)
#define emalloc_zero(c) ereallocz(NULL, (c), 0, TRUE, \
__FILE__, __LINE__)
#define erealloc(p, c) ereallocz(p, (c), 0, FALSE, \
#define erealloc(p, c) ereallocz((p), (c), 0, FALSE, \
__FILE__, __LINE__)
#define erealloc_zero(p, n, o) ereallocz(p, n, (o), TRUE, \
#define erealloc_zero(p, n, o) ereallocz((p), (n), (o), TRUE, \
__FILE__, __LINE__)
extern char * estrdup_impl (const char *, const char *, int);
#define ereallocarray(p, n, s) oreallocarray((p), (n), (s), \
__FILE__, __LINE__)
#define eallocarray(n, s) oreallocarray(NULL, (n), (s), \
__FILE__, __LINE__)
extern char * estrdup_impl(const char *, const char *, int);
#define estrdup(s) estrdup_impl((s), __FILE__, __LINE__)
#endif

View File

@ -19,6 +19,11 @@
# include <stdint.h>
#endif
/* Bug 2813 */
#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif
#include "ntp_machine.h"

View File

@ -201,6 +201,7 @@ extern keyid_t session_key (sockaddr_u *, sockaddr_u *, keyid_t,
extern int make_keylist (struct peer *, struct interface *);
extern void key_expire (struct peer *);
extern void crypto_update (void);
extern void crypto_update_taichange(void);
extern void crypto_config (int, char *);
extern void crypto_setup (void);
extern u_int crypto_ident (struct peer *);
@ -222,6 +223,7 @@ extern void receive (struct recvbuf *);
extern void peer_clear (struct peer *, const char *);
extern void process_packet (struct peer *, struct pkt *, u_int);
extern void clock_select (void);
extern void set_sys_leap (u_char);
extern u_long leapsec; /* seconds to next leap (proximity class) */
extern int leapdif; /* TAI difference step at next leap second*/
@ -532,6 +534,11 @@ extern u_long current_time; /* seconds since startup */
extern u_long timer_timereset;
extern u_long timer_overflows;
extern u_long timer_xmtcalls;
extern int leap_sec_in_progress;
#ifdef LEAP_SMEAR
extern struct leap_smear_info leap_smear;
extern int leap_smear_intv;
#endif
#ifdef SYS_WINNT
HANDLE WaitableTimerHandle;
#endif

View File

@ -3,7 +3,7 @@
*
* parse.h,v 4.12 2007/01/14 08:36:03 kardel RELEASE_20070114_A
*
* Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1995-2015 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
*
* Redistribution and use in source and binary forms, with or without
@ -141,7 +141,7 @@ extern unsigned int splclock (void);
* feature information
*/
#define PARSEB_S_LEAP 0x00010000 /* supports LEAP */
#define PARSEB_S_ANTENNA 0x00020000 /* supports antenna information */
#define PARSEB_S_CALLBIT 0x00020000 /* supports callbit information */
#define PARSEB_S_PPS 0x00040000 /* supports PPS time stamping */
#define PARSEB_S_POSITION 0x00080000 /* supports position information (GPS) */
@ -167,7 +167,7 @@ extern unsigned int splclock (void);
#define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND))
#define PARSE_S_LEAP(x) ((x) & PARSEB_S_LEAP)
#define PARSE_S_ANTENNA(x) ((x) & PARSEB_S_ANTENNA)
#define PARSE_S_CALLBIT(x) ((x) & PARSEB_S_CALLBIT)
#define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS)
#define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION)

View File

@ -0,0 +1,3 @@
extern l_fp convertRefIDToLFP(uint32_t r);
extern uint32_t convertLFPToRefID(l_fp num);

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -15,6 +14,61 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -34,7 +88,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = kernel
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/libopts/m4/stdnoreturn.m4 \
@ -65,6 +118,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -74,33 +128,67 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
ctags-recursive dvi-recursive html-recursive info-recursive \
install-data-recursive install-dvi-recursive \
install-exec-recursive install-html-recursive \
install-info-recursive install-pdf-recursive \
install-ps-recursive install-recursive installcheck-recursive \
installdirs-recursive pdf-recursive ps-recursive \
tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
am__recursive_targets = \
$(RECURSIVE_TARGETS) \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@ -176,6 +264,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -292,6 +381,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -404,7 +494,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign kernel/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign kernel/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -430,22 +519,25 @@ clean-libtool:
-rm -rf .libs _libs
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,
# (1) if the variable is set in 'config.status', edit 'config.status'
# (which will cause the Makefiles to be regenerated when you run 'make');
# (2) otherwise, pass the desired values on the 'make' command line.
$(am__recursive_targets):
@fail=; \
if $(am__make_keepgoing); then \
failcom='fail=yes'; \
else \
failcom='exit 1'; \
fi; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
@ -460,57 +552,12 @@ $(RECURSIVE_TARGETS):
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-recursive
TAGS: tags
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@ -526,12 +573,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -543,15 +585,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-recursive
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -560,6 +598,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-recursive
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -596,13 +649,10 @@ distdir: $(DISTFILES)
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
fi; \
done
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
$(am__make_dryrun) \
|| test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
$(am__relativize); \
new_distdir=$$reldir; \
@ -637,10 +687,15 @@ install-am: all-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -718,22 +773,22 @@ ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
install-am install-strip tags-recursive
.MAKE: $(am__recursive_targets) install-am install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
ctags ctags-recursive distclean distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
check-am clean clean-generic clean-libtool cscopelist-am ctags \
ctags-am distclean distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-ps install-ps-am \
install-strip installcheck installcheck-am installdirs \
installdirs-am maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -16,6 +15,61 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -35,8 +89,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = kernel/sys
DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/libopts/m4/stdnoreturn.m4 \
@ -67,6 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -76,21 +129,52 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -141,6 +225,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -257,6 +342,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -371,7 +457,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign kernel/sys/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign kernel/sys/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -396,26 +481,15 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -427,15 +501,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -444,6 +514,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -492,10 +577,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -575,19 +665,21 @@ uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool ctags distclean distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool cscopelist-am ctags ctags-am distclean \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

View File

@ -147,6 +147,14 @@ internal_current(isc_interfaceiter_t *iter) {
ifa = iter->pos;
#ifdef __linux
/*
* [Bug 2792]
* burnicki: iter->pos is usually never NULL here (anymore?),
* so linux_if_inet6_current(iter) is never called here.
* However, that routine would check (under Linux), if the
* interface is in a tentative state, e.g. if there's no link
* yet but an IPv6 address has already be assigned.
*/
if (iter->pos == NULL)
return (linux_if_inet6_current(iter));
#endif
@ -154,6 +162,17 @@ internal_current(isc_interfaceiter_t *iter) {
INSIST(ifa != NULL);
INSIST(ifa->ifa_name != NULL);
#ifdef IFF_RUNNING
/*
* [Bug 2792]
* burnicki: if the interface is not running then
* it may be in a tentative state. See above.
*/
if ((ifa->ifa_flags & IFF_RUNNING) == 0)
return (ISC_R_IGNORE);
#endif
if (ifa->ifa_addr == NULL)
return (ISC_R_IGNORE);

View File

@ -13,15 +13,23 @@ test: jsmn_test
./jsmn_test
jsmn_test: jsmn_test.o
$(CC) -L. -ljsmn $< -o $@
$(CC) $(LDFLAGS) -L. -ljsmn $< -o $@
jsmn_test.o: jsmn_test.c libjsmn.a
simple_example: example/simple.o libjsmn.a
$(CC) $(LDFLAGS) $^ -o $@
jsondump: example/jsondump.o libjsmn.a
$(CC) $(LDFLAGS) $^ -o $@
clean:
rm -f jsmn.o jsmn_test.o
rm -f jsmn.o jsmn_test.o example/simple.o
rm -f jsmn_test
rm -f jsmn_test.exe
rm -f libjsmn.a
rm -f simple_example
rm -f jsondump
.PHONY: all clean test

View File

@ -82,9 +82,8 @@ To clone the repository you should have mercurial installed. Just run:
$ hg clone http://bitbucket.org/zserge/jsmn jsmn
Repository layout is simple: jsmn.c and jsmn.h are library files; demo.c is an
example of how to use jsmn (it is also used in unit tests); test.sh is a test
script. You will also find README, LICENSE and Makefile files inside.
Repository layout is simple: jsmn.c and jsmn.h are library files, tests are in
the jsmn\_test.c, you will also find README, LICENSE and Makefile files inside.
To build the library, run `make`. It is also recommended to run `make test`.
Let me know, if some tests fail.
@ -127,20 +126,27 @@ to simplify string extraction from JSON data.
All job is done by `jsmn_parser` object. You can initialize a new parser using:
struct jsmn_parser parser;
jsmn_parser parser;
jsmntok_t tokens[10];
jsmn_init(&parser);
// js - pointer to JSON string
// tokens - an array of tokens available
// 10 - number of tokens available
jsmn_init_parser(&parser, js, tokens, 10);
jsmn_parse(&parser, js, tokens, 10);
This will create a parser, that can parse up to 10 JSON tokens from `js` string.
This will create a parser, and then it tries to parse up to 10 JSON tokens from
the `js` string.
A non-negative reutrn value of `jsmn_parse` is the number of tokens actually
used by the parser.
Passing NULL instead of the tokens array would not store parsing results, but
instead the function will return the value of tokens needed to parse the given
string. This can be useful if you don't know yet how many tokens to allocate.
Later, you can use `jsmn_parse(&parser)` function to process JSON string with the parser.
If something goes wrong, you will get an error. Error will be one of these:
* `JSMN_SUCCESS` - everything went fine. String was parsed
* `JSMN_ERROR_INVAL` - bad token, JSON string is corrupted
* `JSMN_ERROR_NOMEM` - not enough tokens, JSON string is too large
* `JSMN_ERROR_PART` - JSON string is too short, expecting more JSON data

View File

@ -0,0 +1,112 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "../jsmn.h"
/*
* An example of reading JSON from stdin and printing its content to stdout.
* The output looks like YAML, but I'm not sure if it's really compatible.
*/
static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {
int i, j, k;
if (count == 0) {
return 0;
}
if (t->type == JSMN_PRIMITIVE) {
printf("%.*s", t->end - t->start, js+t->start);
return 1;
} else if (t->type == JSMN_STRING) {
printf("'%.*s'", t->end - t->start, js+t->start);
return 1;
} else if (t->type == JSMN_OBJECT) {
printf("\n");
j = 0;
for (i = 0; i < t->size; i++) {
for (k = 0; k < indent; k++) printf(" ");
j += dump(js, t+1+j, count-j, indent+1);
printf(": ");
j += dump(js, t+1+j, count-j, indent+1);
printf("\n");
}
return j+1;
} else if (t->type == JSMN_ARRAY) {
j = 0;
printf("\n");
for (i = 0; i < t->size; i++) {
for (k = 0; k < indent-1; k++) printf(" ");
printf(" - ");
j += dump(js, t+1+j, count-j, indent+1);
printf("\n");
}
return j+1;
}
return 0;
}
int main() {
int r;
int eof_expected = 0;
char *js = NULL;
size_t jslen = 0;
char buf[BUFSIZ];
jsmn_parser p;
jsmntok_t *tok;
size_t tokcount = 2;
/* Prepare parser */
jsmn_init(&p);
/* Allocate some tokens as a start */
tok = malloc(sizeof(*tok) * tokcount);
if (tok == NULL) {
fprintf(stderr, "malloc(): errno=%d\n", errno);
return 3;
}
for (;;) {
/* Read another chunk */
r = fread(buf, 1, sizeof(buf), stdin);
if (r < 0) {
fprintf(stderr, "fread(): %d, errno=%d\n", r, errno);
return 1;
}
if (r == 0) {
if (eof_expected != 0) {
return 0;
} else {
fprintf(stderr, "fread(): unexpected EOF\n");
return 2;
}
}
js = realloc(js, jslen + r + 1);
if (js == NULL) {
fprintf(stderr, "realloc(): errno=%d\n", errno);
return 3;
}
strncpy(js + jslen, buf, r);
jslen = jslen + r;
again:
r = jsmn_parse(&p, js, jslen, tok, tokcount);
if (r < 0) {
if (r == JSMN_ERROR_NOMEM) {
tokcount = tokcount * 2;
tok = realloc(tok, sizeof(*tok) * tokcount);
if (tok == NULL) {
fprintf(stderr, "realloc(): errno=%d\n", errno);
return 3;
}
goto again;
}
} else {
dump(js, tok, p.toknext, 0);
eof_expected = 1;
}
}
return 0;
}

View File

@ -0,0 +1,75 @@
#include <stdio.h>
#include <string.h>
#include "../jsmn.h"
/*
* A small example of jsmn parsing when JSON structure is known and number of
* tokens is predictable.
*/
const char *JSON_STRING =
"{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n "
"\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}";
static int jsoneq(const char *json, jsmntok_t *tok, const char *s) {
if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start &&
strncmp(json + tok->start, s, tok->end - tok->start) == 0) {
return 0;
}
return -1;
}
int main() {
int i;
int r;
jsmn_parser p;
jsmntok_t t[128]; /* We expect no more than 128 tokens */
jsmn_init(&p);
r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), t, sizeof(t)/sizeof(t[0]));
if (r < 0) {
printf("Failed to parse JSON: %d\n", r);
return 1;
}
/* Assume the top-level element is an object */
if (r < 1 || t[0].type != JSMN_OBJECT) {
printf("Object expected\n");
return 1;
}
/* Loop over all keys of the root object */
for (i = 1; i < r; i++) {
if (jsoneq(JSON_STRING, &t[i], "user") == 0) {
/* We may use strndup() to fetch string value */
printf("- User: %.*s\n", t[i+1].end-t[i+1].start,
JSON_STRING + t[i+1].start);
i++;
} else if (jsoneq(JSON_STRING, &t[i], "admin") == 0) {
/* We may additionally check if the value is either "true" or "false" */
printf("- Admin: %.*s\n", t[i+1].end-t[i+1].start,
JSON_STRING + t[i+1].start);
i++;
} else if (jsoneq(JSON_STRING, &t[i], "uid") == 0) {
/* We may want to do strtol() here to get numeric value */
printf("- UID: %.*s\n", t[i+1].end-t[i+1].start,
JSON_STRING + t[i+1].start);
i++;
} else if (jsoneq(JSON_STRING, &t[i], "groups") == 0) {
int j;
printf("- Groups:\n");
if (t[i+1].type != JSMN_ARRAY) {
continue; /* We expect groups to be an array of strings */
}
for (j = 0; j < t[i+1].size; j++) {
jsmntok_t *g = &t[i+j+2];
printf(" * %.*s\n", g->end - g->start, JSON_STRING + g->start);
}
i += t[i+1].size + 1;
} else {
printf("Unexpected key: %.*s\n", t[i].end-t[i].start,
JSON_STRING + t[i].start);
}
}
return 0;
}

View File

@ -1,15 +1,14 @@
#include <stdlib.h>
#include <string.h>
#include "jsmn.h"
/**
* Allocates a fresh unused token from the token pull.
*/
static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
jsmntok_t *tokens, size_t num_tokens) {
jsmntok_t *tok;
if ((size_t)parser->toknext >= num_tokens) {
if (parser->toknext >= num_tokens) {
return NULL;
}
tok = &tokens[parser->toknext++];
@ -24,7 +23,7 @@ static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser,
/**
* Fills token type and boundaries.
*/
static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type,
static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type,
int start, int end) {
token->type = type;
token->start = start;
@ -36,13 +35,13 @@ static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type,
* Fills next available token with JSON primitive.
*/
static jsmnerr_t jsmn_parse_primitive(jsmn_parser *parser, const char *js,
jsmntok_t *tokens, size_t num_tokens) {
size_t len, jsmntok_t *tokens, size_t num_tokens) {
jsmntok_t *token;
int start;
start = parser->pos;
for (; js[parser->pos] != '\0'; parser->pos++) {
for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
switch (js[parser->pos]) {
#ifndef JSMN_STRICT
/* In strict mode primitive must be followed by "," or "}" or "]" */
@ -64,6 +63,10 @@ static jsmnerr_t jsmn_parse_primitive(jsmn_parser *parser, const char *js,
#endif
found:
if (tokens == NULL) {
parser->pos--;
return 0;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == NULL) {
parser->pos = start;
@ -74,14 +77,14 @@ static jsmnerr_t jsmn_parse_primitive(jsmn_parser *parser, const char *js,
token->parent = parser->toksuper;
#endif
parser->pos--;
return JSMN_SUCCESS;
return 0;
}
/**
* Filsl next token with JSON string.
*/
static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
jsmntok_t *tokens, size_t num_tokens) {
size_t len, jsmntok_t *tokens, size_t num_tokens) {
jsmntok_t *token;
int start = parser->pos;
@ -89,11 +92,14 @@ static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
parser->pos++;
/* Skip starting quote */
for (; js[parser->pos] != '\0'; parser->pos++) {
for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
char c = js[parser->pos];
/* Quote: end of string */
if (c == '\"') {
if (tokens == NULL) {
return 0;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == NULL) {
parser->pos = start;
@ -103,13 +109,12 @@ static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
#ifdef JSMN_PARENT_LINKS
token->parent = parser->toksuper;
#endif
return JSMN_SUCCESS;
return 0;
}
/* Backslash: Quoted symbol expected */
if (c == '\\') {
int i = 0;
if (c == '\\' && parser->pos + 1 < len) {
int i;
parser->pos++;
switch (js[parser->pos]) {
/* Allowed escaped symbols */
@ -119,7 +124,7 @@ static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
/* Allows escaped symbol \uXXXX */
case 'u':
parser->pos++;
for(; i < 4 && js[parser->pos] != '\0'; i++) {
for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) {
/* If it isn't a hex character we have an error */
if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */
(js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */
@ -145,19 +150,24 @@ static jsmnerr_t jsmn_parse_string(jsmn_parser *parser, const char *js,
/**
* Parse JSON string and fill tokens.
*/
jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, jsmntok_t *tokens,
unsigned int num_tokens) {
jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
jsmntok_t *tokens, unsigned int num_tokens) {
jsmnerr_t r;
int i;
jsmntok_t *token;
int count = 0;
for (; js[parser->pos] != '\0'; parser->pos++) {
for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) {
char c;
jsmntype_t type;
c = js[parser->pos];
switch (c) {
case '{': case '[':
count++;
if (tokens == NULL) {
break;
}
token = jsmn_alloc_token(parser, tokens, num_tokens);
if (token == NULL)
return JSMN_ERROR_NOMEM;
@ -172,6 +182,8 @@ jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, jsmntok_t *tokens,
parser->toksuper = parser->toknext - 1;
break;
case '}': case ']':
if (tokens == NULL)
break;
type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY);
#ifdef JSMN_PARENT_LINKS
if (parser->toknext < 1) {
@ -216,25 +228,56 @@ jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, jsmntok_t *tokens,
#endif
break;
case '\"':
r = jsmn_parse_string(parser, js, tokens, num_tokens);
r = jsmn_parse_string(parser, js, len, tokens, num_tokens);
if (r < 0) return r;
if (parser->toksuper != -1)
count++;
if (parser->toksuper != -1 && tokens != NULL)
tokens[parser->toksuper].size++;
break;
case '\t' : case '\r' : case '\n' : case ':' : case ',': case ' ':
case '\t' : case '\r' : case '\n' : case ' ':
break;
case ':':
parser->toksuper = parser->toknext - 1;
break;
case ',':
if (tokens != NULL &&
tokens[parser->toksuper].type != JSMN_ARRAY &&
tokens[parser->toksuper].type != JSMN_OBJECT) {
#ifdef JSMN_PARENT_LINKS
parser->toksuper = tokens[parser->toksuper].parent;
#else
for (i = parser->toknext - 1; i >= 0; i--) {
if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) {
if (tokens[i].start != -1 && tokens[i].end == -1) {
parser->toksuper = i;
break;
}
}
}
#endif
}
break;
#ifdef JSMN_STRICT
/* In strict mode primitives are: numbers and booleans */
case '-': case '0': case '1' : case '2': case '3' : case '4':
case '5': case '6': case '7' : case '8': case '9':
case 't': case 'f': case 'n' :
/* And they must not be keys of the object */
if (tokens != NULL) {
jsmntok_t *t = &tokens[parser->toksuper];
if (t->type == JSMN_OBJECT ||
(t->type == JSMN_STRING && t->size != 0)) {
return JSMN_ERROR_INVAL;
}
}
#else
/* In non-strict mode every unquoted value is a primitive */
default:
#endif
r = jsmn_parse_primitive(parser, js, tokens, num_tokens);
r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens);
if (r < 0) return r;
if (parser->toksuper != -1)
count++;
if (parser->toksuper != -1 && tokens != NULL)
tokens[parser->toksuper].size++;
break;
@ -243,22 +286,22 @@ jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, jsmntok_t *tokens,
default:
return JSMN_ERROR_INVAL;
#endif
}
}
if (tokens != NULL) {
for (i = parser->toknext - 1; i >= 0; i--) {
/* Unmatched opened object or array */
if (tokens[i].start != -1 && tokens[i].end == -1) {
return JSMN_ERROR_PART;
}
}
}
for (i = parser->toknext - 1; i >= 0; i--) {
/* Unmatched opened object or array */
if (tokens[i].start != -1 && tokens[i].end == -1) {
return JSMN_ERROR_PART;
}
}
return JSMN_SUCCESS;
return count;
}
/**
* Creates a new parser based over a given buffer with an array of tokens
* Creates a new parser based over a given buffer with an array of tokens
* available.
*/
void jsmn_init(jsmn_parser *parser) {

View File

@ -1,6 +1,12 @@
#ifndef __JSMN_H_
#define __JSMN_H_
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* JSON type identifier. Basic types are:
* o Object
@ -21,9 +27,7 @@ typedef enum {
/* Invalid character inside JSON string */
JSMN_ERROR_INVAL = -2,
/* The string is not a full JSON packet, more bytes expected */
JSMN_ERROR_PART = -3,
/* Everything was fine */
JSMN_SUCCESS = 0
JSMN_ERROR_PART = -3
} jsmnerr_t;
/**
@ -48,7 +52,7 @@ typedef struct {
*/
typedef struct {
unsigned int pos; /* offset in the JSON string */
int toknext; /* next token to allocate */
unsigned int toknext; /* next token to allocate */
int toksuper; /* superior token node, e.g parent object or array */
} jsmn_parser;
@ -61,7 +65,11 @@ void jsmn_init(jsmn_parser *parser);
* Run JSON parser. It parses a JSON data string into and array of tokens, each describing
* a single JSON object.
*/
jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js,
jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
jsmntok_t *tokens, unsigned int num_tokens);
#ifdef __cplusplus
}
#endif
#endif /* __JSMN_H_ */

View File

@ -2,8 +2,6 @@
#include <stdlib.h>
#include <string.h>
#include "jsmn.c"
static int test_passed = 0;
static int test_failed = 0;
@ -40,6 +38,9 @@ static void test(int (*func)(void), const char *name) {
printf("start: %d, end: %d, type: %d, size: %d\n", \
(t).start, (t).end, (t).type, (t).size)
#define JSMN_STRICT
#include "jsmn.c"
int test_empty() {
const char *js;
int r;
@ -48,30 +49,30 @@ int test_empty() {
js = "{}";
jsmn_init(&p);
r = jsmn_parse(&p, js, t, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), t, 10);
check(r >= 0);
check(t[0].type == JSMN_OBJECT);
check(t[0].start == 0 && t[0].end == 2);
js = "[]";
jsmn_init(&p);
r = jsmn_parse(&p, js, t, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), t, 10);
check(r >= 0);
check(t[0].type == JSMN_ARRAY);
check(t[0].start == 0 && t[0].end == 2);
js = "{\"a\":[]}";
jsmn_init(&p);
r = jsmn_parse(&p, js, t, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), t, 10);
check(r >= 0);
check(t[0].type == JSMN_OBJECT && t[0].start == 0 && t[0].end == 8);
check(t[1].type == JSMN_STRING && t[1].start == 2 && t[1].end == 3);
check(t[2].type == JSMN_ARRAY && t[2].start == 5 && t[2].end == 7);
js = "[{},{}]";
jsmn_init(&p);
r = jsmn_parse(&p, js, t, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), t, 10);
check(r >= 0);
check(t[0].type == JSMN_ARRAY && t[0].start == 0 && t[0].end == 7);
check(t[1].type == JSMN_OBJECT && t[1].start == 1 && t[1].end == 3);
check(t[2].type == JSMN_OBJECT && t[2].start == 4 && t[2].end == 6);
@ -87,8 +88,8 @@ int test_simple() {
js = "{\"a\": 0}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
check(TOKEN_EQ(tokens[0], 0, 8, JSMN_OBJECT));
check(TOKEN_EQ(tokens[1], 2, 3, JSMN_STRING));
check(TOKEN_EQ(tokens[2], 6, 7, JSMN_PRIMITIVE));
@ -99,59 +100,59 @@ int test_simple() {
jsmn_init(&p);
js = "[\"a\":{},\"b\":{}]";
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
jsmn_init(&p);
js = "{\n \"Day\": 26,\n \"Month\": 9,\n \"Year\": 12\n }";
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
return 0;
}
int test_primitive() {
#ifndef JSMN_STRICT
int r;
jsmn_parser p;
jsmntok_t tok[10];
const char *js;
#ifndef JSMN_STRICT
js = "\"boolVar\" : true";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_PRIMITIVE);
check(TOKEN_STRING(js, tok[0], "boolVar"));
check(TOKEN_STRING(js, tok[1], "true"));
js = "\"boolVar\" : false";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_PRIMITIVE);
check(TOKEN_STRING(js, tok[0], "boolVar"));
check(TOKEN_STRING(js, tok[1], "false"));
js = "\"intVar\" : 12345";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_PRIMITIVE);
check(TOKEN_STRING(js, tok[0], "intVar"));
check(TOKEN_STRING(js, tok[1], "12345"));
js = "\"floatVar\" : 12.345";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_PRIMITIVE);
check(TOKEN_STRING(js, tok[0], "floatVar"));
check(TOKEN_STRING(js, tok[1], "12.345"));
js = "\"nullVar\" : null";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_PRIMITIVE);
check(TOKEN_STRING(js, tok[0], "nullVar"));
check(TOKEN_STRING(js, tok[1], "null"));
@ -167,24 +168,24 @@ int test_string() {
js = "\"strVar\" : \"hello world\"";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_STRING);
check(TOKEN_STRING(js, tok[0], "strVar"));
check(TOKEN_STRING(js, tok[1], "hello world"));
js = "\"strVar\" : \"escapes: \\/\\r\\n\\t\\b\\f\\\"\\\\\"";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_STRING);
check(TOKEN_STRING(js, tok[0], "strVar"));
check(TOKEN_STRING(js, tok[1], "escapes: \\/\\r\\n\\t\\b\\f\\\"\\\\"));
js = "\"strVar\" : \"\"";
jsmn_init(&p);
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_STRING);
check(TOKEN_STRING(js, tok[0], "strVar"));
check(TOKEN_STRING(js, tok[1], ""));
@ -200,27 +201,37 @@ int test_partial_string() {
jsmn_init(&p);
js = "\"x\": \"va";
r = jsmn_parse(&p, js, tok, 10);
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_STRING);
check(TOKEN_STRING(js, tok[0], "x"));
check(p.toknext == 1);
jsmn_init(&p);
char js_slash[9] = "\"x\": \"va\\";
r = jsmn_parse(&p, js_slash, sizeof(js_slash), tok, 10);
check(r == JSMN_ERROR_PART);
jsmn_init(&p);
char js_unicode[10] = "\"x\": \"va\\u";
r = jsmn_parse(&p, js_unicode, sizeof(js_unicode), tok, 10);
check(r == JSMN_ERROR_PART);
js = "\"x\": \"valu";
r = jsmn_parse(&p, js, tok, 10);
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_STRING);
check(TOKEN_STRING(js, tok[0], "x"));
check(p.toknext == 1);
js = "\"x\": \"value\"";
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_STRING);
check(TOKEN_STRING(js, tok[0], "x"));
check(TOKEN_STRING(js, tok[1], "value"));
js = "\"x\": \"value\", \"y\": \"value y\"";
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_STRING
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_STRING
&& tok[1].type == JSMN_STRING && tok[2].type == JSMN_STRING
&& tok[3].type == JSMN_STRING);
check(TOKEN_STRING(js, tok[0], "x"));
@ -241,8 +252,8 @@ int test_unquoted_keys() {
jsmn_init(&p);
js = "key1: \"value\"\nkey2 : 123";
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_PRIMITIVE
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_PRIMITIVE
&& tok[1].type == JSMN_STRING && tok[2].type == JSMN_PRIMITIVE
&& tok[3].type == JSMN_PRIMITIVE);
check(TOKEN_STRING(js, tok[0], "key1"));
@ -261,19 +272,19 @@ int test_partial_array() {
jsmn_init(&p);
js = " [ 1, true, ";
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_ARRAY
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_ARRAY
&& tok[1].type == JSMN_PRIMITIVE && tok[2].type == JSMN_PRIMITIVE);
js = " [ 1, true, [123, \"hello";
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_ARRAY
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_ARRAY
&& tok[1].type == JSMN_PRIMITIVE && tok[2].type == JSMN_PRIMITIVE
&& tok[3].type == JSMN_ARRAY && tok[4].type == JSMN_PRIMITIVE);
js = " [ 1, true, [123, \"hello\"]";
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_ARRAY
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r == JSMN_ERROR_PART && tok[0].type == JSMN_ARRAY
&& tok[1].type == JSMN_PRIMITIVE && tok[2].type == JSMN_PRIMITIVE
&& tok[3].type == JSMN_ARRAY && tok[4].type == JSMN_PRIMITIVE
&& tok[5].type == JSMN_STRING);
@ -281,8 +292,8 @@ int test_partial_array() {
check(tok[3].size == 2);
js = " [ 1, true, [123, \"hello\"]]";
r = jsmn_parse(&p, js, tok, 10);
check(r == JSMN_SUCCESS && tok[0].type == JSMN_ARRAY
r = jsmn_parse(&p, js, strlen(js), tok, 10);
check(r >= 0 && tok[0].type == JSMN_ARRAY
&& tok[1].type == JSMN_PRIMITIVE && tok[2].type == JSMN_PRIMITIVE
&& tok[3].type == JSMN_ARRAY && tok[4].type == JSMN_PRIMITIVE
&& tok[5].type == JSMN_STRING);
@ -304,13 +315,13 @@ int test_array_nomem() {
jsmn_init(&p);
memset(toksmall, 0, sizeof(toksmall));
memset(toklarge, 0, sizeof(toklarge));
r = jsmn_parse(&p, js, toksmall, i);
r = jsmn_parse(&p, js, strlen(js), toksmall, i);
check(r == JSMN_ERROR_NOMEM);
memcpy(toklarge, toksmall, sizeof(toksmall));
r = jsmn_parse(&p, js, toklarge, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), toklarge, 10);
check(r >= 0);
check(toklarge[0].type == JSMN_ARRAY && toklarge[0].size == 3);
check(toklarge[3].type == JSMN_ARRAY && toklarge[3].size == 2);
@ -319,7 +330,6 @@ int test_array_nomem() {
}
int test_objects_arrays() {
int i;
int r;
jsmn_parser p;
jsmntok_t tokens[10];
@ -327,27 +337,60 @@ int test_objects_arrays() {
js = "[10}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "[10]";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
js = "{\"a\": 1]";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\": 1}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
return 0;
}
int test_issue_22() {
int r;
jsmn_parser p;
jsmntok_t tokens[128];
const char *js;
js = "{ \"height\":10, \"layers\":[ { \"data\":[6,6], \"height\":10, "
"\"name\":\"Calque de Tile 1\", \"opacity\":1, \"type\":\"tilelayer\", "
"\"visible\":true, \"width\":10, \"x\":0, \"y\":0 }], "
"\"orientation\":\"orthogonal\", \"properties\": { }, \"tileheight\":32, "
"\"tilesets\":[ { \"firstgid\":1, \"image\":\"..\\/images\\/tiles.png\", "
"\"imageheight\":64, \"imagewidth\":160, \"margin\":0, \"name\":\"Tiles\", "
"\"properties\":{}, \"spacing\":0, \"tileheight\":32, \"tilewidth\":32 }], "
"\"tilewidth\":32, \"version\":1, \"width\":10 }";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 128);
check(r >= 0);
#if 0
for (i = 1; tokens[i].end < tokens[0].end; i++) {
if (tokens[i].type == JSMN_STRING || tokens[i].type == JSMN_PRIMITIVE) {
printf("%.*s\n", tokens[i].end - tokens[i].start, js + tokens[i].start);
} else if (tokens[i].type == JSMN_ARRAY) {
printf("[%d elems]\n", tokens[i].size);
} else if (tokens[i].type == JSMN_OBJECT) {
printf("{%d elems}\n", tokens[i].size);
} else {
TOKEN_PRINT(tokens[i]);
}
}
#endif
return 0;
}
int test_unicode_characters() {
jsmn_parser p;
jsmntok_t tokens[10];
@ -356,42 +399,193 @@ int test_unicode_characters() {
int r;
js = "{\"a\":\"\\uAbcD\"}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
js = "{\"a\":\"str\\u0000\"}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
js = "{\"a\":\"\\uFFFFstr\"}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
js = "{\"a\":\"str\\uFFGFstr\"}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\":\"str\\u@FfF\"}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\":[\"\\u028\"]}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\":[\"\\u0280\"]}";
jsmn_init(&p);
r = jsmn_parse(&p, js, tokens, 10);
check(r == JSMN_SUCCESS);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r >= 0);
return 0;
}
int test_input_length() {
const char *js;
int r;
jsmn_parser p;
jsmntok_t tokens[10];
js = "{\"a\": 0}garbage";
jsmn_init(&p);
r = jsmn_parse(&p, js, 8, tokens, 10);
check(r == 3);
check(TOKEN_STRING(js, tokens[0], "{\"a\": 0}"));
check(TOKEN_STRING(js, tokens[1], "a"));
check(TOKEN_STRING(js, tokens[2], "0"));
return 0;
}
int test_count() {
jsmn_parser p;
const char *js;
js = "{}";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 1);
js = "[]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 1);
js = "[[]]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 2);
js = "[[], []]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 3);
js = "[[], []]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 3);
js = "[[], [[]], [[], []]]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 7);
js = "[\"a\", [[], []]]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 5);
js = "[[], \"[], [[]]\", [[]]]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 5);
js = "[1, 2, 3]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 4);
js = "[1, 2, [3, \"a\"], null]";
jsmn_init(&p);
check(jsmn_parse(&p, js, strlen(js), NULL, 0) == 7);
return 0;
}
int test_keyvalue() {
const char *js;
int r;
jsmn_parser p;
jsmntok_t tokens[10];
js = "{\"a\": 0, \"b\": \"c\"}";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == 5);
check(tokens[0].size == 2); /* two keys */
check(tokens[1].size == 1 && tokens[3].size == 1); /* one value per key */
check(tokens[2].size == 0 && tokens[4].size == 0); /* values have zero size */
js = "{\"a\"\n0}";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\", 0}";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\": {2}}";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\": {2: 3}}";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
js = "{\"a\": {\"a\": 2 3}}";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == JSMN_ERROR_INVAL);
return 0;
}
/** A huge redefinition of everything to include jsmn in non-script mode */
#define jsmn_init jsmn_init_nonstrict
#define jsmn_parse jsmn_parse_nonstrict
#define jsmn_parser jsmn_parser_nonstrict
#define jsmn_alloc_token jsmn_alloc_token_nonstrict
#define jsmn_fill_token jsmn_fill_token_nonstrict
#define jsmn_parse_primitive jsmn_parse_primitive_nonstrict
#define jsmn_parse_string jsmn_parse_string_nonstrict
#define jsmntype_t jsmntype_nonstrict_t
#define jsmnerr_t jsmnerr_nonstrict_t
#define jsmntok_t jsmntok_nonstrict_t
#define JSMN_PRIMITIVE JSMN_PRIMITIVE_NONSTRICT
#define JSMN_OBJECT JSMN_OBJECT_NONSTRICT
#define JSMN_ARRAY JSMN_ARRAY_NONSTRICT
#define JSMN_STRING JSMN_STRING_NONSTRICT
#define JSMN_ERROR_NOMEM JSMN_ERROR_NOMEM_NONSTRICT
#define JSMN_ERROR_INVAL JSMN_ERROR_INVAL_NONSTRICT
#define JSMN_ERROR_PART JSMN_ERROR_PART_NONSTRICT
#undef __JSMN_H_
#undef JSMN_STRICT
#include "jsmn.c"
int test_nonstrict() {
const char *js;
int r;
jsmn_parser p;
jsmntok_t tokens[10];
js = "a: 0garbage";
jsmn_init(&p);
r = jsmn_parse(&p, js, 4, tokens, 10);
check(r == 2);
check(TOKEN_STRING(js, tokens[0], "a"));
check(TOKEN_STRING(js, tokens[1], "0"));
js = "Day : 26\nMonth : Sep\n\nYear: 12";
jsmn_init(&p);
r = jsmn_parse(&p, js, strlen(js), tokens, 10);
check(r == 6);
return 0;
}
int main() {
test(test_empty, "general test for a empty JSON objects/arrays");
test(test_simple, "general test for a simple JSON string");
@ -403,6 +597,11 @@ int main() {
test(test_unquoted_keys, "test unquoted keys (like in JavaScript)");
test(test_objects_arrays, "test objects and arrays");
test(test_unicode_characters, "test unicode characters");
test(test_input_length, "test strings that are not null-terminated");
test(test_issue_22, "test issue #22");
test(test_count, "test tokens count estimation");
test(test_nonstrict, "test for non-strict mode");
test(test_keyvalue, "test for keys/values");
printf("\nPASSED: %d\nFAILED: %d\n", test_passed, test_failed);
return 0;
}

View File

@ -89,6 +89,7 @@ libntp_a_SRCS = \
numtohost.c \
octtoint.c \
prettydate.c \
refidsmear.c \
recvbuff.c \
refnumtoa.c \
snprintf.c \

File diff suppressed because it is too large Load Diff

View File

@ -60,6 +60,59 @@ ereallocz(
return mem;
}
/* oreallocarray.c is licensed under the following:
* Copyright (c) 2008 Otto Moerbeek <otto@drijf.net>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <stdint.h>
/*
* This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX
* if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW
*/
#define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4))
void *
oreallocarray(
void *optr,
size_t nmemb,
size_t size
#ifdef EREALLOC_CALLSITE /* ntp_malloc.h */
,
const char * file,
int line
#endif
)
{
if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
nmemb > 0 && SIZE_MAX / nmemb < size) {
#ifndef EREALLOC_CALLSITE
msyslog(LOG_ERR, "fatal allocation size overflow");
#else
msyslog(LOG_ERR,
"fatal allocation size overflow %s line %d",
file, line);
#endif
exit(1);
}
#ifndef EREALLOC_CALLSITE
return ereallocz(optr, (size * nmemb), 0, FALSE);
#else
return ereallocz(optr, (size * nmemb), 0, FALSE, file, line);
#endif
}
char *
estrdup_impl(

View File

@ -0,0 +1,58 @@
#include <config.h>
#include <ntp.h>
#include <ntp_fp.h>
#include <refidsmear.h>
/*
* we want to test a refid format of:
* 254.x.y.x
*
* where x.y.z are 24 bits containing 2 (signed) integer bits
* and 22 fractional bits.
*
*/
l_fp
convertRefIDToLFP(uint32_t r)
{
l_fp temp;
r = ntohl(r);
// printf("%03d %08x: ", (r >> 24) & 0xFF, (r & 0x00FFFFFF) );
temp.l_uf = (r << 10); /* 22 fractional bits */
temp.l_ui = (r >> 22) & 0x3;
temp.l_ui |= ~(temp.l_ui & 2) + 1;
return temp;
}
uint32_t
convertLFPToRefID(l_fp num)
{
uint32_t temp;
/* round the input with the highest bit to shift out from the
* fraction, then keep just two bits from the integral part.
*
* TODO: check for overflows; should we clamp/saturate or just
* complain?
*/
L_ADDUF(&num, 0x200);
num.l_ui &= 3;
/* combine integral and fractional part to 24 bits */
temp = (num.l_ui << 22) | (num.l_uf >> 10);
/* put in the leading 254.0.0.0 */
temp |= UINT32_C(0xFE000000);
// printf("%03d %08x: ", (temp >> 24) & 0xFF, (temp & 0x00FFFFFF) );
return htonl(temp);
}

View File

@ -1,7 +1,8 @@
#include <config.h>
#include <string.h>
#include <ntp_assert.h>
#include "ntp_malloc.h"
#include <string.h>
#ifndef HAVE_STRDUP
@ -15,15 +16,13 @@ strdup(
size_t octets;
char * cp;
if (s) {
octets = 1 + strlen(s);
cp = malloc(octets);
if (NULL != cp)
memcpy(cp, s, octets);
else
cp = NULL;
REQUIRE(s);
octets = strlen(s) + 1;
if ((cp = malloc(octets)) == NULL)
return NULL;
memcpy(cp, s, octets);
return(cp);
return cp;
}
#else
int strdup_c_nonempty_compilation_unit;

View File

@ -8,6 +8,7 @@
#include <stdio.h>
#include <ctype.h>
#include <signal.h>
#include <sys/wait.h>
#include "iosignal.h"
#include "ntp_stdlib.h"
@ -111,6 +112,23 @@ interrupt_worker_sleep(void)
}
/*
* harvest_child_status() runs in the parent.
*/
static void
harvest_child_status(
blocking_child * c
)
{
if (c->pid)
{
/* Wait on the child so it can finish terminating */
if (waitpid(c->pid, NULL, 0) == c->pid)
TRACE(4, ("harvested child %d\n", c->pid));
else msyslog(LOG_ERR, "error waiting on child %d: %m", c->pid);
}
}
/*
* req_child_exit() runs in the parent.
*/
@ -124,6 +142,8 @@ req_child_exit(
c->req_write_pipe = -1;
return 0;
}
/* Closing the pipe forces the child to exit */
harvest_child_status(c);
return -1;
}
@ -136,10 +156,7 @@ cleanup_after_child(
blocking_child * c
)
{
if (-1 != c->req_write_pipe) {
close(c->req_write_pipe);
c->req_write_pipe = -1;
}
harvest_child_status(c);
if (-1 != c->resp_read_pipe) {
(*addremove_io_fd)(c->resp_read_pipe, c->ispipe, TRUE);
close(c->resp_read_pipe);
@ -209,6 +226,8 @@ send_blocking_req_internal(
"send_blocking_req_internal: short write %d of %d",
rc, octets);
/* Fatal error. Clean up the child process. */
req_child_exit(c);
exit(1); /* otherwise would be return -1 */
}

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -17,6 +16,61 @@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -36,9 +90,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
EXTRA_PROGRAMS = parsestreams$(EXEEXT) parsesolaris$(EXEEXT)
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf
subdir = libparse
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@ -70,6 +121,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -79,18 +131,17 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS ?= cru
AM_V_AR = $(am__v_AR_$(V))
am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
am__v_AR_0 = @echo " AR " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libparse_a_AR = $(AR) $(ARFLAGS)
libparse_a_LIBADD =
am__objects_1 =
@ -119,12 +170,25 @@ PROGRAMS = $(noinst_PROGRAMS)
parsesolaris_SOURCES = parsesolaris.c
parsesolaris_OBJECTS = parsesolaris.$(OBJEXT)
parsesolaris_LDADD = $(LDADD)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
parsestreams_SOURCES = parsestreams.c
parsestreams_OBJECTS = parsestreams.$(OBJEXT)
parsestreams_LDADD = $(LDADD)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/sntp/libevent/build-aux/depcomp
am__depfiles_maybe = depfiles
@ -135,25 +199,49 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libparse_a_SOURCES) $(libparse_kernel_a_SOURCES) \
parsesolaris.c parsestreams.c
DIST_SOURCES = $(libparse_a_SOURCES) $(libparse_kernel_a_SOURCES) \
parsesolaris.c parsestreams.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depsver.mf \
$(top_srcdir)/includes.mf $(top_srcdir)/sntp/check-libntp.mf \
$(top_srcdir)/sntp/libevent/build-aux/depcomp README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -204,6 +292,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -320,6 +409,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -506,7 +596,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/sntp/check-libntp.mf
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libparse/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign libparse/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -515,6 +604,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_srcdir)/sntp/check-libntp.mf $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@ -527,11 +617,13 @@ $(am__aclocal_m4_deps):
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libparse.a: $(libparse_a_OBJECTS) $(libparse_a_DEPENDENCIES)
libparse.a: $(libparse_a_OBJECTS) $(libparse_a_DEPENDENCIES) $(EXTRA_libparse_a_DEPENDENCIES)
$(AM_V_at)-rm -f libparse.a
$(AM_V_AR)$(libparse_a_AR) libparse.a $(libparse_a_OBJECTS) $(libparse_a_LIBADD)
$(AM_V_at)$(RANLIB) libparse.a
libparse_kernel.a: $(libparse_kernel_a_OBJECTS) $(libparse_kernel_a_DEPENDENCIES)
libparse_kernel.a: $(libparse_kernel_a_OBJECTS) $(libparse_kernel_a_DEPENDENCIES) $(EXTRA_libparse_kernel_a_DEPENDENCIES)
$(AM_V_at)-rm -f libparse_kernel.a
$(AM_V_AR)$(libparse_kernel_a_AR) libparse_kernel.a $(libparse_kernel_a_OBJECTS) $(libparse_kernel_a_LIBADD)
$(AM_V_at)$(RANLIB) libparse_kernel.a
@ -544,10 +636,12 @@ clean-noinstPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
parsesolaris$(EXEEXT): $(parsesolaris_OBJECTS) $(parsesolaris_DEPENDENCIES)
parsesolaris$(EXEEXT): $(parsesolaris_OBJECTS) $(parsesolaris_DEPENDENCIES) $(EXTRA_parsesolaris_DEPENDENCIES)
@rm -f parsesolaris$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(parsesolaris_OBJECTS) $(parsesolaris_LDADD) $(LIBS)
parsestreams$(EXEEXT): $(parsestreams_OBJECTS) $(parsestreams_DEPENDENCIES)
parsestreams$(EXEEXT): $(parsestreams_OBJECTS) $(parsestreams_DEPENDENCIES) $(EXTRA_parsestreams_DEPENDENCIES)
@rm -f parsestreams$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(parsestreams_OBJECTS) $(parsestreams_LDADD) $(LIBS)
@ -584,26 +678,23 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
@ -611,26 +702,15 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -642,15 +722,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -659,6 +735,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -709,10 +800,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -799,19 +895,21 @@ uninstall-am:
.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLIBRARIES clean-noinstPROGRAMS \
cscopelist-am ctags ctags-am distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am
tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
vphack:

View File

@ -5,7 +5,7 @@
*
* Meinberg clock support
*
* Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1995-2015 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
*
* Redistribution and use in source and binary forms, with or without
@ -400,7 +400,7 @@ cvt_meinberg(
if (format->flags & MBG_EXTENDED)
{
clock_time->flags |= PARSEB_S_ANTENNA;
clock_time->flags |= PARSEB_S_CALLBIT;
/*
* DCF77 does not encode the direction -

View File

@ -5,7 +5,7 @@
*
* Raw DCF77 pulse clock support
*
* Copyright (c) 1995-2006 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1995-2015 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
*
* Redistribution and use in source and binary forms, with or without
@ -41,6 +41,7 @@
#if defined(REFCLOCK) && defined(CLOCK_PARSE) && defined(CLOCK_RAWDCF)
#include "ntp_fp.h"
#include "timevalops.h"
#include "ntp_unixtime.h"
#include "ntp_calendar.h"
@ -107,7 +108,9 @@ static parse_cvt_fnc_t cvt_rawdcf;
static parse_inp_fnc_t inp_rawdcf;
typedef struct last_tcode {
time_t tcode; /* last converted time code */
time_t tcode; /* last converted time code */
timestamp_t tminute; /* sample time for minute start */
timestamp_t timeout; /* last timeout timestamp */
} last_tcode_t;
#define BUFFER_MAX 61
@ -230,14 +233,14 @@ convert_rawdcf(
const unsigned char *c = dcfprm->zerobits;
int i;
parseprintf(DD_RAWDCF,("parse: convert_rawdcf: \"%s\"\n", buffer));
parseprintf(DD_RAWDCF,("parse: convert_rawdcf: \"%.*s\"\n", size, buffer));
if (size < 57)
{
#ifndef PARSEKERNEL
msyslog(LOG_ERR, "parse: convert_rawdcf: INCOMPLETE DATA - time code only has %d bits", size);
#endif
return CVT_NONE;
return CVT_FAIL|CVT_BADFMT;
}
for (i = 0; i < size; i++)
@ -250,7 +253,7 @@ convert_rawdcf(
#ifndef PARSEKERNEL
msyslog(LOG_ERR, "parse: convert_rawdcf: BAD DATA - no conversion");
#endif
return CVT_NONE;
return CVT_FAIL|CVT_BADFMT;
}
if (*b) b++;
if (*c) c++;
@ -270,7 +273,7 @@ convert_rawdcf(
*/
parseprintf(DD_RAWDCF,("parse: convert_rawdcf: parity check passed\n"));
clock_time->flags = PARSEB_S_ANTENNA|PARSEB_S_LEAP;
clock_time->flags = PARSEB_S_CALLBIT|PARSEB_S_LEAP;
clock_time->utctime= 0;
clock_time->usecond= 0;
clock_time->second = 0;
@ -310,7 +313,7 @@ convert_rawdcf(
if (ext_bf(buffer, DCF_R, dcfprm->zerobits))
clock_time->flags |= PARSEB_CALLBIT;
parseprintf(DD_RAWDCF,("parse: convert_rawdcf: TIME CODE OK: %d:%d, %d.%d.%d, flags 0x%lx\n",
parseprintf(DD_RAWDCF,("parse: convert_rawdcf: TIME CODE OK: %02d:%02d, %02d.%02d.%02d, flags 0x%lx\n",
(int)clock_time->hour, (int)clock_time->minute, (int)clock_time->day, (int)clock_time->month,(int) clock_time->year,
(u_long)clock_time->flags));
return CVT_OK;
@ -321,7 +324,7 @@ convert_rawdcf(
* bad format - not for us
*/
#ifndef PARSEKERNEL
msyslog(LOG_ERR, "parse: convert_rawdcf: parity check FAILED for \"%s\"", buffer);
msyslog(LOG_ERR, "parse: convert_rawdcf: start bit / parity check FAILED for \"%.*s\"", size, buffer);
#endif
return CVT_FAIL|CVT_BADFMT;
}
@ -484,6 +487,8 @@ cvt_rawdcf(
if (*c) c++;
}
*s = '\0';
if (rtc == CVT_NONE)
{
rtc = convert_rawdcf(buffer, size, &dcfparameter, clock_time);
@ -494,13 +499,15 @@ cvt_rawdcf(
newtime = parse_to_unixtime(clock_time, &rtc);
if ((rtc == CVT_OK) && t)
{
if ((newtime - t->tcode) == 60) /* guard against multi bit errors */
if ((newtime - t->tcode) <= 600) /* require a successful telegram within last 10 minutes */
{
parseprintf(DD_RAWDCF,("parse: cvt_rawdcf: recent timestamp check OK\n"));
clock_time->utctime = newtime;
}
else
{
rtc = CVT_FAIL|CVT_BADTIME;
parseprintf(DD_RAWDCF,("parse: cvt_rawdcf: recent timestamp check FAIL - ignore timestamp\n"));
rtc = CVT_SKIP;
}
t->tcode = newtime;
}
@ -533,13 +540,63 @@ pps_rawdcf(
return CVT_NONE;
}
static long
calc_usecdiff(
timestamp_t *ref,
timestamp_t *base,
long offset
)
{
struct timeval delta;
long delta_usec = 0;
#ifdef PARSEKERNEL
delta.tv_sec = ref->tv.tv_sec - offset - base->tv.tv_sec;
delta.tv_usec = ref->tv.tv_usec - base->tv.tv_usec;
if (delta.tv_usec < 0)
{
delta.tv_sec -= 1;
delta.tv_usec += 1000000;
}
#else
l_fp delt;
delt = ref->fp;
delt.l_i -= offset;
L_SUB(&delt, &base->fp);
TSTOTV(&delt, &delta);
#endif
delta_usec = 1000000 * (int32_t)delta.tv_sec + delta.tv_usec;
return delta_usec;
}
static u_long
snt_rawdcf(
parse_t *parseio,
timestamp_t *ptime
)
{
if ((parseio->parse_dtime.parse_status & CVT_MASK) == CVT_OK)
/*
* only synthesize if all of following conditions are met:
* - CVT_OK parse_status (we have a time stamp base)
* - ABS(ptime - tminute - (parse_index - 1) sec) < 500ms (spaced by 1 sec +- 500ms)
* - minute marker is available (confirms minute raster as base)
*/
last_tcode_t *t = (last_tcode_t *)parseio->parse_pdata;
long delta_usec = -1;
if (t != NULL && t->tminute.tv.tv_sec != 0) {
delta_usec = calc_usecdiff(ptime, &t->tminute, parseio->parse_index - 1);
if (delta_usec < 0)
delta_usec = -delta_usec;
}
parseprintf(DD_RAWDCF,("parse: snt_rawdcf: synth for offset %d seconds - absolute usec error %ld\n",
parseio->parse_index - 1, delta_usec));
if (((parseio->parse_dtime.parse_status & CVT_MASK) == CVT_OK) &&
(delta_usec < 500000 && delta_usec >= 0)) /* only if minute marker is available */
{
parseio->parse_dtime.parse_stime = *ptime;
@ -576,10 +633,43 @@ inp_rawdcf(
if (parse_timedout(parseio, tstamp, &timeout))
{
parseprintf(DD_PARSE, ("inp_rawdcf: time out seen\n"));
last_tcode_t *t = (last_tcode_t *)parseio->parse_pdata;
long delta_usec;
parseprintf(DD_RAWDCF, ("inp_rawdcf: time out seen\n"));
/* finish collection */
(void) parse_end(parseio);
if (t != NULL)
{
/* remember minute start sample time if timeouts occur in minute raster */
if (t->timeout.tv.tv_sec != 0)
{
delta_usec = calc_usecdiff(tstamp, &t->timeout, 60);
if (delta_usec < 0)
delta_usec = -delta_usec;
}
else
{
delta_usec = -1;
}
if (delta_usec < 500000 && delta_usec >= 0)
{
parseprintf(DD_RAWDCF, ("inp_rawdcf: timeout time difference %ld usec - minute marker set\n", delta_usec));
/* collect minute markers only if spaced by 60 seconds */
t->tminute = *tstamp;
}
else
{
parseprintf(DD_RAWDCF, ("inp_rawdcf: timeout time difference %ld usec - minute marker cleared\n", delta_usec));
memset((char *)&t->tminute, 0, sizeof(t->tminute));
}
t->timeout = *tstamp;
}
(void) parse_addchar(parseio, ch);
/* pass up to higher layers */
return PARSE_INP_TIME;
}
else

View File

@ -6,7 +6,7 @@
* Schmid clock support
* based on information and testing from Adam W. Feigin et. al (Swisstime iis.ethz.ch)
*
* Copyright (c) 1995-2005 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1995-2015 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
*
* Redistribution and use in source and binary forms, with or without
@ -184,7 +184,7 @@ cvt_schmid(
}
}
clock_time->flags |= PARSEB_S_LEAP|PARSEB_S_ANTENNA;
clock_time->flags |= PARSEB_S_LEAP|PARSEB_S_CALLBIT;
return CVT_OK;
}

View File

@ -697,14 +697,14 @@ timepacket(
{
case CVT_FAIL:
parseio->parse_badformat++;
break;
return cvtrtc;
case CVT_NONE:
/*
* too bad - pretend bad format
*/
parseio->parse_badformat++;
break;
return CVT_NONE;
case CVT_OK:
break;

View File

@ -232,6 +232,7 @@ libntpd_a_SOURCES = \
ntp_timer.c \
ntp_util.c \
ppsapi_timepps.h \
rc_cmdlength.c \
refclock_acts.c \
refclock_arbiter.c \
refclock_arc.c \

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -23,6 +22,61 @@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -43,11 +97,6 @@ build_triplet = @build@
host_triplet = @host@
EXTRA_PROGRAMS = check_y2k$(EXEEXT) keyword-gen$(EXEEXT) ntpd$(EXEEXT) \
ntpdsim$(EXEEXT)
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/complete.conf.in \
$(top_srcdir)/bincheck.mf $(top_srcdir)/check-libopts.mf \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf ntp_parser.c ntp_parser.h
subdir = ntpd
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@ -79,6 +128,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -88,18 +138,18 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = complete.conf
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = @ARFLAGS@
AM_V_AR = $(am__v_AR_$(V))
am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
am__v_AR_0 = @echo " AR " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
AM_V_AR = $(am__v_AR_@AM_V@)
am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libntpd_a_AR = $(AR) $(ARFLAGS)
libntpd_a_LIBADD =
am__objects_1 =
@ -109,28 +159,28 @@ am_libntpd_a_OBJECTS = cmd_args.$(OBJEXT) ntp_control.$(OBJEXT) \
ntp_monitor.$(OBJEXT) ntp_peer.$(OBJEXT) ntp_proto.$(OBJEXT) \
ntp_refclock.$(OBJEXT) ntp_request.$(OBJEXT) \
ntp_restrict.$(OBJEXT) ntp_signd.$(OBJEXT) ntp_timer.$(OBJEXT) \
ntp_util.$(OBJEXT) refclock_acts.$(OBJEXT) \
refclock_arbiter.$(OBJEXT) refclock_arc.$(OBJEXT) \
refclock_as2201.$(OBJEXT) refclock_atom.$(OBJEXT) \
refclock_bancomm.$(OBJEXT) refclock_chronolog.$(OBJEXT) \
refclock_chu.$(OBJEXT) refclock_conf.$(OBJEXT) \
refclock_datum.$(OBJEXT) refclock_dumbclock.$(OBJEXT) \
refclock_fg.$(OBJEXT) refclock_gpsdjson.$(OBJEXT) \
refclock_gpsvme.$(OBJEXT) refclock_heath.$(OBJEXT) \
refclock_hopfser.$(OBJEXT) refclock_hopfpci.$(OBJEXT) \
refclock_hpgps.$(OBJEXT) refclock_irig.$(OBJEXT) \
refclock_jjy.$(OBJEXT) refclock_jupiter.$(OBJEXT) \
refclock_leitch.$(OBJEXT) refclock_local.$(OBJEXT) \
refclock_mx4200.$(OBJEXT) refclock_neoclock4x.$(OBJEXT) \
refclock_nmea.$(OBJEXT) refclock_oncore.$(OBJEXT) \
refclock_palisade.$(OBJEXT) refclock_parse.$(OBJEXT) \
refclock_pcf.$(OBJEXT) refclock_pst.$(OBJEXT) \
refclock_ripencc.$(OBJEXT) refclock_shm.$(OBJEXT) \
refclock_tpro.$(OBJEXT) refclock_true.$(OBJEXT) \
refclock_tt560.$(OBJEXT) refclock_ulink.$(OBJEXT) \
refclock_wwv.$(OBJEXT) refclock_wwvb.$(OBJEXT) \
refclock_zyfer.$(OBJEXT) refclock_tsyncpci.$(OBJEXT) \
$(am__objects_1)
ntp_util.$(OBJEXT) rc_cmdlength.$(OBJEXT) \
refclock_acts.$(OBJEXT) refclock_arbiter.$(OBJEXT) \
refclock_arc.$(OBJEXT) refclock_as2201.$(OBJEXT) \
refclock_atom.$(OBJEXT) refclock_bancomm.$(OBJEXT) \
refclock_chronolog.$(OBJEXT) refclock_chu.$(OBJEXT) \
refclock_conf.$(OBJEXT) refclock_datum.$(OBJEXT) \
refclock_dumbclock.$(OBJEXT) refclock_fg.$(OBJEXT) \
refclock_gpsdjson.$(OBJEXT) refclock_gpsvme.$(OBJEXT) \
refclock_heath.$(OBJEXT) refclock_hopfser.$(OBJEXT) \
refclock_hopfpci.$(OBJEXT) refclock_hpgps.$(OBJEXT) \
refclock_irig.$(OBJEXT) refclock_jjy.$(OBJEXT) \
refclock_jupiter.$(OBJEXT) refclock_leitch.$(OBJEXT) \
refclock_local.$(OBJEXT) refclock_mx4200.$(OBJEXT) \
refclock_neoclock4x.$(OBJEXT) refclock_nmea.$(OBJEXT) \
refclock_oncore.$(OBJEXT) refclock_palisade.$(OBJEXT) \
refclock_parse.$(OBJEXT) refclock_pcf.$(OBJEXT) \
refclock_pst.$(OBJEXT) refclock_ripencc.$(OBJEXT) \
refclock_shm.$(OBJEXT) refclock_tpro.$(OBJEXT) \
refclock_true.$(OBJEXT) refclock_tt560.$(OBJEXT) \
refclock_ulink.$(OBJEXT) refclock_wwv.$(OBJEXT) \
refclock_wwvb.$(OBJEXT) refclock_zyfer.$(OBJEXT) \
refclock_tsyncpci.$(OBJEXT) $(am__objects_1)
libntpd_a_OBJECTS = $(am_libntpd_a_OBJECTS)
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" \
"$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" \
@ -144,9 +194,10 @@ am__DEPENDENCIES_2 = version.o libntpd.a $(am__DEPENDENCIES_1)
check_y2k_DEPENDENCIES = $(am__DEPENDENCIES_2) ../libntp/libntp.a \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
keyword_gen_SOURCES = keyword-gen.c
keyword_gen_OBJECTS = keyword-gen.$(OBJEXT)
keyword_gen_DEPENDENCIES = ../libntp/libntp.a $(am__DEPENDENCIES_1) \
@ -169,6 +220,18 @@ am_ntpdsim_OBJECTS = $(am__objects_2) ntpdsim-ntp_prio_q.$(OBJEXT) \
ntpdsim_OBJECTS = $(am_ntpdsim_OBJECTS)
ntpdsim_DEPENDENCIES = $(am__DEPENDENCIES_2) ../libntp/libntpsim.a \
$(am__DEPENDENCIES_3)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/sntp/libevent/build-aux/depcomp
am__depfiles_maybe = depfiles
@ -179,30 +242,37 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
-e s/c++$$/h++/ -e s/c$$/h/
YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
AM_V_YACC = $(am__v_YACC_$(V))
am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY))
am__v_YACC_0 = @echo " YACC " $@;
$(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS)
AM_V_YACC = $(am__v_YACC_@AM_V@)
am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
am__v_YACC_0 = @echo " YACC " $@;
am__v_YACC_1 =
YLWRAP = $(top_srcdir)/sntp/libevent/build-aux/ylwrap
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
SOURCES = $(libntpd_a_SOURCES) check_y2k.c keyword-gen.c \
$(ntpd_SOURCES) $(ntpdsim_SOURCES)
DIST_SOURCES = $(libntpd_a_SOURCES) check_y2k.c keyword-gen.c \
$(ntpd_SOURCES) $(ntpdsim_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@ -224,6 +294,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
man1dir = $(mandir)/man1
man5dir = $(mandir)/man5
man8dir = $(mandir)/man8
@ -231,8 +307,32 @@ NROFF = nroff
MANS = $(man1_MANS) $(man5_MANS) $(man8_MANS) $(man_MANS)
DATA = $(html_DATA) $(noinst_DATA)
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/complete.conf.in \
$(top_srcdir)/bincheck.mf $(top_srcdir)/check-libopts.mf \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf \
$(top_srcdir)/sntp/libevent/build-aux/depcomp \
$(top_srcdir)/sntp/libevent/build-aux/ylwrap ntp_parser.c \
ntp_parser.h
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -283,6 +383,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -399,6 +500,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -675,6 +777,7 @@ libntpd_a_SOURCES = \
ntp_timer.c \
ntp_util.c \
ppsapi_timepps.h \
rc_cmdlength.c \
refclock_acts.c \
refclock_arbiter.c \
refclock_arc.c \
@ -739,7 +842,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/bincheck.mf $(top_sr
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpd/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign ntpd/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -748,6 +850,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_srcdir)/bincheck.mf $(top_srcdir)/check-libopts.mf $(top_srcdir)/sntp/check-libntp.mf $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@ -762,20 +865,26 @@ complete.conf: $(top_builddir)/config.status $(srcdir)/complete.conf.in
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libntpd.a: $(libntpd_a_OBJECTS) $(libntpd_a_DEPENDENCIES)
libntpd.a: $(libntpd_a_OBJECTS) $(libntpd_a_DEPENDENCIES) $(EXTRA_libntpd_a_DEPENDENCIES)
$(AM_V_at)-rm -f libntpd.a
$(AM_V_AR)$(libntpd_a_AR) libntpd.a $(libntpd_a_OBJECTS) $(libntpd_a_LIBADD)
$(AM_V_at)$(RANLIB) libntpd.a
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -796,7 +905,8 @@ uninstall-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
@ -820,14 +930,19 @@ clean-checkPROGRAMS:
rm -f $$list
install-libexecPROGRAMS: $(libexec_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -848,7 +963,8 @@ uninstall-libexecPROGRAMS:
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
@ -863,14 +979,19 @@ clean-libexecPROGRAMS:
rm -f $$list
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -891,7 +1012,8 @@ uninstall-sbinPROGRAMS:
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(sbindir)" && rm -f $$files
@ -904,21 +1026,23 @@ clean-sbinPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
check_y2k$(EXEEXT): $(check_y2k_OBJECTS) $(check_y2k_DEPENDENCIES)
check_y2k$(EXEEXT): $(check_y2k_OBJECTS) $(check_y2k_DEPENDENCIES) $(EXTRA_check_y2k_DEPENDENCIES)
@rm -f check_y2k$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(check_y2k_OBJECTS) $(check_y2k_LDADD) $(LIBS)
keyword-gen$(EXEEXT): $(keyword_gen_OBJECTS) $(keyword_gen_DEPENDENCIES)
keyword-gen$(EXEEXT): $(keyword_gen_OBJECTS) $(keyword_gen_DEPENDENCIES) $(EXTRA_keyword_gen_DEPENDENCIES)
@rm -f keyword-gen$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(keyword_gen_OBJECTS) $(keyword_gen_LDADD) $(LIBS)
ntp_parser.h: ntp_parser.c
@if test ! -f $@; then \
rm -f ntp_parser.c; \
$(MAKE) $(AM_MAKEFLAGS) ntp_parser.c; \
else :; fi
ntpd$(EXEEXT): $(ntpd_OBJECTS) $(ntpd_DEPENDENCIES)
@if test ! -f $@; then rm -f ntp_parser.c; else :; fi
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) ntp_parser.c; else :; fi
ntpd$(EXEEXT): $(ntpd_OBJECTS) $(ntpd_DEPENDENCIES) $(EXTRA_ntpd_DEPENDENCIES)
@rm -f ntpd$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ntpd_OBJECTS) $(ntpd_LDADD) $(LIBS)
ntpdsim$(EXEEXT): $(ntpdsim_OBJECTS) $(ntpdsim_DEPENDENCIES)
ntpdsim$(EXEEXT): $(ntpdsim_OBJECTS) $(ntpdsim_DEPENDENCIES) $(EXTRA_ntpdsim_DEPENDENCIES)
@rm -f ntpdsim$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ntpdsim_OBJECTS) $(ntpdsim_LDADD) $(LIBS)
@ -959,6 +1083,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntpdsim-ntpd-opts.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntpdsim-ntpd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntpdsim-ntpsim.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rc_cmdlength.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refclock_acts.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refclock_arbiter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refclock_arc.Po@am__quote@
@ -1004,157 +1129,138 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
ntpdsim-ntp_config.o: ntp_config.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_config.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_config.Tpo -c -o ntpdsim-ntp_config.o `test -f 'ntp_config.c' || echo '$(srcdir)/'`ntp_config.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_config.Tpo $(DEPDIR)/ntpdsim-ntp_config.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_config.c' object='ntpdsim-ntp_config.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_config.c' object='ntpdsim-ntp_config.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_config.o `test -f 'ntp_config.c' || echo '$(srcdir)/'`ntp_config.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_config.o `test -f 'ntp_config.c' || echo '$(srcdir)/'`ntp_config.c
ntpdsim-ntp_config.obj: ntp_config.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_config.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_config.Tpo -c -o ntpdsim-ntp_config.obj `if test -f 'ntp_config.c'; then $(CYGPATH_W) 'ntp_config.c'; else $(CYGPATH_W) '$(srcdir)/ntp_config.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_config.Tpo $(DEPDIR)/ntpdsim-ntp_config.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_config.c' object='ntpdsim-ntp_config.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_config.c' object='ntpdsim-ntp_config.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_config.obj `if test -f 'ntp_config.c'; then $(CYGPATH_W) 'ntp_config.c'; else $(CYGPATH_W) '$(srcdir)/ntp_config.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_config.obj `if test -f 'ntp_config.c'; then $(CYGPATH_W) 'ntp_config.c'; else $(CYGPATH_W) '$(srcdir)/ntp_config.c'; fi`
ntpdsim-ntp_io.o: ntp_io.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_io.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_io.Tpo -c -o ntpdsim-ntp_io.o `test -f 'ntp_io.c' || echo '$(srcdir)/'`ntp_io.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_io.Tpo $(DEPDIR)/ntpdsim-ntp_io.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_io.c' object='ntpdsim-ntp_io.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_io.c' object='ntpdsim-ntp_io.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_io.o `test -f 'ntp_io.c' || echo '$(srcdir)/'`ntp_io.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_io.o `test -f 'ntp_io.c' || echo '$(srcdir)/'`ntp_io.c
ntpdsim-ntp_io.obj: ntp_io.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_io.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_io.Tpo -c -o ntpdsim-ntp_io.obj `if test -f 'ntp_io.c'; then $(CYGPATH_W) 'ntp_io.c'; else $(CYGPATH_W) '$(srcdir)/ntp_io.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_io.Tpo $(DEPDIR)/ntpdsim-ntp_io.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_io.c' object='ntpdsim-ntp_io.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_io.c' object='ntpdsim-ntp_io.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_io.obj `if test -f 'ntp_io.c'; then $(CYGPATH_W) 'ntp_io.c'; else $(CYGPATH_W) '$(srcdir)/ntp_io.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_io.obj `if test -f 'ntp_io.c'; then $(CYGPATH_W) 'ntp_io.c'; else $(CYGPATH_W) '$(srcdir)/ntp_io.c'; fi`
ntpdsim-ntp_parser.o: ntp_parser.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_parser.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_parser.Tpo -c -o ntpdsim-ntp_parser.o `test -f 'ntp_parser.c' || echo '$(srcdir)/'`ntp_parser.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_parser.Tpo $(DEPDIR)/ntpdsim-ntp_parser.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_parser.c' object='ntpdsim-ntp_parser.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_parser.c' object='ntpdsim-ntp_parser.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_parser.o `test -f 'ntp_parser.c' || echo '$(srcdir)/'`ntp_parser.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_parser.o `test -f 'ntp_parser.c' || echo '$(srcdir)/'`ntp_parser.c
ntpdsim-ntp_parser.obj: ntp_parser.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_parser.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_parser.Tpo -c -o ntpdsim-ntp_parser.obj `if test -f 'ntp_parser.c'; then $(CYGPATH_W) 'ntp_parser.c'; else $(CYGPATH_W) '$(srcdir)/ntp_parser.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_parser.Tpo $(DEPDIR)/ntpdsim-ntp_parser.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_parser.c' object='ntpdsim-ntp_parser.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_parser.c' object='ntpdsim-ntp_parser.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_parser.obj `if test -f 'ntp_parser.c'; then $(CYGPATH_W) 'ntp_parser.c'; else $(CYGPATH_W) '$(srcdir)/ntp_parser.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_parser.obj `if test -f 'ntp_parser.c'; then $(CYGPATH_W) 'ntp_parser.c'; else $(CYGPATH_W) '$(srcdir)/ntp_parser.c'; fi`
ntpdsim-ntp_scanner.o: ntp_scanner.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_scanner.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_scanner.Tpo -c -o ntpdsim-ntp_scanner.o `test -f 'ntp_scanner.c' || echo '$(srcdir)/'`ntp_scanner.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_scanner.Tpo $(DEPDIR)/ntpdsim-ntp_scanner.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_scanner.c' object='ntpdsim-ntp_scanner.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_scanner.c' object='ntpdsim-ntp_scanner.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_scanner.o `test -f 'ntp_scanner.c' || echo '$(srcdir)/'`ntp_scanner.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_scanner.o `test -f 'ntp_scanner.c' || echo '$(srcdir)/'`ntp_scanner.c
ntpdsim-ntp_scanner.obj: ntp_scanner.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_scanner.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_scanner.Tpo -c -o ntpdsim-ntp_scanner.obj `if test -f 'ntp_scanner.c'; then $(CYGPATH_W) 'ntp_scanner.c'; else $(CYGPATH_W) '$(srcdir)/ntp_scanner.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_scanner.Tpo $(DEPDIR)/ntpdsim-ntp_scanner.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_scanner.c' object='ntpdsim-ntp_scanner.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_scanner.c' object='ntpdsim-ntp_scanner.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_scanner.obj `if test -f 'ntp_scanner.c'; then $(CYGPATH_W) 'ntp_scanner.c'; else $(CYGPATH_W) '$(srcdir)/ntp_scanner.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_scanner.obj `if test -f 'ntp_scanner.c'; then $(CYGPATH_W) 'ntp_scanner.c'; else $(CYGPATH_W) '$(srcdir)/ntp_scanner.c'; fi`
ntpdsim-ntpd.o: ntpd.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd.Tpo -c -o ntpdsim-ntpd.o `test -f 'ntpd.c' || echo '$(srcdir)/'`ntpd.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntpd.Tpo $(DEPDIR)/ntpdsim-ntpd.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd.c' object='ntpdsim-ntpd.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntpd.c' object='ntpdsim-ntpd.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd.o `test -f 'ntpd.c' || echo '$(srcdir)/'`ntpd.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd.o `test -f 'ntpd.c' || echo '$(srcdir)/'`ntpd.c
ntpdsim-ntpd.obj: ntpd.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd.Tpo -c -o ntpdsim-ntpd.obj `if test -f 'ntpd.c'; then $(CYGPATH_W) 'ntpd.c'; else $(CYGPATH_W) '$(srcdir)/ntpd.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntpd.Tpo $(DEPDIR)/ntpdsim-ntpd.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd.c' object='ntpdsim-ntpd.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntpd.c' object='ntpdsim-ntpd.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd.obj `if test -f 'ntpd.c'; then $(CYGPATH_W) 'ntpd.c'; else $(CYGPATH_W) '$(srcdir)/ntpd.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd.obj `if test -f 'ntpd.c'; then $(CYGPATH_W) 'ntpd.c'; else $(CYGPATH_W) '$(srcdir)/ntpd.c'; fi`
ntpdsim-ntpd-opts.o: ntpd-opts.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd-opts.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd-opts.Tpo -c -o ntpdsim-ntpd-opts.o `test -f 'ntpd-opts.c' || echo '$(srcdir)/'`ntpd-opts.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntpd-opts.Tpo $(DEPDIR)/ntpdsim-ntpd-opts.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd-opts.c' object='ntpdsim-ntpd-opts.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntpd-opts.c' object='ntpdsim-ntpd-opts.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd-opts.o `test -f 'ntpd-opts.c' || echo '$(srcdir)/'`ntpd-opts.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd-opts.o `test -f 'ntpd-opts.c' || echo '$(srcdir)/'`ntpd-opts.c
ntpdsim-ntpd-opts.obj: ntpd-opts.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd-opts.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd-opts.Tpo -c -o ntpdsim-ntpd-opts.obj `if test -f 'ntpd-opts.c'; then $(CYGPATH_W) 'ntpd-opts.c'; else $(CYGPATH_W) '$(srcdir)/ntpd-opts.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntpd-opts.Tpo $(DEPDIR)/ntpdsim-ntpd-opts.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd-opts.c' object='ntpdsim-ntpd-opts.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntpd-opts.c' object='ntpdsim-ntpd-opts.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd-opts.obj `if test -f 'ntpd-opts.c'; then $(CYGPATH_W) 'ntpd-opts.c'; else $(CYGPATH_W) '$(srcdir)/ntpd-opts.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd-opts.obj `if test -f 'ntpd-opts.c'; then $(CYGPATH_W) 'ntpd-opts.c'; else $(CYGPATH_W) '$(srcdir)/ntpd-opts.c'; fi`
ntpdsim-ntp_prio_q.o: ntp_prio_q.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_prio_q.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_prio_q.Tpo -c -o ntpdsim-ntp_prio_q.o `test -f 'ntp_prio_q.c' || echo '$(srcdir)/'`ntp_prio_q.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_prio_q.Tpo $(DEPDIR)/ntpdsim-ntp_prio_q.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_prio_q.c' object='ntpdsim-ntp_prio_q.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_prio_q.c' object='ntpdsim-ntp_prio_q.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_prio_q.o `test -f 'ntp_prio_q.c' || echo '$(srcdir)/'`ntp_prio_q.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_prio_q.o `test -f 'ntp_prio_q.c' || echo '$(srcdir)/'`ntp_prio_q.c
ntpdsim-ntp_prio_q.obj: ntp_prio_q.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_prio_q.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_prio_q.Tpo -c -o ntpdsim-ntp_prio_q.obj `if test -f 'ntp_prio_q.c'; then $(CYGPATH_W) 'ntp_prio_q.c'; else $(CYGPATH_W) '$(srcdir)/ntp_prio_q.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntp_prio_q.Tpo $(DEPDIR)/ntpdsim-ntp_prio_q.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_prio_q.c' object='ntpdsim-ntp_prio_q.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_prio_q.c' object='ntpdsim-ntp_prio_q.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_prio_q.obj `if test -f 'ntp_prio_q.c'; then $(CYGPATH_W) 'ntp_prio_q.c'; else $(CYGPATH_W) '$(srcdir)/ntp_prio_q.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_prio_q.obj `if test -f 'ntp_prio_q.c'; then $(CYGPATH_W) 'ntp_prio_q.c'; else $(CYGPATH_W) '$(srcdir)/ntp_prio_q.c'; fi`
ntpdsim-ntpsim.o: ntpsim.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpsim.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntpsim.Tpo -c -o ntpdsim-ntpsim.o `test -f 'ntpsim.c' || echo '$(srcdir)/'`ntpsim.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntpsim.Tpo $(DEPDIR)/ntpdsim-ntpsim.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpsim.c' object='ntpdsim-ntpsim.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntpsim.c' object='ntpdsim-ntpsim.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpsim.o `test -f 'ntpsim.c' || echo '$(srcdir)/'`ntpsim.c
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpsim.o `test -f 'ntpsim.c' || echo '$(srcdir)/'`ntpsim.c
ntpdsim-ntpsim.obj: ntpsim.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpsim.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntpsim.Tpo -c -o ntpdsim-ntpsim.obj `if test -f 'ntpsim.c'; then $(CYGPATH_W) 'ntpsim.c'; else $(CYGPATH_W) '$(srcdir)/ntpsim.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntpdsim-ntpsim.Tpo $(DEPDIR)/ntpdsim-ntpsim.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpsim.c' object='ntpdsim-ntpsim.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntpsim.c' object='ntpdsim-ntpsim.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpsim.obj `if test -f 'ntpsim.c'; then $(CYGPATH_W) 'ntpsim.c'; else $(CYGPATH_W) '$(srcdir)/ntpsim.c'; fi`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntpdsim_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpsim.obj `if test -f 'ntpsim.c'; then $(CYGPATH_W) 'ntpsim.c'; else $(CYGPATH_W) '$(srcdir)/ntpsim.c'; fi`
.y.c:
$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
mostlyclean-libtool:
-rm -f *.lo
@ -1163,11 +1269,18 @@ clean-libtool:
-rm -rf .libs _libs
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.1[a-z]*$$/p'; \
@list1='$(man1_MANS)'; \
list2='$(man_MANS)'; \
test -n "$(man1dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.1[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
@ -1196,16 +1309,21 @@ uninstall-man1:
sed -n '/\.1[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
test -z "$$files" || { \
echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
install-man5: $(man5_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
@list='$(man5_MANS)'; test -n "$(man5dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.5[a-z]*$$/p'; \
@list1='$(man5_MANS)'; \
list2='$(man_MANS)'; \
test -n "$(man5dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.5[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
@ -1234,16 +1352,21 @@ uninstall-man5:
sed -n '/\.5[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
test -z "$$files" || { \
echo " ( cd '$(DESTDIR)$(man5dir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man5dir)" && rm -f $$files; }
dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
install-man8: $(man8_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
@list='$(man8_MANS)'; test -n "$(man8dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.8[a-z]*$$/p'; \
@list1='$(man8_MANS)'; \
list2='$(man_MANS)'; \
test -n "$(man8dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.8[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
@ -1272,13 +1395,14 @@ uninstall-man8:
sed -n '/\.8[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
test -z "$$files" || { \
echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man8dir)" && rm -f $$files; }
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
install-htmlDATA: $(html_DATA)
@$(NORMAL_INSTALL)
test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
@list='$(html_DATA)'; test -n "$(htmldir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
$(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@ -1292,30 +1416,17 @@ uninstall-htmlDATA:
@$(NORMAL_UNINSTALL)
@list='$(html_DATA)'; test -n "$(htmldir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(htmldir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(htmldir)" && rm -f $$files
dir='$(DESTDIR)$(htmldir)'; $(am__uninstall_files_from_dir)
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -1327,15 +1438,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -1344,24 +1451,26 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
if test -n "$$list" && \
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
echo " typically \`make maintainer-clean' will remove them" >&2; \
exit 1; \
else :; fi; \
else :; fi
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@ -1412,10 +1521,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -1512,27 +1626,29 @@ uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
.MAKE: all check check-am install install-am install-exec-am \
install-strip
.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \
clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
clean-libexecPROGRAMS clean-libtool clean-noinstLIBRARIES \
clean-sbinPROGRAMS ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am \
install-data-local install-dvi install-dvi-am install-exec \
install-exec-am install-exec-hook install-html install-html-am \
install-htmlDATA install-info install-info-am \
clean-sbinPROGRAMS cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-data \
install-data-am install-data-local install-dvi install-dvi-am \
install-exec install-exec-am install-exec-hook install-html \
install-html-am install-htmlDATA install-info install-info-am \
install-libexecPROGRAMS install-man install-man1 install-man5 \
install-man8 install-pdf install-pdf-am install-ps \
install-ps-am install-sbinPROGRAMS install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-htmlDATA uninstall-libexecPROGRAMS uninstall-man \
uninstall-man1 uninstall-man5 uninstall-man8 \
uninstall-sbinPROGRAMS
.PRECIOUS: Makefile
vphack:
test -e ntp_parser.c || ln -s $(srcdir)/ntp_parser.c .

View File

@ -2,8 +2,10 @@ saveconfigdir "/etc/ntp/conf"
driftfile "/etc/ntp.drift" 1e-7
logfile "/var/log/ntp.log"
leapfile "/etc/ntp.leapseconds"
@HAVE_LEAPSMEARINTERVAL@
nonvolatile 1e-7
ident "udent"
dscp 46
logconfig =allall -allinfo -allevents -allstatistics -allstatus +allall -clockinfo -clockevents -clockstatistics -clockstatus +clockall -syncinfo -syncevents -syncstatistics -syncstatus +syncall -sysinfo -sysevents -sysstatistics -sysstatus +sysall
statsdir "/etc/ntp/stats"
statistics clockstats cryptostats loopstats peerstats protostats rawstats sysstats timingstats

View File

@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.conf.texi)
#
# It has been AutoGen-ed April 7, 2015 at 04:25:50 AM by AutoGen 5.18.5pre4
# It has been AutoGen-ed June 29, 2015 at 04:30:28 PM by AutoGen 5.18.5
# From the definitions ntp.conf.def
# and the template file agtexi-file.tpl
@end ignore
@ -2291,6 +2291,9 @@ This implies that
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
@item @code{dscp} @kbd{value}
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
@item @code{enable} @code{[@code{auth} | @code{bclient} | @code{calibrate} | @code{kernel} | @code{mode7} | @code{monitor} | @code{ntp} | @code{stats}]}
@item @code{disable} @code{[@code{auth} | @code{bclient} | @code{calibrate} | @code{kernel} | @code{mode7} | @code{monitor} | @code{ntp} | @code{stats}]}
Provides a way to enable or disable various server options.
@ -2376,6 +2379,19 @@ This option is useful for sites that run
@code{ntpd(1ntpdmdoc)}
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
@item @code{leapsmearinterval} @kbd{seconds}
This EXPERIMENTAL option is only available if
@code{ntpd(1ntpdmdoc)}
was built with the
@code{--enable-leap-smear}
option to the
@code{configure}
script.
It specifies the interval over which a leap second correction will be applied.
Recommended values for this option are between
7200 (2 hours) and 86400 (24 hours).
.Sy DO NOT USE THIS OPTION ON PUBLIC-ACCESS SERVERS!
See http://bugs.ntp.org/2855 for more information.
@item @code{logconfig} @kbd{configkeyword}
This command controls the amount and type of output written to
the system
@ -2570,11 +2586,11 @@ option).
The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
@item @code{stacksize} @kbd{N4kPages}
Specifies the maximum size of the process stack on systems with the
@item @code{filenum} @kbd{Nfiledescriptors}
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
@code{mlockall()}
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
@item @code{filenum} @kbd{Nfiledescriptors}
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
@end table
@item @code{trap} @kbd{host_address} @code{[@code{port} @kbd{port_number}]} @code{[@code{interface} @kbd{interface_address}]}
This command configures a trap receiver at the given host

View File

@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.keys.texi)
#
# It has been AutoGen-ed April 7, 2015 at 04:25:52 AM by AutoGen 5.18.5pre4
# It has been AutoGen-ed June 29, 2015 at 04:30:31 PM by AutoGen 5.18.5
# From the definitions ntp.keys.def
# and the template file agtexi-file.tpl
@end ignore

View File

@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpd.texi)
#
# It has been AutoGen-ed April 7, 2015 at 04:25:54 AM by AutoGen 5.18.5pre4
# It has been AutoGen-ed June 29, 2015 at 04:30:33 PM by AutoGen 5.18.5
# From the definitions ntpd-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@ -142,7 +142,7 @@ with a status code of 0.
@exampleindent 0
@example
ntpd - NTP daemon program - Ver. 4.2.8p2
ntpd - NTP daemon program - Ver. 4.2.8p3
Usage: ntpd [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... \
[ <server1> ... <serverN> ]
Flg Arg Option-Name Description

View File

@ -1 +1 @@
* Generated 2015-03-16 09:05:44 UTC diff_ignore_line
* Generated 2015-06-25 03:57:00 UTC diff_ignore_line

View File

@ -46,6 +46,7 @@ struct key_tok ntp_keywords[] = {
{ "ctl", T_Ctl, FOLLBY_TOKEN },
{ "disable", T_Disable, FOLLBY_TOKEN },
{ "driftfile", T_Driftfile, FOLLBY_STRING },
{ "dscp", T_Dscp, FOLLBY_TOKEN },
{ "enable", T_Enable, FOLLBY_TOKEN },
{ "end", T_End, FOLLBY_TOKEN },
{ "filegen", T_Filegen, FOLLBY_TOKEN },
@ -53,6 +54,7 @@ struct key_tok ntp_keywords[] = {
{ "io", T_Io, FOLLBY_TOKEN },
{ "includefile", T_Includefile, FOLLBY_STRING },
{ "leapfile", T_Leapfile, FOLLBY_STRING },
{ "leapsmearinterval", T_Leapsmearinterval, FOLLBY_TOKEN },
{ "logconfig", T_Logconfig, FOLLBY_STRINGS_TO_EOC },
{ "logfile", T_Logfile, FOLLBY_STRING },
{ "manycastclient", T_Manycastclient, FOLLBY_STRING },
@ -333,12 +335,11 @@ generate_fsm(void)
char *r;
u_short initial_state;
u_short this_state;
u_short prev_state;
u_short state;
u_short i;
u_short token;
/*
/*
* Sort ntp_keywords in alphabetical keyword order. This is
* not necessary, but minimizes nonfunctional changes in the
* generated finite state machine when keywords are modified.
@ -347,7 +348,7 @@ generate_fsm(void)
sizeof(ntp_keywords[0]), compare_key_tok_text);
/*
* To save space, reserve the state array entry matching each
* To save space, reserve the state array entry matching each
* token number for its terminal state, so the token identifier
* does not need to be stored in each state, but can be
* recovered trivially. To mark the entry reserved,
@ -414,7 +415,7 @@ generate_fsm(void)
}
if (sst[i].finishes_token) {
snprintf(token_id_comment,
snprintf(token_id_comment,
sizeof(token_id_comment), "%5d %-17s",
i, symbname(sst[i].finishes_token));
if (i != sst[i].finishes_token) {
@ -442,7 +443,6 @@ generate_fsm(void)
* spellings result in the same T_* value.
*/
prefix_len = 0;
prev_state = 0;
this_state = i;
do {
for (state = 1; state < sst_highwater; state++)
@ -468,8 +468,8 @@ generate_fsm(void)
snprintf(token_id_comment,
sizeof(token_id_comment), "%5d %-17s",
i, (initial_state == i)
? "[initial state]"
i, (initial_state == i)
? "[initial state]"
: prefix);
}
@ -497,8 +497,8 @@ generate_fsm(void)
*/
static u_short
create_scan_states(
char * text,
u_short token,
char * text,
u_short token,
follby followedby,
u_short prev_state
)
@ -512,7 +512,7 @@ create_scan_states(
curr_char_s = prev_state;
prev_char_s = 0;
/* Find the correct position to insert the state.
/* Find the correct position to insert the state.
* All states should be in alphabetical order
*/
while (curr_char_s && (text[0] < sst[curr_char_s].ch)) {
@ -520,7 +520,7 @@ create_scan_states(
curr_char_s = sst[curr_char_s].other_next_s;
}
/*
/*
* Check if a previously seen keyword has the same prefix as
* the current keyword. If so, simply use the state for that
* keyword as my_state, otherwise, allocate a new state.
@ -548,7 +548,7 @@ create_scan_states(
exit(3);
}
/* Store the next character of the keyword */
sst[my_state].ch = text[0];
sst[my_state].ch = text[0];
sst[my_state].other_next_s = curr_char_s;
sst[my_state].followedby = FOLLBY_NON_ACCEPTING;
@ -587,7 +587,7 @@ create_scan_states(
return_state = my_state;
}
} else
sst[my_state].match_next_s =
sst[my_state].match_next_s =
create_scan_states(
&text[1],
token,
@ -615,8 +615,8 @@ create_keyword_scanner(void)
current_keyword = ntp_keywords[i].key;
scanner =
create_scan_states(
ntp_keywords[i].key,
ntp_keywords[i].token,
ntp_keywords[i].key,
ntp_keywords[i].token,
ntp_keywords[i].followedby,
scanner);
}
@ -657,7 +657,7 @@ generate_token_text(void)
if (i > 0)
printf(",");
printf("\n\t/* %-5d %5d %20s */\t\"%s\"",
id - lowest_id, id, symbname(id),
id - lowest_id, id, symbname(id),
ntp_keywords[i].key);
i++;
id++;
@ -666,7 +666,7 @@ generate_token_text(void)
printf("\n};\n\n");
}
int
compare_key_tok_id(
const void *a1,
@ -749,7 +749,7 @@ symbname(
} else {
LIB_GETBUF(name);
snprintf(name, LIB_BUFLENGTH, "%d", token);
}
}
return name;
}

View File

@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
.TH ntp.conf 5man "07 Apr 2015" "4.2.8p2" "File Formats"
.TH ntp.conf 5man "29 Jun 2015" "4.2.8p3" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-gKaW.1/ag-tKaO91)
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-R0aO7B/ag-30aG6B)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:37 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:16 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@ -35,7 +35,7 @@ All arguments must be options.
The
\f\*[B-Font]ntp.conf\fP
configuration file is read at initial startup by the
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
daemon in order to specify the synchronization sources,
modes and other related information.
Usually, it is installed in the
@ -307,7 +307,7 @@ This is designed to speed the initial synchronization
acquisition with the
\f\*[B-Font]server\f[]
command and s addresses and when
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
is started with the
\f\*[B-Font]\-q\f[]
option.
@ -528,7 +528,7 @@ and
\f\*[B-Font]disable\f[]
commands and also by remote
configuration commands sent by a
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
program running in
another machine.
If this flag is enabled, which is the default
@ -595,15 +595,15 @@ secure means beyond the scope of the NTP protocol itself.
Besides the keys used
for ordinary NTP associations,
additional keys can be used as passwords for the
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
utility programs.
.sp \n(Ppu
.ne 2
When
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
is first started, it reads the key file specified in the
\f\*[B-Font]keys\f[]
configuration command and installs the keys
@ -617,17 +617,17 @@ allows, for instance, the installation of possibly
several batches of keys and
then activating or deactivating each batch
remotely using
\fCntpdc\fR(1ntpdcmdoc)\f[].
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[].
This also provides a revocation capability that can be used
if a key becomes compromised.
The
\f\*[B-Font]requestkey\f[]
command selects the key used as the password for the
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
utility, while the
\f\*[B-Font]controlkey\f[]
command selects the key used as the password for the
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
utility.
.SS Public Key Cryptography
NTPv4 supports the original NTPv3 symmetric key scheme
@ -674,7 +674,7 @@ page.
The specific cryptographic environment used by Autokey servers
and clients is determined by a set of files
and soft links generated by the
\fCntp-keygen\fR(1ntpkeygenmdoc)\f[]
\fCntp-keygen\f[]\fR(1ntpkeygenmdoc)\f[]
program.
This includes a required host key file,
required certificate file and optional sign key file,
@ -721,7 +721,7 @@ DNS compromise is essential.
By convention, the name of an Autokey host is the name returned
by the Unix
\fCgethostname\fR(2)\f[]
\fCgethostname\f[]\fR(2)\f[]
system call or equivalent in other systems.
By the system design
model, there are no provisions to allow alternate names or aliases.
@ -821,7 +821,7 @@ If verification fails,
Bob sends Cathy a thing called a crypto-NAK, which tells her
something broke.
She can see the evidence using the
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
program.
.sp \n(Ppu
.ne 2
@ -846,7 +846,7 @@ with one server and no authentication with another might not be wise.
.SS Key Management
The cryptographic values used by the Autokey protocol are
incorporated as a set of files generated by the
\fCntp-keygen\fR(1ntpkeygenmdoc)\f[]
\fCntp-keygen\f[]\fR(1ntpkeygenmdoc)\f[]
utility program, including symmetric key, host key and
public certificate files, as well as sign key, identity parameters
and leapseconds files.
@ -855,9 +855,9 @@ certificate files can be generated by the OpenSSL utilities
and certificates can be imported from public certificate
authorities.
Note that symmetric keys are necessary for the
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
utility programs.
The remaining files are necessary only for the
Autokey protocol.
@ -895,7 +895,7 @@ sent.
.TP 7
.NOP \f\*[B-Font]controlkey\f[] \f\*[I-Font]key\f[]
Specifies the key identifier to use with the
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
utility, which uses the standard
protocol defined in RFC-1305.
The
@ -984,10 +984,10 @@ not found, the host key is also the sign key.
.NOP \f\*[B-Font]keys\f[] \f\*[I-Font]keyfile\f[]
Specifies the complete path and location of the MD5 key file
containing the keys and key identifiers used by
\fCntpd\fR(1ntpdmdoc)\f[],
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[],
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
when operating with symmetric key cryptography.
This is the same operation as the
\f\*[B-Font]\-k\f[]
@ -1001,10 +1001,10 @@ The default is
.TP 7
.NOP \f\*[B-Font]requestkey\f[] \f\*[I-Font]key\f[]
Specifies the key identifier to use with the
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
utility program, which uses a
proprietary protocol specific to this implementation of
\fCntpd\fR(1ntpdmdoc)\f[].
\fCntpd\f[]\fR(1ntpdmdoc)\f[].
The
\f\*[I-Font]key\f[]
argument is a key identifier
@ -1027,9 +1027,9 @@ for every message sent.
Specifies the key identifiers which are trusted for the
purposes of authenticating peers with symmetric key cryptography,
as well as keys used by the
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
programs.
The authentication procedures require that both the local
and remote servers share the same key and key identifier for this
@ -1106,7 +1106,7 @@ The certificate is missing, corrupted or bogus.
The identity key is missing, corrupt or bogus.
.PP
.SH Monitoring Support
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
includes a comprehensive monitoring facility suitable
for continuous, long term recording of server and client
timekeeping performance.
@ -1122,7 +1122,7 @@ directory of this distribution.
Using
these facilities and
UNIX
\fCcron\fR(8)\f[]
\fCcron\f[]\fR(8)\f[]
jobs, the data can be
automatically summarized and archived for retrospective analysis.
.SS Monitoring Commands
@ -1348,7 +1348,7 @@ produced.)
.ne 2
Note that this command can be sent from the
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
program running at a remote location.
.RS
.TP 7
@ -1422,7 +1422,7 @@ server.
This type does not perform any changes to file set
members during runtime, however it provides an easy way of
separating files belonging to different
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
server incarnations.
The set member filename is built by appending a
\[oq]\&.\[cq]
@ -1432,7 +1432,7 @@ and
\f\*[I-Font]filename\f[]
strings, and
appending the decimal representation of the process ID of the
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
server process.
.TP 7
.NOP \f\*[B-Font]day\f[]
@ -1524,7 +1524,7 @@ Enables or disables the recording function.
.PP
.SH Access Control Support
The
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
daemon implements a general purpose address/mask based restriction
list.
The list contains address/match entries sorted first
@ -1672,9 +1672,9 @@ may be specified:
.TP 7
.NOP \f\*[B-Font]ignore\f[]
Deny packets of all kinds, including
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
queries.
.TP 7
.NOP \f\*[B-Font]kod\f[]
@ -1690,7 +1690,7 @@ Deny service if the packet spacing violates the lower limits specified
in the discard command.
A history of clients is kept using the
monitoring capability of
\fCntpd\fR(1ntpdmdoc)\f[].
\fCntpd\f[]\fR(1ntpdmdoc)\f[].
Thus, monitoring is always active as
long as there is a restriction entry with the
\f\*[B-Font]limited\f[]
@ -1709,9 +1709,9 @@ be overridden by later requests for normal priority traps.
.TP 7
.NOP \f\*[B-Font]nomodify\f[]
Deny
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
queries which attempt to modify the state of the
server (i.e., run time reconfiguration).
Queries which return
@ -1719,9 +1719,9 @@ information are permitted.
.TP 7
.NOP \f\*[B-Font]noquery\f[]
Deny
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
queries.
Time service is not affected.
.TP 7
@ -1746,9 +1746,9 @@ directive.
.TP 7
.NOP \f\*[B-Font]noserve\f[]
Deny all packets except
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
queries.
.TP 7
.NOP \f\*[B-Font]notrap\f[]
@ -2078,11 +2078,11 @@ re-associate accordingly.
.ne 2
Some administrators prefer to avoid running
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
continuously and run either
\fCntpdate\fR(8)\f[]
\fCntpdate\f[]\fR(8)\f[]
or
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
\f\*[B-Font]\-q\f[]
as a cron job.
In either case the servers must be
@ -2090,7 +2090,7 @@ configured in advance and the program fails if none are
available when the cron job runs.
A really slick
application of manycast is with
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
\f\*[B-Font]\-q\f[].
The program wakes up, scans the local landscape looking
for the usual suspects, selects the best from among
@ -2260,7 +2260,7 @@ hazardous.
.ne 2
For the purposes of configuration,
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
treats
reference clocks in a manner analogous to normal NTP peers as much
as possible.
@ -2348,7 +2348,7 @@ command as well.
The stratum number of a reference clock is by default zero.
Since the
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
daemon adds one to the stratum of each
peer, a primary server ordinarily displays an external stratum of
one.
@ -2422,7 +2422,7 @@ It must immediately follow the
command which configures the driver.
Note that the same capability
is possible at run time using the
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
program.
The options are interpreted as
follows:
@ -2564,11 +2564,15 @@ The file is updated by first writing
the current drift value into a temporary file and then renaming
this file to replace the old version.
This implies that
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
.TP 7
.NOP \f\*[B-Font]dscp\f[] \f\*[I-Font]value\f[]
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
.TP 7
.NOP \f\*[B-Font]enable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
.TP 7
.NOP \f\*[B-Font]disable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
@ -2576,7 +2580,7 @@ Provides a way to enable or disable various server options.
Flags not mentioned are unaffected.
Note that all of these flags
can be controlled remotely using the
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
utility program.
.RS
.TP 7
@ -2613,21 +2617,21 @@ if support is available, otherwise
.NOP \f\*[B-Font]mode7\f[]
Enables processing of NTP mode 7 implementation-specific requests
which are used by the deprecated
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
program.
The default for this flag is disable.
This flag is excluded from runtime configuration using
\fCntpq\fR(1ntpqmdoc)\f[].
\fCntpq\f[]\fR(1ntpqmdoc)\f[].
The
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
program provides the same capabilities as
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
using standard mode 6 requests.
.TP 7
.NOP \f\*[B-Font]monitor\f[]
Enables the monitoring facility.
See the
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
program
and the
\f\*[B-Font]monlist\f[]
@ -2661,14 +2665,28 @@ be nested to a depth of five; upon reaching the end of any
include file, command processing resumes in the previous
configuration file.
This option is useful for sites that run
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
.TP 7
.NOP \f\*[B-Font]leapsmearinterval\f[] \f\*[I-Font]seconds\f[]
This EXPERIMENTAL option is only available if
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
was built with the
\f\*[B-Font]\--enable-leap-smear\f[]
option to the
\f\*[B-Font]configure\f[]
script.
It specifies the interval over which a leap second correction will be applied.
Recommended values for this option are between
7200 (2 hours) and 86400 (24 hours).
.Sy DO NOT USE THIS OPTION ON PUBLIC-ACCESS SERVERS!
See http://bugs.ntp.org/2855 for more information.
.TP 7
.NOP \f\*[B-Font]logconfig\f[] \f\*[I-Font]configkeyword\f[]
This command controls the amount and type of output written to
the system
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
facility or the alternate
\f\*[B-Font]logfile\f[]
log file.
@ -2683,14 +2701,14 @@ and
where
\[oq]=\[cq]
sets the
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
priority mask,
\[oq]+\[cq]
adds and
\[oq]\-\[cq]
removes
messages.
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
messages can be controlled in four
classes
(\f\*[B-Font]clock\f[], \f\*[B-Font]peer\f[], \f\*[B-Font]sys\f[] and \f\*[B-Font]sync\f[]).
@ -2728,7 +2746,7 @@ logconfig =syncstatus +sysevents
.ne 2
This would just list the synchronizations state of
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
and the major system events.
For a simple reference server, the
following minimum message configuration could be useful:
@ -2749,7 +2767,7 @@ peers, system events and so on is suppressed.
.NOP \f\*[B-Font]logfile\f[] \f\*[I-Font]logfile\f[]
This command specifies the location of an alternate log file to
be used instead of the default system
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
facility.
This is the same operation as the \-l command line option.
.TP 7
@ -2764,7 +2782,7 @@ is followed by the
\f\*[B-Font]default\f[]
keyword, the
variable will be listed as part of the default system variables
(\fCntpq\fR(1ntpqmdoc)\f[] \f\*[B-Font]rv\f[] command)).
(\fCntpq\f[]\fR(1ntpqmdoc)\f[] \f\*[B-Font]rv\f[] command)).
These additional variables serve
informational purposes only.
They are not related to the protocol
@ -2888,12 +2906,12 @@ The default is 32 megabytes. Setting this to zero will prevent any attemp to loc
.TP 7
.NOP \f\*[B-Font]stacksize\f[] \f\*[I-Font]N4kPages\f[]
Specifies the maximum size of the process stack on systems with the
\fBmlockall\f[]\fR()\f[]
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
.TP 7
.NOP \f\*[B-Font]filenum\f[] \f\*[I-Font]Nfiledescriptors\f[]
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
\fBmlockall\fR()\f[]
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
.RE
.TP 7
.NOP \f\*[B-Font]trap\f[] \f\*[I-Font]host_address\f[] [\f\*[B-Font]port\f[] \f\*[I-Font]port_number\f[]] [\f\*[B-Font]interface\f[] \f\*[I-Font]interface_address\f[]]
@ -2986,9 +3004,9 @@ libopts had an internal operational error. Please report
it to autogen-users@lists.sourceforge.net. Thank you.
.PP
.SH "SEE ALSO"
\fCntpd\fR(1ntpdmdoc)\f[],
\fCntpdc\fR(1ntpdcmdoc)\f[],
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[],
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[],
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
.sp \n(Ppu
.ne 2

View File

@ -1,9 +1,9 @@
.Dd April 7 2015
.Dd June 29 2015
.Dt NTP_CONF 5mdoc File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:57 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:36 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@ -2386,6 +2386,9 @@ This implies that
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
.It Ic dscp Ar value
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6\-bit code. The default value is 46, signifying Expedited Forwarding.
.It Xo Ic enable
.Oo
.Cm auth | Cm bclient |
@ -2485,6 +2488,19 @@ This option is useful for sites that run
.Xr ntpd 1ntpdmdoc
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
.It Ic leapsmearinterval Ar seconds
This EXPERIMENTAL option is only available if
.Xr ntpd 1ntpdmdoc
was built with the
.Cm \-\-enable\-leap\-smear
option to the
.Cm configure
script.
It specifies the interval over which a leap second correction will be applied.
Recommended values for this option are between
7200 (2 hours) and 86400 (24 hours).
.Sy DO NOT USE THIS OPTION ON PUBLIC\-ACCESS SERVERS!
See http://bugs.ntp.org/2855 for more information.
.It Ic logconfig Ar configkeyword
This command controls the amount and type of output written to
the system
@ -2717,11 +2733,11 @@ option).
The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
.It Cm stacksize Ar N4kPages
Specifies the maximum size of the process stack on systems with the
.It Cm filenum Ar Nfiledescriptors
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.Fn mlockall
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
.It Cm filenum Ar Nfiledescriptors
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.El
.It Xo Ic trap Ar host_address
.Op Cm port Ar port_number

View File

@ -2388,6 +2388,9 @@ This implies that
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
.It Ic dscp Ar value
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
.It Xo Ic enable
.Oo
.Cm auth | Cm bclient |
@ -2487,6 +2490,19 @@ This option is useful for sites that run
.Xr ntpd 1ntpdmdoc
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
.It Ic leapsmearinterval Ar seconds
This EXPERIMENTAL option is only available if
.Xr ntpd 1ntpdmdoc
was built with the
.Cm --enable-leap-smear
option to the
.Cm configure
script.
It specifies the interval over which a leap second correction will be applied.
Recommended values for this option are between
7200 (2 hours) and 86400 (24 hours).
.Sy DO NOT USE THIS OPTION ON PUBLIC-ACCESS SERVERS!
See http://bugs.ntp.org/2855 for more information.
.It Ic logconfig Ar configkeyword
This command controls the amount and type of output written to
the system
@ -2719,11 +2735,11 @@ option).
The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
.It Cm stacksize Ar N4kPages
Specifies the maximum size of the process stack on systems with the
.It Cm filenum Ar Nfiledescriptors
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.Fn mlockall
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
.It Cm filenum Ar Nfiledescriptors
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.El
.It Xo Ic trap Ar host_address
.Op Cm port Ar port_number

View File

@ -33,7 +33,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the configuration file for the NTP Project's
<code>ntpd</code> program.
<p>This document applies to version 4.2.8p2 of <code>ntp.conf</code>.
<p>This document applies to version 4.2.8p3 of <code>ntp.conf</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@ -2286,6 +2286,8 @@ This implies that
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
<br><dt><code>dscp</code> <kbd>value</kbd><dd>This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
<br><dt><code>enable</code> <code>[auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</code><br><dt><code>disable</code> <code>[auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</code><dd>Provides a way to enable or disable various server options.
Flags not mentioned are unaffected.
Note that all of these flags
@ -2360,6 +2362,18 @@ This option is useful for sites that run
<code>ntpd(1ntpdmdoc)</code>
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
<br><dt><code>leapsmearinterval</code> <kbd>seconds</kbd><dd>This EXPERIMENTAL option is only available if
<code>ntpd(1ntpdmdoc)</code>
was built with the
<code>--enable-leap-smear</code>
option to the
<code>configure</code>
script.
It specifies the interval over which a leap second correction will be applied.
Recommended values for this option are between
7200 (2 hours) and 86400 (24 hours).
.Sy DO NOT USE THIS OPTION ON PUBLIC-ACCESS SERVERS!
See http://bugs.ntp.org/2855 for more information.
<br><dt><code>logconfig</code> <kbd>configkeyword</kbd><dd>This command controls the amount and type of output written to
the system
<code>syslog(3)</code>
@ -2539,10 +2553,10 @@ when dropping root (the
option).
The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
<br><dt><code>stacksize</code> <kbd>N4kPages</kbd><dd>Specifies the maximum size of the process stack on systems with the
<br><dt><code>filenum</code> <kbd>Nfiledescriptors</kbd><dd>Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
<code>mlockall()</code>
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
<br><dt><code>filenum</code> <kbd>Nfiledescriptors</kbd><dd>Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
</dl>
<br><dt><code>trap</code> <kbd>host_address</kbd> <code>[port </code><kbd>port_number</kbd><code>]</code> <code>[interface </code><kbd>interface_address</kbd><code>]</code><dd>This command configures a trap receiver at the given host
address and port number for sending messages with the specified

View File

@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
.TH ntp.conf 5 "07 Apr 2015" "4.2.8p2" "File Formats"
.TH ntp.conf 5 "29 Jun 2015" "4.2.8p3" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-gKaW.1/ag-tKaO91)
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-R0aO7B/ag-30aG6B)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:37 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:16 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@ -35,7 +35,7 @@ All arguments must be options.
The
\f\*[B-Font]ntp.conf\fP
configuration file is read at initial startup by the
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
daemon in order to specify the synchronization sources,
modes and other related information.
Usually, it is installed in the
@ -307,7 +307,7 @@ This is designed to speed the initial synchronization
acquisition with the
\f\*[B-Font]server\f[]
command and s addresses and when
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
is started with the
\f\*[B-Font]\-q\f[]
option.
@ -528,7 +528,7 @@ and
\f\*[B-Font]disable\f[]
commands and also by remote
configuration commands sent by a
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
program running in
another machine.
If this flag is enabled, which is the default
@ -595,15 +595,15 @@ secure means beyond the scope of the NTP protocol itself.
Besides the keys used
for ordinary NTP associations,
additional keys can be used as passwords for the
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
utility programs.
.sp \n(Ppu
.ne 2
When
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
is first started, it reads the key file specified in the
\f\*[B-Font]keys\f[]
configuration command and installs the keys
@ -617,17 +617,17 @@ allows, for instance, the installation of possibly
several batches of keys and
then activating or deactivating each batch
remotely using
\fCntpdc\fR(@NTPDC_MS@)\f[].
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[].
This also provides a revocation capability that can be used
if a key becomes compromised.
The
\f\*[B-Font]requestkey\f[]
command selects the key used as the password for the
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
utility, while the
\f\*[B-Font]controlkey\f[]
command selects the key used as the password for the
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
utility.
.SS Public Key Cryptography
NTPv4 supports the original NTPv3 symmetric key scheme
@ -674,7 +674,7 @@ page.
The specific cryptographic environment used by Autokey servers
and clients is determined by a set of files
and soft links generated by the
\fCntp-keygen\fR(1ntpkeygenmdoc)\f[]
\fCntp-keygen\f[]\fR(1ntpkeygenmdoc)\f[]
program.
This includes a required host key file,
required certificate file and optional sign key file,
@ -721,7 +721,7 @@ DNS compromise is essential.
By convention, the name of an Autokey host is the name returned
by the Unix
\fCgethostname\fR(2)\f[]
\fCgethostname\f[]\fR(2)\f[]
system call or equivalent in other systems.
By the system design
model, there are no provisions to allow alternate names or aliases.
@ -821,7 +821,7 @@ If verification fails,
Bob sends Cathy a thing called a crypto-NAK, which tells her
something broke.
She can see the evidence using the
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
program.
.sp \n(Ppu
.ne 2
@ -846,7 +846,7 @@ with one server and no authentication with another might not be wise.
.SS Key Management
The cryptographic values used by the Autokey protocol are
incorporated as a set of files generated by the
\fCntp-keygen\fR(1ntpkeygenmdoc)\f[]
\fCntp-keygen\f[]\fR(1ntpkeygenmdoc)\f[]
utility program, including symmetric key, host key and
public certificate files, as well as sign key, identity parameters
and leapseconds files.
@ -855,9 +855,9 @@ certificate files can be generated by the OpenSSL utilities
and certificates can be imported from public certificate
authorities.
Note that symmetric keys are necessary for the
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
utility programs.
The remaining files are necessary only for the
Autokey protocol.
@ -895,7 +895,7 @@ sent.
.TP 7
.NOP \f\*[B-Font]controlkey\f[] \f\*[I-Font]key\f[]
Specifies the key identifier to use with the
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
utility, which uses the standard
protocol defined in RFC-1305.
The
@ -984,10 +984,10 @@ not found, the host key is also the sign key.
.NOP \f\*[B-Font]keys\f[] \f\*[I-Font]keyfile\f[]
Specifies the complete path and location of the MD5 key file
containing the keys and key identifiers used by
\fCntpd\fR(@NTPD_MS@)\f[],
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[],
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
when operating with symmetric key cryptography.
This is the same operation as the
\f\*[B-Font]\-k\f[]
@ -1001,10 +1001,10 @@ The default is
.TP 7
.NOP \f\*[B-Font]requestkey\f[] \f\*[I-Font]key\f[]
Specifies the key identifier to use with the
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
utility program, which uses a
proprietary protocol specific to this implementation of
\fCntpd\fR(@NTPD_MS@)\f[].
\fCntpd\f[]\fR(@NTPD_MS@)\f[].
The
\f\*[I-Font]key\f[]
argument is a key identifier
@ -1027,9 +1027,9 @@ for every message sent.
Specifies the key identifiers which are trusted for the
purposes of authenticating peers with symmetric key cryptography,
as well as keys used by the
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
programs.
The authentication procedures require that both the local
and remote servers share the same key and key identifier for this
@ -1106,7 +1106,7 @@ The certificate is missing, corrupted or bogus.
The identity key is missing, corrupt or bogus.
.PP
.SH Monitoring Support
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
includes a comprehensive monitoring facility suitable
for continuous, long term recording of server and client
timekeeping performance.
@ -1122,7 +1122,7 @@ directory of this distribution.
Using
these facilities and
UNIX
\fCcron\fR(8)\f[]
\fCcron\f[]\fR(8)\f[]
jobs, the data can be
automatically summarized and archived for retrospective analysis.
.SS Monitoring Commands
@ -1348,7 +1348,7 @@ produced.)
.ne 2
Note that this command can be sent from the
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
program running at a remote location.
.RS
.TP 7
@ -1422,7 +1422,7 @@ server.
This type does not perform any changes to file set
members during runtime, however it provides an easy way of
separating files belonging to different
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
server incarnations.
The set member filename is built by appending a
\[oq]\&.\[cq]
@ -1432,7 +1432,7 @@ and
\f\*[I-Font]filename\f[]
strings, and
appending the decimal representation of the process ID of the
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
server process.
.TP 7
.NOP \f\*[B-Font]day\f[]
@ -1524,7 +1524,7 @@ Enables or disables the recording function.
.PP
.SH Access Control Support
The
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
daemon implements a general purpose address/mask based restriction
list.
The list contains address/match entries sorted first
@ -1672,9 +1672,9 @@ may be specified:
.TP 7
.NOP \f\*[B-Font]ignore\f[]
Deny packets of all kinds, including
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
queries.
.TP 7
.NOP \f\*[B-Font]kod\f[]
@ -1690,7 +1690,7 @@ Deny service if the packet spacing violates the lower limits specified
in the discard command.
A history of clients is kept using the
monitoring capability of
\fCntpd\fR(@NTPD_MS@)\f[].
\fCntpd\f[]\fR(@NTPD_MS@)\f[].
Thus, monitoring is always active as
long as there is a restriction entry with the
\f\*[B-Font]limited\f[]
@ -1709,9 +1709,9 @@ be overridden by later requests for normal priority traps.
.TP 7
.NOP \f\*[B-Font]nomodify\f[]
Deny
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
queries which attempt to modify the state of the
server (i.e., run time reconfiguration).
Queries which return
@ -1719,9 +1719,9 @@ information are permitted.
.TP 7
.NOP \f\*[B-Font]noquery\f[]
Deny
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
queries.
Time service is not affected.
.TP 7
@ -1746,9 +1746,9 @@ directive.
.TP 7
.NOP \f\*[B-Font]noserve\f[]
Deny all packets except
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
queries.
.TP 7
.NOP \f\*[B-Font]notrap\f[]
@ -2078,11 +2078,11 @@ re-associate accordingly.
.ne 2
Some administrators prefer to avoid running
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
continuously and run either
\fCntpdate\fR(8)\f[]
\fCntpdate\f[]\fR(8)\f[]
or
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
\f\*[B-Font]\-q\f[]
as a cron job.
In either case the servers must be
@ -2090,7 +2090,7 @@ configured in advance and the program fails if none are
available when the cron job runs.
A really slick
application of manycast is with
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
\f\*[B-Font]\-q\f[].
The program wakes up, scans the local landscape looking
for the usual suspects, selects the best from among
@ -2260,7 +2260,7 @@ hazardous.
.ne 2
For the purposes of configuration,
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
treats
reference clocks in a manner analogous to normal NTP peers as much
as possible.
@ -2348,7 +2348,7 @@ command as well.
The stratum number of a reference clock is by default zero.
Since the
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
daemon adds one to the stratum of each
peer, a primary server ordinarily displays an external stratum of
one.
@ -2422,7 +2422,7 @@ It must immediately follow the
command which configures the driver.
Note that the same capability
is possible at run time using the
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
program.
The options are interpreted as
follows:
@ -2564,11 +2564,15 @@ The file is updated by first writing
the current drift value into a temporary file and then renaming
this file to replace the old version.
This implies that
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
.TP 7
.NOP \f\*[B-Font]dscp\f[] \f\*[I-Font]value\f[]
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
.TP 7
.NOP \f\*[B-Font]enable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
.TP 7
.NOP \f\*[B-Font]disable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
@ -2576,7 +2580,7 @@ Provides a way to enable or disable various server options.
Flags not mentioned are unaffected.
Note that all of these flags
can be controlled remotely using the
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
utility program.
.RS
.TP 7
@ -2613,21 +2617,21 @@ if support is available, otherwise
.NOP \f\*[B-Font]mode7\f[]
Enables processing of NTP mode 7 implementation-specific requests
which are used by the deprecated
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
program.
The default for this flag is disable.
This flag is excluded from runtime configuration using
\fCntpq\fR(@NTPQ_MS@)\f[].
\fCntpq\f[]\fR(@NTPQ_MS@)\f[].
The
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
program provides the same capabilities as
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
using standard mode 6 requests.
.TP 7
.NOP \f\*[B-Font]monitor\f[]
Enables the monitoring facility.
See the
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
program
and the
\f\*[B-Font]monlist\f[]
@ -2661,14 +2665,28 @@ be nested to a depth of five; upon reaching the end of any
include file, command processing resumes in the previous
configuration file.
This option is useful for sites that run
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
.TP 7
.NOP \f\*[B-Font]leapsmearinterval\f[] \f\*[I-Font]seconds\f[]
This EXPERIMENTAL option is only available if
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
was built with the
\f\*[B-Font]\--enable-leap-smear\f[]
option to the
\f\*[B-Font]configure\f[]
script.
It specifies the interval over which a leap second correction will be applied.
Recommended values for this option are between
7200 (2 hours) and 86400 (24 hours).
.Sy DO NOT USE THIS OPTION ON PUBLIC-ACCESS SERVERS!
See http://bugs.ntp.org/2855 for more information.
.TP 7
.NOP \f\*[B-Font]logconfig\f[] \f\*[I-Font]configkeyword\f[]
This command controls the amount and type of output written to
the system
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
facility or the alternate
\f\*[B-Font]logfile\f[]
log file.
@ -2683,14 +2701,14 @@ and
where
\[oq]=\[cq]
sets the
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
priority mask,
\[oq]+\[cq]
adds and
\[oq]\-\[cq]
removes
messages.
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
messages can be controlled in four
classes
(\f\*[B-Font]clock\f[], \f\*[B-Font]peer\f[], \f\*[B-Font]sys\f[] and \f\*[B-Font]sync\f[]).
@ -2728,7 +2746,7 @@ logconfig =syncstatus +sysevents
.ne 2
This would just list the synchronizations state of
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
and the major system events.
For a simple reference server, the
following minimum message configuration could be useful:
@ -2749,7 +2767,7 @@ peers, system events and so on is suppressed.
.NOP \f\*[B-Font]logfile\f[] \f\*[I-Font]logfile\f[]
This command specifies the location of an alternate log file to
be used instead of the default system
\fCsyslog\fR(3)\f[]
\fCsyslog\f[]\fR(3)\f[]
facility.
This is the same operation as the \-l command line option.
.TP 7
@ -2764,7 +2782,7 @@ is followed by the
\f\*[B-Font]default\f[]
keyword, the
variable will be listed as part of the default system variables
(\fCntpq\fR(@NTPQ_MS@)\f[] \f\*[B-Font]rv\f[] command)).
(\fCntpq\f[]\fR(@NTPQ_MS@)\f[] \f\*[B-Font]rv\f[] command)).
These additional variables serve
informational purposes only.
They are not related to the protocol
@ -2888,12 +2906,12 @@ The default is 32 megabytes. Setting this to zero will prevent any attemp to loc
.TP 7
.NOP \f\*[B-Font]stacksize\f[] \f\*[I-Font]N4kPages\f[]
Specifies the maximum size of the process stack on systems with the
\fBmlockall\f[]\fR()\f[]
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
.TP 7
.NOP \f\*[B-Font]filenum\f[] \f\*[I-Font]Nfiledescriptors\f[]
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
\fBmlockall\fR()\f[]
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
.RE
.TP 7
.NOP \f\*[B-Font]trap\f[] \f\*[I-Font]host_address\f[] [\f\*[B-Font]port\f[] \f\*[I-Font]port_number\f[]] [\f\*[B-Font]interface\f[] \f\*[I-Font]interface_address\f[]]
@ -2986,9 +3004,9 @@ libopts had an internal operational error. Please report
it to autogen-users@lists.sourceforge.net. Thank you.
.PP
.SH "SEE ALSO"
\fCntpd\fR(@NTPD_MS@)\f[],
\fCntpdc\fR(@NTPDC_MS@)\f[],
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[],
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[],
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
.sp \n(Ppu
.ne 2

View File

@ -1,9 +1,9 @@
.Dd April 7 2015
.Dd June 29 2015
.Dt NTP_CONF 5 File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:57 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:36 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@ -2386,6 +2386,9 @@ This implies that
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
.It Ic dscp Ar value
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6\-bit code. The default value is 46, signifying Expedited Forwarding.
.It Xo Ic enable
.Oo
.Cm auth | Cm bclient |
@ -2485,6 +2488,19 @@ This option is useful for sites that run
.Xr ntpd @NTPD_MS@
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
.It Ic leapsmearinterval Ar seconds
This EXPERIMENTAL option is only available if
.Xr ntpd @NTPD_MS@
was built with the
.Cm \-\-enable\-leap\-smear
option to the
.Cm configure
script.
It specifies the interval over which a leap second correction will be applied.
Recommended values for this option are between
7200 (2 hours) and 86400 (24 hours).
.Sy DO NOT USE THIS OPTION ON PUBLIC\-ACCESS SERVERS!
See http://bugs.ntp.org/2855 for more information.
.It Ic logconfig Ar configkeyword
This command controls the amount and type of output written to
the system
@ -2717,11 +2733,11 @@ option).
The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
.It Cm stacksize Ar N4kPages
Specifies the maximum size of the process stack on systems with the
.It Cm filenum Ar Nfiledescriptors
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.Fn mlockall
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
.It Cm filenum Ar Nfiledescriptors
Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.El
.It Xo Ic trap Ar host_address
.Op Cm port Ar port_number

View File

@ -1,8 +1,8 @@
.TH ntp.keys 5man "07 Apr 2015" "4.2.8p2" "File Formats"
.TH ntp.keys 5man "29 Jun 2015" "4.2.8p3" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:42 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:21 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
@ -40,12 +40,12 @@ This document describes the format of an NTP symmetric key file.
For a description of the use of this type of file, see the
"Authentication Support"
section of the
\fCntp.conf\fR(5)\f[]
\fCntp.conf\f[]\fR(5)\f[]
page.
.sp \n(Ppu
.ne 2
\fCntpd\fR(8)\f[]
\fCntpd\f[]\fR(8)\f[]
reads its keys from a file specified using the
\f\*[B-Font]\-k\f[]
command line option or the
@ -140,9 +140,9 @@ which is truncated as necessary.
.ne 2
Note that the keys used by the
\fCntpq\fR(8)\f[]
\fCntpq\f[]\fR(8)\f[]
and
\fCntpdc\fR(8)\f[]
\fCntpdc\f[]\fR(8)\f[]
programs are checked against passwords
requested by the programs and entered by hand,
so it is generally appropriate to specify these keys in ASCII format.
@ -152,11 +152,11 @@ so it is generally appropriate to specify these keys in ASCII format.
the default name of the configuration file
.PP
.SH "SEE ALSO"
\fCntp.conf\fR(5)\f[],
\fCntpd\fR(1ntpdmdoc)\f[],
\fCntpdate\fR(1ntpdatemdoc)\f[],
\fCntpdc\fR(1ntpdcmdoc)\f[],
\fCsntp\fR(1sntpmdoc)\f[]
\fCntp.conf\f[]\fR(5)\f[],
\fCntpd\f[]\fR(1ntpdmdoc)\f[],
\fCntpdate\f[]\fR(1ntpdatemdoc)\f[],
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[],
\fCsntp\f[]\fR(1sntpmdoc)\f[]
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"

View File

@ -1,9 +1,9 @@
.Dd April 7 2015
.Dd June 29 2015
.Dt NTP_KEYS 5mdoc File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:26:00 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:39 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME

View File

@ -33,7 +33,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the symmetric key file for the NTP Project's
<code>ntpd</code> program.
<p>This document applies to version 4.2.8p2 of <code>ntp.keys</code>.
<p>This document applies to version 4.2.8p3 of <code>ntp.keys</code>.
<div class="shortcontents">
<h2>Short Contents</h2>

View File

@ -1,8 +1,8 @@
.TH ntp.keys 5 "07 Apr 2015" "4.2.8p2" "File Formats"
.TH ntp.keys 5 "29 Jun 2015" "4.2.8p3" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:42 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:21 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
@ -40,12 +40,12 @@ This document describes the format of an NTP symmetric key file.
For a description of the use of this type of file, see the
"Authentication Support"
section of the
\fCntp.conf\fR(5)\f[]
\fCntp.conf\f[]\fR(5)\f[]
page.
.sp \n(Ppu
.ne 2
\fCntpd\fR(8)\f[]
\fCntpd\f[]\fR(8)\f[]
reads its keys from a file specified using the
\f\*[B-Font]\-k\f[]
command line option or the
@ -140,9 +140,9 @@ which is truncated as necessary.
.ne 2
Note that the keys used by the
\fCntpq\fR(8)\f[]
\fCntpq\f[]\fR(8)\f[]
and
\fCntpdc\fR(8)\f[]
\fCntpdc\f[]\fR(8)\f[]
programs are checked against passwords
requested by the programs and entered by hand,
so it is generally appropriate to specify these keys in ASCII format.
@ -152,11 +152,11 @@ so it is generally appropriate to specify these keys in ASCII format.
the default name of the configuration file
.PP
.SH "SEE ALSO"
\fCntp.conf\fR(5)\f[],
\fCntpd\fR(@NTPD_MS@)\f[],
\fCntpdate\fR(@NTPDATE_MS@)\f[],
\fCntpdc\fR(@NTPDC_MS@)\f[],
\fCsntp\fR(@SNTP_MS@)\f[]
\fCntp.conf\f[]\fR(5)\f[],
\fCntpd\f[]\fR(@NTPD_MS@)\f[],
\fCntpdate\f[]\fR(@NTPDATE_MS@)\f[],
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[],
\fCsntp\f[]\fR(@SNTP_MS@)\f[]
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"

View File

@ -1,9 +1,9 @@
.Dd April 7 2015
.Dd June 29 2015
.Dt NTP_KEYS 5 File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:26:00 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:39 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME

View File

@ -54,9 +54,6 @@
#include "ntpd-opts.h"
/* Bison still(!) does not emit usable prototypes for the calling code */
int yyparse (struct FILE_INFO *ip_file);
/* list of servers from command line for config_peers() */
int cmdline_server_count;
char ** cmdline_servers;
@ -134,8 +131,6 @@ typedef struct peer_resolved_ctx_tag {
* Definitions of things either imported from or exported to outside
*/
extern int yydebug; /* ntp_parser.c (.y) */
int curr_include_level; /* The current include level */
struct FILE_INFO *fp[MAXINCLUDELEVEL+1];
config_tree cfgt; /* Parser output stored here */
struct config_tree_tag *cfg_tree_history; /* History of configs */
char *sys_phone[MAXPHONE] = {NULL}; /* ACTS phone numbers */
@ -181,11 +176,6 @@ struct netinfo_config_state {
struct REMOTE_CONFIG_INFO remote_config; /* Remote configuration buffer and
pointer info */
int input_from_file = 1; /* A boolean flag, which when set, indicates that
the input is to be taken from the configuration
file, instead of the remote-configuration buffer
*/
int old_config_style = 1; /* A boolean flag, which when set,
* indicates that the old configuration
* format with a newline at the end of
@ -257,7 +247,7 @@ static void free_config_tree(config_tree *ptree);
static void destroy_restrict_node(restrict_node *my_node);
static int is_sane_resolved_address(sockaddr_u *peeraddr, int hmode);
static void save_and_apply_config_tree(void);
static void save_and_apply_config_tree(int/*BOOL*/ from_file);
static void destroy_int_fifo(int_fifo *);
#define FREE_INT_FIFO(pf) \
do { \
@ -314,7 +304,7 @@ static sockaddr_u *get_next_address(address_node *addr);
static void config_sim(config_tree *);
static void config_ntpdsim(config_tree *);
#else /* !SIM follows */
static void config_ntpd(config_tree *);
static void config_ntpd(config_tree *, int/*BOOL*/ input_from_file);
static void config_other_modes(config_tree *);
static void config_auth(config_tree *);
static void config_access(config_tree *);
@ -326,7 +316,7 @@ static void config_trap(config_tree *);
static void config_fudge(config_tree *);
static void config_peers(config_tree *);
static void config_unpeers(config_tree *);
static void config_nic_rules(config_tree *);
static void config_nic_rules(config_tree *, int/*BOOL*/ input_from_file);
static void config_reset_counters(config_tree *);
static u_char get_correct_host_mode(int token);
static int peerflag_bits(peer_node *);
@ -2751,7 +2741,8 @@ free_config_tinker(
#ifndef SIM
static void
config_nic_rules(
config_tree *ptree
config_tree *ptree,
int/*BOOL*/ input_from_file
)
{
nic_rule_node * curr_node;
@ -3502,6 +3493,11 @@ config_vars(
stats_config(STATS_FREQ_FILE, curr_var->value.s);
break;
case T_Dscp:
/* DSCP is in the upper 6 bits of the IP TOS/DS field */
qos = curr_var->value.i << 2;
break;
case T_Ident:
sys_ident = curr_var->value.s;
break;
@ -3515,6 +3511,13 @@ config_vars(
stats_config(STATS_LEAP_FILE, curr_var->value.s);
break;
#ifdef LEAP_SMEAR
case T_Leapsmearinterval:
leap_smear_intv = curr_var->value.i;
msyslog(LOG_INFO, "config: leap smear interval %i s", leap_smear_intv);
break;
#endif
case T_Pidfile:
stats_config(STATS_PID_FILE, curr_var->value.s);
break;
@ -4224,7 +4227,7 @@ config_sim(
serv_info = HEAD_PFIFO(sim_n->servers);
for (; serv_info != NULL; serv_info = serv_info->link)
simulation.num_of_servers++;
simulation.servers = emalloc(simulation.num_of_servers *
simulation.servers = eallocarray(simulation.num_of_servers,
sizeof(simulation.servers[0]));
i = 0;
@ -4295,11 +4298,11 @@ free_config_sim(
#ifndef SIM
static void
config_ntpd(
config_tree *ptree
config_tree *ptree,
int/*BOOL*/ input_from_files
)
{
config_nic_rules(ptree);
io_open_sockets();
config_nic_rules(ptree, input_from_files);
config_monitor(ptree);
config_auth(ptree);
config_tos(ptree);
@ -4314,6 +4317,9 @@ config_ntpd(
config_ttl(ptree);
config_trap(ptree);
config_vars(ptree);
io_open_sockets();
config_other_modes(ptree);
config_peers(ptree);
config_unpeers(ptree);
@ -4370,28 +4376,22 @@ config_remotely(
sockaddr_u * remote_addr
)
{
struct FILE_INFO remote_cuckoo;
char origin[128];
snprintf(origin, sizeof(origin), "remote config from %s",
stoa(remote_addr));
ZERO(remote_cuckoo);
remote_cuckoo.fname = origin;
remote_cuckoo.line_no = 1;
remote_cuckoo.col_no = 1;
input_from_file = 0;
lex_init_stack(origin, NULL); /* no checking needed... */
init_syntax_tree(&cfgt);
yyparse(&remote_cuckoo);
yyparse();
lex_drop_stack();
cfgt.source.attr = CONF_SOURCE_NTPQ;
cfgt.timestamp = time(NULL);
cfgt.source.value.s = estrdup(stoa(remote_addr));
DPRINTF(1, ("Finished Parsing!!\n"));
save_and_apply_config_tree();
input_from_file = 1;
save_and_apply_config_tree(FALSE);
}
@ -4443,9 +4443,8 @@ getconfig(
getCmdOpts(argc, argv);
init_syntax_tree(&cfgt);
curr_include_level = 0;
if (
(fp[curr_include_level] = F_OPEN(FindConfig(config_file), "r")) == NULL
!lex_init_stack(FindConfig(config_file), "r")
#ifdef HAVE_NETINFO
/* If there is no config_file, try NetInfo. */
&& check_netinfo && !(config_netinfo = get_netinfo_config())
@ -4459,8 +4458,7 @@ getconfig(
#else
/* Under WinNT try alternate_config_file name, first NTP.CONF, then NTP.INI */
if ((fp[curr_include_level] = F_OPEN(FindConfig(alt_config_file), "r")) == NULL) {
if (!lex_init_stack(FindConfig(alt_config_file), "r")) {
/*
* Broadcast clients can sometimes run without
* a configuration file.
@ -4480,17 +4478,15 @@ getconfig(
#ifdef DEBUG
yydebug = !!(debug >= 5);
#endif
yyparse(fp[curr_include_level]);
yyparse();
lex_drop_stack();
DPRINTF(1, ("Finished Parsing!!\n"));
cfgt.source.attr = CONF_SOURCE_FILE;
cfgt.timestamp = time(NULL);
save_and_apply_config_tree();
while (curr_include_level != -1)
FCLOSE(fp[curr_include_level--]);
save_and_apply_config_tree(TRUE);
#ifdef HAVE_NETINFO
if (config_netinfo)
@ -4500,7 +4496,7 @@ getconfig(
void
save_and_apply_config_tree(void)
save_and_apply_config_tree(int/*BOOL*/ input_from_file)
{
config_tree *ptree;
#ifndef SAVECONFIG
@ -4554,7 +4550,7 @@ save_and_apply_config_tree(void)
*/
#ifndef SIM
config_ntpd(ptree);
config_ntpd(ptree, input_from_file);
#else
config_ntpdsim(ptree);
#endif
@ -4785,8 +4781,9 @@ gettokens_netinfo (
if (namelist.ni_namelist_len == 0) continue;
config->val_list =
emalloc(sizeof(char*) *
(namelist.ni_namelist_len + 1));
eallocarray(
(namelist.ni_namelist_len + 1),
sizeof(char*));
val_list = config->val_list;
for (index = 0;
@ -4936,7 +4933,7 @@ ntp_rlimit(
case RLIMIT_NOFILE:
/*
* For large systems the default file descriptor limit may
* not be enough.
* not be enough.
*/
DPRINTF(2, ("ntp_rlimit: NOFILE: %d %s\n",
(int)(rl_value / rl_scale), rl_sstr));
@ -4956,7 +4953,7 @@ ntp_rlimit(
DPRINTF(2, ("ntp_rlimit: STACK: %d %s pages\n",
(int)(rl_value / rl_scale), rl_sstr));
if (-1 == getrlimit(RLIMIT_STACK, &rl)) {
msyslog(LOG_ERR, "getrlimit() failed: %m");
msyslog(LOG_ERR, "getrlimit(RLIMIT_STACK) failed: %m");
} else {
if (rl_value > rl.rlim_max) {
msyslog(LOG_WARNING,
@ -4965,9 +4962,10 @@ ntp_rlimit(
(u_long)rl_value);
rl_value = rl.rlim_max;
}
rl.rlim_cur = rl_value;
if (-1 == setrlimit(RLIMIT_STACK, &rl)) {
msyslog(LOG_ERR,
"ntp_rlimit: Cannot adjust stack limit: %m");
"ntp_rlimit: Cannot set RLIMIT_STACK: %m");
}
}
break;

View File

@ -36,6 +36,7 @@
# include "ntp_syscall.h"
#endif
extern size_t remoteconfig_cmdlength( const char *src_buf, const char *src_end );
#ifndef MIN
#define MIN(a, b) (((a) <= (b)) ? (a) : (b))
@ -229,7 +230,9 @@ static const struct ctl_proc control_codes[] = {
#define CS_TIMER_XMTS 87
#define CS_FUZZ 88
#define CS_WANDER_THRESH 89
#define CS_MAX_NOAUTOKEY CS_WANDER_THRESH
#define CS_LEAPSMEARINTV 90
#define CS_LEAPSMEAROFFS 91
#define CS_MAX_NOAUTOKEY CS_LEAPSMEAROFFS
#ifdef AUTOKEY
#define CS_FLAGS (1 + CS_MAX_NOAUTOKEY)
#define CS_HOST (2 + CS_MAX_NOAUTOKEY)
@ -425,6 +428,10 @@ static const struct ctl_var sys_var[] = {
{ CS_TIMER_XMTS, RO, "timer_xmts" }, /* 87 */
{ CS_FUZZ, RO, "fuzz" }, /* 88 */
{ CS_WANDER_THRESH, RO, "clk_wander_threshold" }, /* 89 */
#ifdef LEAP_SMEAR
{ CS_LEAPSMEARINTV, RO, "leapsmearinterval" }, /* 90 */
{ CS_LEAPSMEAROFFS, RO, "leapsmearoffset" }, /* 91 */
#endif /* LEAP_SMEAR */
#ifdef AUTOKEY
{ CS_FLAGS, RO, "flags" }, /* 1 + CS_MAX_NOAUTOKEY */
{ CS_HOST, RO, "host" }, /* 2 + CS_MAX_NOAUTOKEY */
@ -467,6 +474,8 @@ static const u_char def_sys_var[] = {
CS_TAI,
CS_LEAPTAB,
CS_LEAPEND,
CS_LEAPSMEARINTV,
CS_LEAPSMEAROFFS,
#ifdef AUTOKEY
CS_HOST,
CS_IDENT,
@ -1980,6 +1989,19 @@ ctl_putsys(
break;
}
#ifdef LEAP_SMEAR
case CS_LEAPSMEARINTV:
if (leap_smear_intv > 0)
ctl_putuint(sys_var[CS_LEAPSMEARINTV].text, leap_smear_intv);
break;
case CS_LEAPSMEAROFFS:
if (leap_smear_intv > 0)
ctl_putdbl(sys_var[CS_LEAPSMEAROFFS].text,
leap_smear.doffset * 1e3);
break;
#endif /* LEAP_SMEAR */
case CS_RATE:
ctl_putuint(sys_var[CS_RATE].text, ntp_minpoll);
break;
@ -3289,6 +3311,7 @@ write_variables(
ctl_flushpkt(0);
}
/*
* configure() processes ntpq :config/config-from-file, allowing
* generic runtime reconfiguration.
@ -3300,7 +3323,6 @@ static void configure(
{
size_t data_count;
int retval;
int replace_nl;
/* I haven't yet implemented changes to an existing association.
* Hence check if the association id is 0
@ -3326,7 +3348,7 @@ static void configure(
}
/* Initialize the remote config buffer */
data_count = reqend - reqpt;
data_count = remoteconfig_cmdlength(reqpt, reqend);
if (data_count > sizeof(remote_config.buffer) - 2) {
snprintf(remote_config.err_msg,
@ -3340,34 +3362,41 @@ static void configure(
stoa(&rbufp->recv_srcadr));
return;
}
memcpy(remote_config.buffer, reqpt, data_count);
if (data_count > 0
&& '\n' != remote_config.buffer[data_count - 1])
remote_config.buffer[data_count++] = '\n';
remote_config.buffer[data_count] = '\0';
remote_config.pos = 0;
remote_config.err_pos = 0;
remote_config.no_errors = 0;
/* do not include terminating newline in log */
if (data_count > 0
&& '\n' == remote_config.buffer[data_count - 1]) {
remote_config.buffer[data_count - 1] = '\0';
replace_nl = TRUE;
} else {
replace_nl = FALSE;
/* Bug 2853 -- check if all characters were acceptable */
if (data_count != (size_t)(reqend - reqpt)) {
snprintf(remote_config.err_msg,
sizeof(remote_config.err_msg),
"runtime configuration failed: request contains an unprintable character");
ctl_putdata(remote_config.err_msg,
strlen(remote_config.err_msg), 0);
ctl_flushpkt(0);
msyslog(LOG_NOTICE,
"runtime config from %s rejected: request contains an unprintable character: %0x",
stoa(&rbufp->recv_srcadr),
reqpt[data_count]);
return;
}
memcpy(remote_config.buffer, reqpt, data_count);
/* The buffer has no trailing linefeed or NUL right now. For
* logging, we do not want a newline, so we do that first after
* adding the necessary NUL byte.
*/
remote_config.buffer[data_count] = '\0';
DPRINTF(1, ("Got Remote Configuration Command: %s\n",
remote_config.buffer));
msyslog(LOG_NOTICE, "%s config: %s",
stoa(&rbufp->recv_srcadr),
remote_config.buffer);
if (replace_nl)
remote_config.buffer[data_count - 1] = '\n';
/* Now we have to make sure there is a NL/NUL sequence at the
* end of the buffer before we parse it.
*/
remote_config.buffer[data_count++] = '\n';
remote_config.buffer[data_count] = '\0';
remote_config.pos = 0;
remote_config.err_pos = 0;
remote_config.no_errors = 0;
config_remotely(&rbufp->recv_srcadr);
/*

View File

@ -316,8 +316,8 @@ make_keylist(
*/
tstamp = crypto_time();
if (peer->keylist == NULL)
peer->keylist = emalloc(sizeof(keyid_t) *
NTP_MAXSESSION);
peer->keylist = eallocarray(NTP_MAXSESSION,
sizeof(keyid_t));
/*
* Generate an initial key ID which is unique and greater than
@ -380,16 +380,14 @@ make_keylist(
EVP_SignUpdate(&ctx, (u_char *)vp, 12);
EVP_SignUpdate(&ctx, vp->ptr, sizeof(struct autokey));
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
vp->siglen = htonl(sign_siglen);
NTP_INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
peer->flags |= FLAG_ASSOC;
}
}
#ifdef DEBUG
if (debug)
printf("make_keys: %d %08x %08x ts %u fs %u poll %d\n",
DPRINTF(1, ("make_keys: %d %08x %08x ts %u fs %u poll %d\n",
peer->keynumber, keyid, cookie, ntohl(vp->tstamp),
ntohl(vp->fstamp), peer->hpoll);
#endif
ntohl(vp->fstamp), peer->hpoll));
return (XEVNT_OK);
}
@ -456,13 +454,9 @@ crypto_recv(
// HMS: Why pkt[1] instead of ep->associd ?
associd = (associd_t)ntohl(pkt[1]);
rval = XEVNT_OK;
#ifdef DEBUG
if (debug)
printf(
"crypto_recv: flags 0x%x ext offset %d len %u code 0x%x associd %d\n",
DPRINTF(1, ("crypto_recv: flags 0x%x ext offset %d len %u code 0x%x associd %d\n",
peer->crypto, authlen, len, code >> 16,
associd);
#endif
associd));
/*
* Check version number and field length. If bad,
@ -538,13 +532,9 @@ crypto_recv(
rval = XEVNT_LEN;
break;
}
#ifdef DEBUG
if (debug)
printf(
"crypto_recv: ident host 0x%x %d server 0x%x %d\n",
DPRINTF(1, ("crypto_recv: ident host 0x%x %d server 0x%x %d\n",
crypto_flags, peer->associd, fstamp,
peer->assoc);
#endif
peer->assoc));
temp32 = crypto_flags & CRYPTO_FLAG_MASK;
/*
@ -617,10 +607,7 @@ crypto_recv(
peer->assoc, peer->subject,
OBJ_nid2ln(temp32));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -678,10 +665,7 @@ crypto_recv(
OBJ_nid2ln(temp32), temp32,
ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -718,10 +702,7 @@ crypto_recv(
snprintf(statstr, sizeof(statstr), "iff %s fs %u",
peer->issuer, ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -759,10 +740,7 @@ crypto_recv(
snprintf(statstr, sizeof(statstr), "gq %s fs %u",
peer->issuer, ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -799,10 +777,7 @@ crypto_recv(
snprintf(statstr, sizeof(statstr), "mv %s fs %u",
peer->issuer, ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
@ -868,10 +843,7 @@ crypto_recv(
"cook %x ts %u fs %u", peer->pcookie,
ntohl(ep->tstamp), ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -930,10 +902,7 @@ crypto_recv(
bp->key, ntohl(ep->tstamp),
ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -970,10 +939,7 @@ crypto_recv(
OBJ_nid2ln(temp32), temp32,
ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -988,43 +954,32 @@ crypto_recv(
* compare the value timestamps here, as they
* can be updated by different servers.
*/
if ((rval = crypto_verify(ep, NULL, peer)) !=
XEVNT_OK)
rval = crypto_verify(ep, NULL, peer);
if ((rval != XEVNT_OK ) ||
(vallen != 3*sizeof(uint32_t)) )
break;
/*
* If the packet leap values are more recent
* than the stored ones, install the new leap
* values and recompute the signatures.
/* Check if we can update the basic TAI offset
* for our current leap frame. This is a hack
* and ignores the time stamps in the autokey
* message.
*/
if (leapsec_add_fix(ntohl(ep->pkt[0]),
ntohl(ep->pkt[1]),
ntohl(ep->pkt[2]),
NULL))
{
leap_signature_t lsig;
leapsec_getsig(&lsig);
tai_leap.tstamp = ep->tstamp;
tai_leap.fstamp = ep->fstamp;
tai_leap.vallen = ep->vallen;
crypto_update();
mprintf_event(EVNT_TAI, peer,
"%d leap %s expire %s", lsig.taiof,
fstostr(lsig.ttime),
fstostr(lsig.etime));
}
if (sys_leap != LEAP_NOTINSYNC)
leapsec_autokey_tai(ntohl(ep->pkt[0]),
rbufp->recv_time.l_ui, NULL);
tai_leap.tstamp = ep->tstamp;
tai_leap.fstamp = ep->fstamp;
crypto_update();
mprintf_event(EVNT_TAI, peer,
"%d seconds", ntohl(ep->pkt[0]));
peer->crypto |= CRYPTO_FLAG_LEAP;
peer->flash &= ~TEST8;
snprintf(statstr, sizeof(statstr),
"leap TAI offset %d at %u expire %u fs %u",
ntohl(ep->pkt[0]), ntohl(ep->pkt[1]),
ntohl(ep->pkt[2]), ntohl(ep->fstamp));
"leap TAI offset %d at %u expire %u fs %u",
ntohl(ep->pkt[0]), ntohl(ep->pkt[1]),
ntohl(ep->pkt[2]), ntohl(ep->fstamp));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
break;
/*
@ -1073,10 +1028,7 @@ crypto_recv(
"%04x %d %02x %s", htonl(ep->opcode),
associd, rval, eventstr(rval));
record_crypto_stats(&peer->srcadr, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_recv: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_recv: %s\n", statstr));
return (rval);
}
authlen += (len + 3) / 4 * 4;
@ -1421,19 +1373,12 @@ crypto_xmit(
"%04x %d %02x %s", opcode, associd, rval,
eventstr(rval));
record_crypto_stats(srcadr_sin, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_xmit: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_xmit: %s\n", statstr));
if (!(opcode & CRYPTO_RESP))
return (0);
}
#ifdef DEBUG
if (debug)
printf(
"crypto_xmit: flags 0x%x offset %d len %d code 0x%x associd %d\n",
crypto_flags, start, len, opcode >> 16, associd);
#endif
DPRINTF(1, ("crypto_xmit: flags 0x%x offset %d len %d code 0x%x associd %d\n",
crypto_flags, start, len, opcode >> 16, associd));
return (len);
}
@ -1645,8 +1590,10 @@ crypto_encrypt(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, vallen);
if (EVP_SignFinal(&ctx, vp->sig, &vallen, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &vallen, sign_pkey)) {
NTP_INSIST(vallen <= sign_siglen);
vp->siglen = htonl(vallen);
}
return (XEVNT_OK);
}
@ -1858,7 +1805,7 @@ crypto_update(void)
char statstr[NTP_MAXSTRLEN]; /* statistics for filegen */
u_int32 *ptr;
u_int len;
leap_signature_t lsig;
leap_result_t leap_data;
hostval.tstamp = htonl(crypto_time());
if (hostval.tstamp == 0)
@ -1877,8 +1824,10 @@ crypto_update(void)
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&pubkey, 12);
EVP_SignUpdate(&ctx, pubkey.ptr, ntohl(pubkey.vallen));
if (EVP_SignFinal(&ctx, pubkey.sig, &len, sign_pkey))
pubkey.siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, pubkey.sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
pubkey.siglen = htonl(len);
}
}
/*
@ -1896,8 +1845,10 @@ crypto_update(void)
EVP_SignUpdate(&ctx, (u_char *)&cp->cert, 12);
EVP_SignUpdate(&ctx, cp->cert.ptr,
ntohl(cp->cert.vallen));
if (EVP_SignFinal(&ctx, cp->cert.sig, &len, sign_pkey))
cp->cert.siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, cp->cert.sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
cp->cert.siglen = htonl(len);
}
}
/*
@ -1906,33 +1857,86 @@ crypto_update(void)
*/
tai_leap.tstamp = hostval.tstamp;
tai_leap.fstamp = hostval.fstamp;
/* Get the leap second era. We might need a full lookup early
* after start, when the cache is not yet loaded.
*/
leapsec_frame(&leap_data);
if ( ! memcmp(&leap_data.ebase, &leap_data.ttime, sizeof(vint64))) {
time_t now = time(NULL);
uint32_t nowntp = (uint32_t)now + JAN_1970;
leapsec_query(&leap_data, nowntp, &now);
}
/* Create the data block. The protocol does not work without. */
len = 3 * sizeof(u_int32);
if (tai_leap.ptr == NULL)
if (tai_leap.ptr == NULL || ntohl(tai_leap.vallen) != len) {
free(tai_leap.ptr);
tai_leap.ptr = emalloc(len);
tai_leap.vallen = htonl(len);
tai_leap.vallen = htonl(len);
}
ptr = (u_int32 *)tai_leap.ptr;
leapsec_getsig(&lsig);
ptr[0] = htonl(lsig.taiof);
ptr[1] = htonl(lsig.ttime);
ptr[2] = htonl(lsig.etime);
if (leap_data.tai_offs > 10) {
/* create a TAI / leap era block. The end time is a
* fake -- maybe we can do better.
*/
ptr[0] = htonl(leap_data.tai_offs);
ptr[1] = htonl(leap_data.ebase.d_s.lo);
if (leap_data.ttime.d_s.hi >= 0)
ptr[2] = htonl(leap_data.ttime.D_s.lo + 7*86400);
else
ptr[2] = htonl(leap_data.ebase.D_s.lo + 25*86400);
} else {
/* no leap era available */
memset(ptr, 0, len);
}
if (tai_leap.sig == NULL)
tai_leap.sig = emalloc(sign_siglen);
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&tai_leap, 12);
EVP_SignUpdate(&ctx, tai_leap.ptr, len);
if (EVP_SignFinal(&ctx, tai_leap.sig, &len, sign_pkey))
tai_leap.siglen = htonl(sign_siglen);
if (lsig.ttime > 0)
crypto_flags |= CRYPTO_FLAG_TAI;
if (EVP_SignFinal(&ctx, tai_leap.sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
tai_leap.siglen = htonl(len);
}
crypto_flags |= CRYPTO_FLAG_TAI;
snprintf(statstr, sizeof(statstr), "signature update ts %u",
ntohl(hostval.tstamp));
record_crypto_stats(NULL, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_update: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_update: %s\n", statstr));
}
/*
* crypto_update_taichange - eventually trigger crypto_update
*
* This is called when a change in 'sys_tai' is detected. This will
* happen shortly after a leap second is detected, but unhappily also
* early after system start; also, the crypto stuff might be unused and
* an unguarded call to crypto_update() causes a crash.
*
* This function makes sure that there already *is* a valid crypto block
* for the use with autokey, and only calls 'crypto_update()' if it can
* succeed.
*
* Returns void (no errors)
*/
void
crypto_update_taichange(void)
{
static const u_int len = 3 * sizeof(u_int32);
/* check if the signing digest algo is available */
if (sign_digest == NULL || sign_pkey == NULL)
return;
/* check size of TAI extension block */
if (tai_leap.ptr == NULL || ntohl(tai_leap.vallen) != len)
return;
/* crypto_update should at least not crash here! */
crypto_update();
}
/*
* value_free - free value structure components.
@ -2164,8 +2168,10 @@ crypto_alice(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
}
@ -2272,8 +2278,10 @@ crypto_bob(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, vallen);
if (EVP_SignFinal(&ctx, vp->sig, &vallen, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &vallen, sign_pkey)) {
NTP_INSIST(vallen <= sign_siglen);
vp->siglen = htonl(vallen);
}
return (XEVNT_OK);
}
@ -2477,8 +2485,10 @@ crypto_alice2(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
}
@ -2575,8 +2585,10 @@ crypto_bob2(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
}
@ -2804,8 +2816,10 @@ crypto_alice3(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
}
@ -2904,8 +2918,10 @@ crypto_bob3(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
}
@ -3141,8 +3157,10 @@ cert_sign(
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)vp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey))
vp->siglen = htonl(sign_siglen);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
NTP_INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
}
#ifdef DEBUG
if (debug > 1)
@ -3425,11 +3443,8 @@ cert_parse(
ret->flags |= CERT_TRUST;
else if (strcmp(pathbuf, "Private") == 0)
ret->flags |= CERT_PRIV;
#if DEBUG
if (debug)
printf("cert_parse: %s: %s\n",
OBJ_nid2ln(temp), pathbuf);
#endif
DPRINTF(1, ("cert_parse: %s: %s\n",
OBJ_nid2ln(temp), pathbuf));
break;
/*
@ -3440,12 +3455,10 @@ cert_parse(
ret->grpkey = BN_bin2bn(&ext->value->data[2],
ext->value->length - 2, NULL);
/* fall through */
#if DEBUG
default:
if (debug)
printf("cert_parse: %s\n",
OBJ_nid2ln(temp));
#endif
DPRINTF(1, ("cert_parse: %s\n",
OBJ_nid2ln(temp)));
break;
}
}
if (strcmp(ret->subject, ret->issuer) == 0) {
@ -3630,9 +3643,9 @@ crypto_key(
snprintf(statstr, sizeof(statstr), "%s mod %d", &linkname[2],
EVP_PKEY_size(pkey) * 8);
record_crypto_stats(addr, statstr);
DPRINTF(1, ("crypto_key: %s\n", statstr));
#ifdef DEBUG
if (debug)
printf("crypto_key: %s\n", statstr);
if (debug > 1) {
if (pkey->type == EVP_PKEY_DSA)
DSA_print_fp(stdout, pkey->pkey.dsa, 0);
@ -3747,10 +3760,7 @@ crypto_cert(
snprintf(statstr, sizeof(statstr), "%s 0x%x len %lu",
&linkname[2], ret->flags, len);
record_crypto_stats(NULL, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_cert: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_cert: %s\n", statstr));
return (ret);
}
@ -3820,12 +3830,8 @@ crypto_setup(void)
arc4random_buf(&seed, sizeof(l_fp));
RAND_seed(&seed, sizeof(l_fp));
RAND_write_file(randfile);
#ifdef DEBUG
if (debug)
printf(
"crypto_setup: OpenSSL version %lx random seed file %s bytes read %d\n",
SSLeay(), randfile, bytes);
#endif
DPRINTF(1, ("crypto_setup: OpenSSL version %lx random seed file %s bytes read %d\n",
SSLeay(), randfile, bytes));
}
/*
@ -3954,10 +3960,7 @@ crypto_setup(void)
snprintf(statstr, sizeof(statstr), "setup 0x%x host %s %s",
crypto_flags, hostname, OBJ_nid2ln(cinfo->nid));
record_crypto_stats(NULL, statstr);
#ifdef DEBUG
if (debug)
printf("crypto_setup: %s\n", statstr);
#endif
DPRINTF(1, ("crypto_setup: %s\n", statstr));
}
@ -3972,10 +3975,8 @@ crypto_config(
{
int nid;
#ifdef DEBUG
if (debug > 1)
printf("crypto_config: item %d %s\n", item, cp);
#endif
DPRINTF(1, ("crypto_config: item %d %s\n", item, cp));
switch (item) {
/*

View File

@ -73,6 +73,19 @@
extern int listen_to_virtual_ips;
#ifndef IPTOS_DSCP_EF
#define IPTOS_DSCP_EF 0xb8
#endif
int qos = IPTOS_DSCP_EF; /* QoS RFC3246 */
#ifdef LEAP_SMEAR
/* TODO burnicki: This should be moved to ntp_timer.c, but if we do so
* we get a linker error. Since we're running out of time before the leap
* second occurs, we let it here where it just works.
*/
int leap_smear_intv;
#endif
/*
* NIC rule entry
*/
@ -2018,6 +2031,32 @@ update_interfaces(
if (sys_bclient)
io_setbclient();
/*
* Check multicast interfaces and try to join multicast groups if
* not joined yet.
*/
for (ep = ep_list; ep != NULL; ep = ep->elink) {
remaddr_t *entry;
if (!(INT_MCASTIF & ep->flags) || (INT_MCASTOPEN & ep->flags))
continue;
/* Find remote address that was linked to this interface */
for (entry = remoteaddr_list;
entry != NULL;
entry = entry->link) {
if (entry->ep == ep) {
if (socket_multicast_enable(ep, &entry->addr)) {
msyslog(LOG_INFO,
"Joined %s socket to multicast group %s",
stoa(&ep->sin),
stoa(&entry->addr));
}
break;
}
}
}
return new_interface_found;
}
@ -2441,12 +2480,12 @@ socket_multicast_enable(
IP_ADD_MEMBERSHIP,
(char *)&mreq,
sizeof(mreq))) {
msyslog(LOG_ERR,
DPRINTF(2, (
"setsockopt IP_ADD_MEMBERSHIP failed: %m on socket %d, addr %s for %x / %x (%s)",
iface->fd, stoa(&iface->sin),
mreq.imr_multiaddr.s_addr,
mreq.imr_interface.s_addr,
stoa(maddr));
stoa(maddr)));
return ISC_FALSE;
}
DPRINTF(4, ("Added IPv4 multicast membership on socket %d, addr %s for %x / %x (%s)\n",
@ -2471,10 +2510,10 @@ socket_multicast_enable(
if (setsockopt(iface->fd, IPPROTO_IPV6,
IPV6_JOIN_GROUP, (char *)&mreq6,
sizeof(mreq6))) {
msyslog(LOG_ERR,
DPRINTF(2, (
"setsockopt IPV6_JOIN_GROUP failed: %m on socket %d, addr %s for interface %u (%s)",
iface->fd, stoa(&iface->sin),
mreq6.ipv6mr_interface, stoa(maddr));
mreq6.ipv6mr_interface, stoa(maddr)));
return ISC_FALSE;
}
DPRINTF(4, ("Added IPv6 multicast group on socket %d, addr %s for interface %u (%s)\n",
@ -2776,11 +2815,6 @@ io_multicast_add(
"Joined %s socket to multicast group %s",
stoa(&ep->sin),
stoa(addr));
else
msyslog(LOG_ERR,
"Failed to join %s socket to multicast group %s",
stoa(&ep->sin),
stoa(addr));
}
add_addr_to_list(addr, one_ep);
@ -2851,11 +2885,6 @@ open_socket(
int on = 1;
int off = 0;
#ifndef IPTOS_DSCP_EF
#define IPTOS_DSCP_EF 0xb8
#endif
int qos = IPTOS_DSCP_EF; /* QoS RFC3246 */
if (IS_IPV6(addr) && !ipv6_works)
return INVALID_SOCKET;
@ -3585,7 +3614,7 @@ io_handler(void)
else if (debug > 4) {
msyslog(LOG_DEBUG, "select(): nfound=%d, error: %m", nfound);
} else {
DPRINTF(1, ("select() returned %d: %m\n", nfound));
DPRINTF(3, ("select() returned %d: %m\n", nfound));
}
# endif /* DEBUG */
# else /* HAVE_SIGNALED_IO */

File diff suppressed because it is too large Load Diff

View File

@ -89,11 +89,13 @@ static char * get_line(leapsec_reader, void*, char*, size_t);
static char * skipws(const char*);
static int parsefail(const char * cp, const char * ep);
static void reload_limits(leap_table_t*, const vint64*);
static void fetch_leap_era(leap_era_t*, const leap_table_t*,
const vint64*);
static int betweenu32(uint32_t, uint32_t, uint32_t);
static void reset_times(leap_table_t*);
static int leapsec_add(leap_table_t*, const vint64*, int);
static int leapsec_raw(leap_table_t*, const vint64 *, int, int);
static char * lstostr(const vint64 * ts);
static const char * lstostr(const vint64 * ts);
/* =====================================================================
* Get & Set the current leap table
@ -107,8 +109,17 @@ leapsec_get_table(
leap_table_t *p1, *p2;
p1 = _lptr;
p1 = &_ltab[p1 == &_ltab[1]];
p2 = &_ltab[p1 == &_ltab[0]];
if (p1 == &_ltab[0]) {
p2 = &_ltab[1];
} else if (p1 == &_ltab[1]) {
p2 = &_ltab[0];
} else {
p1 = &_ltab[0];
p2 = &_ltab[1];
reset_times(p1);
reset_times(p2);
_lptr = p1;
}
if (alternate) {
memcpy(p2, p1, sizeof(leap_table_t));
p1 = p2;
@ -178,10 +189,15 @@ leapsec_load(
struct calendar build;
leapsec_clear(pt);
if (use_build_limit && ntpcal_get_build_date(&build))
if (use_build_limit && ntpcal_get_build_date(&build)) {
/* don't prune everything -- permit the last 10yrs
* before build.
*/
build.year -= 10;
limit = ntpcal_date_to_ntp64(&build);
else
} else {
memset(&limit, 0, sizeof(limit));
}
while (get_line(func, farg, linebuf, sizeof(linebuf))) {
cp = linebuf;
@ -198,7 +214,7 @@ leapsec_load(
pt->head.update = strtouv64(cp, &ep, 10);
if (parsefail(cp, ep))
goto fail_read;
}
}
} else if (isdigit((u_char)*cp)) {
ttime = strtouv64(cp, &ep, 10);
if (parsefail(cp, ep))
@ -288,7 +304,7 @@ leapsec_query(
* leap era frame.
*/
reload_limits(pt, &ts64);
} else if (ucmpv64(&ts64, &pt->head.dtime) >= 0) {
} else if (ucmpv64(&ts64, &pt->head.dtime) >= 0) {
/* Boundary crossed in forward direction. This might
* indicate a leap transition, so we prepare for that
* case.
@ -296,32 +312,47 @@ leapsec_query(
* Some operations below are actually NOPs in electric
* mode, but having only one code path that works for
* both modes is easier to maintain.
*
* There's another quirk we must keep looking out for:
* If we just stepped the clock, the step might have
* crossed a leap boundary. As with backward steps, we
* do not want to raise the 'fired' event in that case.
* So we raise the 'fired' event only if we're close to
* the transition and just reload the limits otherwise.
*/
last = pt->head.ttime;
qr->warped = (int16_t)(last.D_s.lo -
pt->head.dtime.D_s.lo);
next = addv64i32(&ts64, qr->warped);
reload_limits(pt, &next);
fired = ucmpv64(&pt->head.ebase, &last) == 0;
if (fired) {
ts64 = next;
ts32 = next.D_s.lo;
last = addv64i32(&pt->head.dtime, 3); /* get boundary */
if (ucmpv64(&ts64, &last) >= 0) {
/* that was likely a query after a step */
reload_limits(pt, &ts64);
} else {
qr->warped = 0;
/* close enough for deeper examination */
last = pt->head.ttime;
qr->warped = (int16_t)(last.D_s.lo -
pt->head.dtime.D_s.lo);
next = addv64i32(&ts64, qr->warped);
reload_limits(pt, &next);
fired = ucmpv64(&pt->head.ebase, &last) == 0;
if (fired) {
ts64 = next;
ts32 = next.D_s.lo;
} else {
qr->warped = 0;
}
}
}
qr->tai_offs = pt->head.this_tai;
qr->ebase = pt->head.ebase;
qr->ttime = pt->head.ttime;
/* If before the next scheduling alert, we're done. */
if (ucmpv64(&ts64, &pt->head.stime) < 0)
return fired;
/* now start to collect the remaing data */
/* now start to collect the remaining data */
due32 = pt->head.dtime.D_s.lo;
qr->tai_diff = pt->head.next_tai - pt->head.this_tai;
qr->ttime = pt->head.ttime;
qr->ddist = due32 - ts32;
qr->dynamic = pt->head.dynls;
qr->proximity = LSPROX_SCHEDULE;
@ -329,7 +360,7 @@ leapsec_query(
/* if not in the last day before transition, we're done. */
if (!betweenu32(due32 - SECSPERDAY, ts32, due32))
return fired;
qr->proximity = LSPROX_ANNOUNCE;
if (!betweenu32(due32 - 10, ts32, due32))
return fired;
@ -339,6 +370,22 @@ leapsec_query(
return fired;
}
/* ------------------------------------------------------------------ */
int/*BOOL*/
leapsec_query_era(
leap_era_t * qr ,
uint32_t ntpts,
const time_t * pivot)
{
const leap_table_t * pt;
vint64 ts64;
pt = leapsec_get_table(FALSE);
ts64 = ntpcal_ntp_to_ntp(ntpts, pivot);
fetch_leap_era(qr, pt, &ts64);
return TRUE;
}
/* ------------------------------------------------------------------ */
int/*BOOL*/
leapsec_frame(
@ -348,15 +395,14 @@ leapsec_frame(
memset(qr, 0, sizeof(leap_result_t));
pt = leapsec_get_table(FALSE);
if (ucmpv64(&pt->head.ttime, &pt->head.stime) <= 0)
return FALSE;
qr->tai_offs = pt->head.this_tai;
qr->tai_diff = pt->head.next_tai - pt->head.this_tai;
qr->ebase = pt->head.ebase;
qr->ttime = pt->head.ttime;
qr->dynamic = pt->head.dynls;
return TRUE;
return ucmpv64(&pt->head.ttime, &pt->head.stime) >= 0;
}
/* ------------------------------------------------------------------ */
@ -392,7 +438,7 @@ leapsec_load_stream(
msyslog(LOG_NOTICE, "%s ('%s'): good hash signature",
logPrefix, fname);
break;
case LSVALID_NOHASH:
msyslog(LOG_ERR, "%s ('%s'): no hash signature",
logPrefix, fname);
@ -442,7 +488,7 @@ leapsec_load_stream(
"%s ('%s'): loaded, expire=%s ofs=%d (no entries after build date)",
logPrefix, fname, lstostr(&pt->head.expire),
pt->head.base_tai);
return leapsec_set_table(pt);
}
@ -461,7 +507,7 @@ leapsec_load_file(
/* just do nothing if there is no leap file */
if ( !(fname && *fname) )
return FALSE;
/* try to stat the leapfile */
if (0 != stat(fname, &sb_new)) {
if (logall)
@ -551,6 +597,7 @@ leapsec_daystolive(
}
/* ------------------------------------------------------------------ */
#if 0 /* currently unused -- possibly revived later */
int/*BOOL*/
leapsec_add_fix(
int total,
@ -566,7 +613,7 @@ leapsec_add_fix(
time(&tpiv);
pivot = &tpiv;
}
et64 = ntpcal_ntp_to_ntp(etime, pivot);
tt64 = ntpcal_ntp_to_ntp(ttime, pivot);
pt = leapsec_get_table(TRUE);
@ -583,6 +630,7 @@ leapsec_add_fix(
return leapsec_set_table(pt);
}
#endif
/* ------------------------------------------------------------------ */
int/*BOOL*/
@ -600,6 +648,71 @@ leapsec_add_dyn(
&& leapsec_set_table(pt));
}
/* ------------------------------------------------------------------ */
int/*BOOL*/
leapsec_autokey_tai(
int tai_offset,
uint32_t ntpnow ,
const time_t * pivot )
{
leap_table_t * pt;
leap_era_t era;
vint64 now64;
int idx;
(void)tai_offset;
pt = leapsec_get_table(FALSE);
/* Bail out if the basic offset is not zero and the putative
* offset is bigger than 10s. That was in 1972 -- we don't want
* to go back that far!
*/
if (pt->head.base_tai != 0 || tai_offset < 10)
return FALSE;
/* If there's already data in the table, check if an update is
* possible. Update is impossible if there are static entries
* (since this indicates a valid leapsecond file) or if we're
* too close to a leapsecond transition: We do not know on what
* side the transition the sender might have been, so we use a
* dead zone around the transition.
*/
/* Check for static entries */
for (idx = 0; idx != pt->head.size; idx++)
if ( ! pt->info[idx].dynls)
return FALSE;
/* get the fulll time stamp and leap era for it */
now64 = ntpcal_ntp_to_ntp(ntpnow, pivot);
fetch_leap_era(&era, pt, &now64);
/* check the limits with 20s dead band */
era.ebase = addv64i32(&era.ebase, 20);
if (ucmpv64(&now64, &era.ebase) < 0)
return FALSE;
era.ttime = addv64i32(&era.ttime, -20);
if (ucmpv64(&now64, &era.ttime) > 0)
return FALSE;
/* Here we can proceed. Calculate the delta update. */
tai_offset -= era.taiof;
/* Shift the header info offsets. */
pt->head.base_tai += tai_offset;
pt->head.this_tai += tai_offset;
pt->head.next_tai += tai_offset;
/* Shift table entry offsets (if any) */
for (idx = 0; idx != pt->head.size; idx++)
pt->info[idx].taiof += tai_offset;
/* claim success... */
return TRUE;
}
/* =====================================================================
* internal helpers
*/
@ -630,15 +743,21 @@ add_range(
const leap_info_t * pi)
{
/* If the table is full, make room by throwing out the oldest
* entry. But remember the accumulated leap seconds!
* entry. But remember the accumulated leap seconds! Likewise,
* assume a positive leap insertion if this is the first entry
* in the table. This is not necessarily the best of all ideas,
* but it helps a great deal if a system does not have a leap
* table and gets updated from an upstream server.
*/
if (pt->head.size >= MAX_HIST) {
if (pt->head.size == 0) {
pt->head.base_tai = pi->taiof - 1;
} else if (pt->head.size >= MAX_HIST) {
pt->head.size = MAX_HIST - 1;
pt->head.base_tai = pt->info[pt->head.size].taiof;
}
/* make room in lower end and insert item */
memmove(pt->info+1, pt->info, pt->head.size*sizeof(*pt->info));
memmove(pt->info+1, pt->info, pt->head.size*sizeof(*pt->info));
pt->info[0] = *pi;
pt->head.size++;
@ -670,7 +789,7 @@ get_line(
{
int ch;
char *ptr;
/* if we cannot even store the delimiter, declare failure */
if (buff == NULL || size == 0)
return NULL;
@ -698,7 +817,7 @@ skipws(
return (char*)noconst(ptr);
}
/* [internal] check if a strtoXYZ ended at EOL or whistespace and
/* [internal] check if a strtoXYZ ended at EOL or whitespace and
* converted something at all. Return TRUE if something went wrong.
*/
static int/*BOOL*/
@ -758,7 +877,7 @@ reload_limits(
pt->head.dtime = addv64i32(
&pt->head.ttime,
pt->head.next_tai - pt->head.this_tai);
pt->head.stime = subv64u32(
&pt->head.ttime, pt->info[idx].stime);
@ -771,6 +890,37 @@ reload_limits(
}
}
/* [internal] fetch the leap era for a given time stamp.
* This is a cut-down version the algorithm used to reload the table
* limits, but it does not update any global state and provides just the
* era information for a given time stamp.
*/
static void
fetch_leap_era(
leap_era_t * into,
const leap_table_t * pt ,
const vint64 * ts )
{
int idx;
/* Simple search loop, also works with empty table. */
for (idx = 0; idx != pt->head.size; idx++)
if (ucmpv64(ts, &pt->info[idx].ttime) >= 0)
break;
/* fetch era data, keeping an eye on boundary conditions */
if (idx >= pt->head.size) {
memset(&into->ebase, 0x00, sizeof(vint64));
into->taiof = pt->head.base_tai;
} else {
into->ebase = pt->info[idx].ttime;
into->taiof = pt->info[idx].taiof;
}
if (--idx >= 0)
into->ttime = pt->info[idx].ttime;
else
memset(&into->ttime, 0xFF, sizeof(vint64));
}
/* [internal] Take a time stamp and create a leap second frame for
* it. This will schedule a leap second for the beginning of the next
* month, midnight UTC. The 'insert' argument tells if a leap second is
@ -791,7 +941,7 @@ leapsec_add(
struct calendar fts;
leap_info_t li;
/* Check against the table expiration and the lates available
/* Check against the table expiration and the latest available
* leap entry. Do not permit inserts, only appends, and only if
* the extend the table beyond the expiration!
*/
@ -843,10 +993,22 @@ leapsec_raw(
struct calendar fts;
leap_info_t li;
/* Check that we only extend the table. Paranoia rulez! */
if (pt->head.size && ucmpv64(ttime, &pt->info[0].ttime) <= 0) {
errno = ERANGE;
return FALSE;
/* Check that we either extend the table or get a duplicate of
* the latest entry. The latter is a benevolent overwrite with
* identical data and could happen if we get an autokey message
* that extends the lifetime of the current leapsecond table.
* Otherwise paranoia rulez!
*/
if (pt->head.size) {
int cmp = ucmpv64(ttime, &pt->info[0].ttime);
if (cmp == 0)
cmp -= (taiof != pt->info[0].taiof);
if (cmp < 0) {
errno = ERANGE;
return FALSE;
}
if (cmp == 0)
return TRUE;
}
ntpcal_ntp64_to_date(&fts, ttime);
@ -856,7 +1018,7 @@ leapsec_raw(
return FALSE;
}
fts.month--; /* was in range 1..12, no overflow here! */
starttime = ntpcal_date_to_ntp64(&fts);
starttime = ntpcal_date_to_ntp64(&fts);
li.ttime = *ttime;
li.stime = ttime->D_s.lo - starttime.D_s.lo;
li.taiof = (int16_t)taiof;
@ -947,7 +1109,7 @@ do_hash_data(
isc_sha1_update(
mdctx, text, sizeof(text));
}
if (0 < tlen)
isc_sha1_update(mdctx, text, tlen);
}
@ -991,20 +1153,34 @@ leapsec_validate(
/*
* lstostr - prettyprint NTP seconds
*/
static char * lstostr(
static const char *
lstostr(
const vint64 * ts)
{
char * buf;
struct calendar tm;
LIB_GETBUF(buf);
ntpcal_ntp64_to_date(&tm, ts);
snprintf(buf, LIB_BUFLENGTH, "%04d-%02d-%02dT%02d:%02dZ",
tm.year, tm.month, tm.monthday,
tm.hour, tm.minute);
if ( ! (ts->d_s.hi >= 0 && ntpcal_ntp64_to_date(&tm, ts) >= 0))
snprintf(buf, LIB_BUFLENGTH, "%s", "9999-12-31T23:59:59Z");
else
snprintf(buf, LIB_BUFLENGTH, "%04d-%02d-%02dT%02d:%02d:%02dZ",
tm.year, tm.month, tm.monthday,
tm.hour, tm.minute, tm.second);
return buf;
}
/* reset the global state for unit tests */
void
leapsec_ut_pristine(void)
{
memset(_ltab, 0, sizeof(_ltab));
_lptr = NULL;
_electric = 0;
}
/* -*- that's all folks! -*- */

View File

@ -61,16 +61,27 @@ extern int leapsec_validate(leapsec_reader, void*);
*/
extern int/*BOOL*/ leapsec_electric(int/*BOOL*/ on);
/* Query result for a leap era. This is the minimal stateless
* information available for a time stamp in UTC.
*/
struct leap_era {
vint64 ebase; /* era base (UTC of start) */
vint64 ttime; /* era end (UTC of next leap second) */
int16_t taiof; /* offset to TAI in this era */
};
typedef struct leap_era leap_era_t;
/* Query result for a leap second schedule
* 'ttime' is the transition point in full time scale, but only if
* 'tai_diff' is not zero. Nominal UTC time when the next leap
* era starts.
* 'ebase' is the nominal UTC time when the current leap era
* started. (Era base time)
* 'ttime' is the next transition point in full time scale. (Nominal UTC
* time when the next leap era starts.)
* 'ddist' is the distance to the transition, in clock seconds.
* This is the distance to the due time, which is different
* from the transition time if the mode is non-electric.
* Only valid if 'tai_diff' is not zero.
* 'tai_offs' is the CURRENT distance from clock (UTC) to TAI. Always valid.
* 'tai_offs' is the CURRENT distance from clock (UTC) to TAI. Always
* valid.
* 'tai_diff' is the change in TAI offset after the next leap
* transition. Zero if nothing is pending or too far ahead.
* 'warped' is set only once, when the the leap second occurred between
@ -79,8 +90,9 @@ extern int/*BOOL*/ leapsec_electric(int/*BOOL*/ on);
* 'proximity' is a proximity warning. See definitions below. This is
* more useful than an absolute difference to the leap second.
* 'dynamic' != 0 if entry was requested by clock/peer
*/
*/
struct leap_result {
vint64 ebase;
vint64 ttime;
uint32_t ddist;
int16_t tai_offs;
@ -91,6 +103,15 @@ struct leap_result {
};
typedef struct leap_result leap_result_t;
/* The leap signature is used in two distinct circumstances, and it has
* slightly different content in these cases:
* - it is used to indictae the time range covered by the leap second
* table, and then it contains the last transition, TAI offset after
* the final transition, and the expiration time.
* - it is used to query data for AUTOKEY updates, and then it contains
* the *current* TAI offset, the *next* transition time and the
* expiration time of the table.
*/
struct leap_signature {
uint32_t etime; /* expiration time */
uint32_t ttime; /* transition time */
@ -99,6 +120,24 @@ struct leap_signature {
typedef struct leap_signature leap_signature_t;
#ifdef LEAP_SMEAR
struct leap_smear_info {
int enabled; /* not 0 if smearing is generally enabled */
int in_progress; /* not 0 if smearing is in progress, i.e. the offset has been computed */
int leap_occurred; /* not 0 if the leap second has already occurred, i.e., during the leap second */
double doffset; /* the current smear offset as double */
l_fp offset; /* the current smear offset */
uint32_t t_offset; /* the current time for which a smear offset has been computed */
long interval; /* smear interval, in [s], should be at least some hours */
double intv_start; /* start time of the smear interval */
double intv_end; /* end time of the smear interval */
};
typedef struct leap_smear_info leap_smear_info_t;
#endif /* LEAP_SMEAR */
#define LSPROX_NOWARN 0 /* clear radar screen */
#define LSPROX_SCHEDULE 1 /* less than 1 month to target*/
#define LSPROX_ANNOUNCE 2 /* less than 1 day to target */
@ -170,6 +209,7 @@ extern int32_t leapsec_daystolive(uint32_t when, const time_t * pivot);
*/
extern void leapsec_reset_frame(void);
#if 0 /* currently unused -- possibly revived later */
/* Given a transition time, the TAI offset valid after that and an
* expiration time, try to establish a system leap transition. Only
* works if the existing table is extended. On success, updates the
@ -177,6 +217,7 @@ extern void leapsec_reset_frame(void);
*/
extern int/*BOOL*/ leapsec_add_fix(int offset, uint32_t ttime, uint32_t etime,
const time_t * pivot);
#endif
/* Take a time stamp and create a leap second frame for it. This will
* schedule a leap second for the beginning of the next month, midnight
@ -200,9 +241,15 @@ extern int/*BOOL*/ leapsec_add_dyn(int/*BOOL*/ insert, uint32_t ntp_now,
* last and the current query. In that case, qr->warped contains the
* required clock stepping, which is always zero in electric mode.
*/
extern int/*BOOL*/ leapsec_query(leap_result_t *qr, uint32_t ntpts,
extern int/*BOOL*/ leapsec_query(leap_result_t * qr, uint32_t ntpts,
const time_t * pivot);
/* For a given time stamp, fetch the data for the bracketing leap
* era. The time stamp is subject to NTP era unfolding.
*/
extern int/*BOOL*/ leapsec_query_era(leap_era_t * qr, uint32_t ntpts,
const time_t * pivot);
/* Get the current leap frame info. Returns TRUE if the result contains
* useable data, FALSE if there is currently no leap second frame.
* This merely replicates some results from a previous query, but since
@ -215,4 +262,15 @@ extern int/*BOOL*/ leapsec_query(leap_result_t *qr, uint32_t ntpts,
*/
extern int/*BOOL*/ leapsec_frame(leap_result_t *qr);
/* Process a AUTOKEY TAI offset information. This *might* augment the
* current leap data table with the given TAI offset.
* Returns TRUE if action was taken, FALSE otherwise.
*/
extern int/*BOOL*/ leapsec_autokey_tai(int tai_offset, uint32_t ntpnow,
const time_t * pivot);
/* reset global state for unit tests */
extern void leapsec_ut_pristine(void);
#endif /* !defined(NTP_LEAPSEC_H) */

View File

@ -246,6 +246,8 @@ ntp_adjtime_error_handler(
int line /* line number of ntp_adjtime call */
)
{
char des[1024] = ""; /* Decoded Error Status */
switch (ret) {
case -1:
switch (saved_errno) {
@ -317,14 +319,88 @@ ntp_adjtime_error_handler(
# warning TIME_WAIT is not defined
#endif
#ifdef TIME_ERROR
#if 0
from the reference implementation of ntp_gettime():
// Hardware or software error
if ((time_status & (STA_UNSYNC | STA_CLOCKERR))
/*
* PPS signal lost when either time or frequency synchronization
* requested
*/
|| (time_status & (STA_PPSFREQ | STA_PPSTIME)
&& !(time_status & STA_PPSSIGNAL))
/*
* PPS jitter exceeded when time synchronization requested
*/
|| (time_status & STA_PPSTIME &&
time_status & STA_PPSJITTER)
/*
* PPS wander exceeded or calibration error when frequency
* synchronization requested
*/
|| (time_status & STA_PPSFREQ &&
time_status & (STA_PPSWANDER | STA_PPSERROR)))
return (TIME_ERROR);
or, from ntp_adjtime():
if ( (time_status & (STA_UNSYNC | STA_CLOCKERR))
|| (time_status & (STA_PPSFREQ | STA_PPSTIME)
&& !(time_status & STA_PPSSIGNAL))
|| (time_status & STA_PPSTIME
&& time_status & STA_PPSJITTER)
|| (time_status & STA_PPSFREQ
&& time_status & (STA_PPSWANDER | STA_PPSERROR))
)
return (TIME_ERROR);
#endif
case TIME_ERROR: /* 5: unsynchronized, or loss of synchronization */
/* error (see status word) */
if (ptimex->status & STA_UNSYNC)
snprintf(des, sizeof(des), "%s%sClock Unsynchronized",
des, (*des) ? "; " : "");
if (ptimex->status & STA_CLOCKERR)
snprintf(des, sizeof(des), "%s%sClock Error",
des, (*des) ? "; " : "");
if (!(ptimex->status & STA_PPSSIGNAL)
&& ptimex->status & STA_PPSFREQ)
snprintf(des, sizeof(des), "%s%sPPS Frequency Sync wanted but no PPS",
des, (*des) ? "; " : "");
if (!(ptimex->status & STA_PPSSIGNAL)
&& ptimex->status & STA_PPSTIME)
snprintf(des, sizeof(des), "%s%sPPS Time Sync wanted but no PPS signal",
des, (*des) ? "; " : "");
if ( ptimex->status & STA_PPSTIME
&& ptimex->status & STA_PPSJITTER)
snprintf(des, sizeof(des), "%s%sPPS Time Sync wanted but PPS Jitter exceeded",
des, (*des) ? "; " : "");
if ( ptimex->status & STA_PPSFREQ
&& ptimex->status & STA_PPSWANDER)
snprintf(des, sizeof(des), "%s%sPPS Frequency Sync wanted but PPS Wander exceeded",
des, (*des) ? "; " : "");
if ( ptimex->status & STA_PPSFREQ
&& ptimex->status & STA_PPSERROR)
snprintf(des, sizeof(des), "%s%sPPS Frequency Sync wanted but Calibration error detected",
des, (*des) ? "; " : "");
if (pps_call && !(ptimex->status & STA_PPSSIGNAL))
report_event(EVNT_KERN, NULL,
"PPS no signal");
errno = saved_errno;
DPRINTF(1, ("kernel loop status (%s) %d %m\n",
k_st_flags(ptimex->status), errno));
"no PPS signal");
DPRINTF(1, ("kernel loop status %#x (%s)\n",
ptimex->status, des));
/*
* This code may be returned when ntp_adjtime() has just
* been called for the first time, quite a while after
@ -339,15 +415,14 @@ ntp_adjtime_error_handler(
* or ???
* msyslog(LOG_INFO, "kernel reports time synchronization lost");
*/
errno = saved_errno; /* may not be needed */
msyslog(LOG_INFO, "kernel reports TIME_ERROR: %#x: %s %m",
ptimex->status, k_st_flags(ptimex->status));
msyslog(LOG_INFO, "kernel reports TIME_ERROR: %#x: %s",
ptimex->status, des);
break;
#else
# warning TIME_ERROR is not defined
#endif
default:
msyslog(LOG_NOTICE, "%s: %s line %d: unhandled return value %d from ntp_adjtime in %s at line %d",
msyslog(LOG_NOTICE, "%s: %s line %d: unhandled return value %d from ntp_adjtime() in %s at line %d",
caller, file_name(), line,
ret,
__func__, __LINE__

View File

@ -183,7 +183,7 @@ mon_getmoremem(void)
: mru_incalloc;
if (entries) {
chunk = emalloc(entries * sizeof(*chunk));
chunk = eallocarray(entries, sizeof(*chunk));
mru_alloc += entries;
for (chunk += entries; entries; entries--)
mon_free_entry(--chunk);

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,19 @@
/* A Bison parser, made by GNU Bison 3.0.2. */
/* A Bison parser, made by GNU Bison 2.7.12-4996. */
/* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@ -26,13 +26,13 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
#ifndef YY_YY_NTP_PARSER_H_INCLUDED
# define YY_YY_NTP_PARSER_H_INCLUDED
/* Debug traces. */
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
@ -40,201 +40,204 @@
extern int yydebug;
#endif
/* Token type. */
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
T_Abbrev = 258,
T_Age = 259,
T_All = 260,
T_Allan = 261,
T_Allpeers = 262,
T_Auth = 263,
T_Autokey = 264,
T_Automax = 265,
T_Average = 266,
T_Bclient = 267,
T_Beacon = 268,
T_Broadcast = 269,
T_Broadcastclient = 270,
T_Broadcastdelay = 271,
T_Burst = 272,
T_Calibrate = 273,
T_Ceiling = 274,
T_Clockstats = 275,
T_Cohort = 276,
T_ControlKey = 277,
T_Crypto = 278,
T_Cryptostats = 279,
T_Ctl = 280,
T_Day = 281,
T_Default = 282,
T_Digest = 283,
T_Disable = 284,
T_Discard = 285,
T_Dispersion = 286,
T_Double = 287,
T_Driftfile = 288,
T_Drop = 289,
T_Ellipsis = 290,
T_Enable = 291,
T_End = 292,
T_False = 293,
T_File = 294,
T_Filegen = 295,
T_Filenum = 296,
T_Flag1 = 297,
T_Flag2 = 298,
T_Flag3 = 299,
T_Flag4 = 300,
T_Flake = 301,
T_Floor = 302,
T_Freq = 303,
T_Fudge = 304,
T_Host = 305,
T_Huffpuff = 306,
T_Iburst = 307,
T_Ident = 308,
T_Ignore = 309,
T_Incalloc = 310,
T_Incmem = 311,
T_Initalloc = 312,
T_Initmem = 313,
T_Includefile = 314,
T_Integer = 315,
T_Interface = 316,
T_Intrange = 317,
T_Io = 318,
T_Ipv4 = 319,
T_Ipv4_flag = 320,
T_Ipv6 = 321,
T_Ipv6_flag = 322,
T_Kernel = 323,
T_Key = 324,
T_Keys = 325,
T_Keysdir = 326,
T_Kod = 327,
T_Mssntp = 328,
T_Leapfile = 329,
T_Limited = 330,
T_Link = 331,
T_Listen = 332,
T_Logconfig = 333,
T_Logfile = 334,
T_Loopstats = 335,
T_Lowpriotrap = 336,
T_Manycastclient = 337,
T_Manycastserver = 338,
T_Mask = 339,
T_Maxage = 340,
T_Maxclock = 341,
T_Maxdepth = 342,
T_Maxdist = 343,
T_Maxmem = 344,
T_Maxpoll = 345,
T_Mdnstries = 346,
T_Mem = 347,
T_Memlock = 348,
T_Minclock = 349,
T_Mindepth = 350,
T_Mindist = 351,
T_Minimum = 352,
T_Minpoll = 353,
T_Minsane = 354,
T_Mode = 355,
T_Mode7 = 356,
T_Monitor = 357,
T_Month = 358,
T_Mru = 359,
T_Multicastclient = 360,
T_Nic = 361,
T_Nolink = 362,
T_Nomodify = 363,
T_Nomrulist = 364,
T_None = 365,
T_Nonvolatile = 366,
T_Nopeer = 367,
T_Noquery = 368,
T_Noselect = 369,
T_Noserve = 370,
T_Notrap = 371,
T_Notrust = 372,
T_Ntp = 373,
T_Ntpport = 374,
T_NtpSignDsocket = 375,
T_Orphan = 376,
T_Orphanwait = 377,
T_Panic = 378,
T_Peer = 379,
T_Peerstats = 380,
T_Phone = 381,
T_Pid = 382,
T_Pidfile = 383,
T_Pool = 384,
T_Port = 385,
T_Preempt = 386,
T_Prefer = 387,
T_Protostats = 388,
T_Pw = 389,
T_Randfile = 390,
T_Rawstats = 391,
T_Refid = 392,
T_Requestkey = 393,
T_Reset = 394,
T_Restrict = 395,
T_Revoke = 396,
T_Rlimit = 397,
T_Saveconfigdir = 398,
T_Server = 399,
T_Setvar = 400,
T_Source = 401,
T_Stacksize = 402,
T_Statistics = 403,
T_Stats = 404,
T_Statsdir = 405,
T_Step = 406,
T_Stepback = 407,
T_Stepfwd = 408,
T_Stepout = 409,
T_Stratum = 410,
T_String = 411,
T_Sys = 412,
T_Sysstats = 413,
T_Tick = 414,
T_Time1 = 415,
T_Time2 = 416,
T_Timer = 417,
T_Timingstats = 418,
T_Tinker = 419,
T_Tos = 420,
T_Trap = 421,
T_True = 422,
T_Trustedkey = 423,
T_Ttl = 424,
T_Type = 425,
T_U_int = 426,
T_Unconfig = 427,
T_Unpeer = 428,
T_Version = 429,
T_WanderThreshold = 430,
T_Week = 431,
T_Wildcard = 432,
T_Xleave = 433,
T_Year = 434,
T_Flag = 435,
T_EOC = 436,
T_Simulate = 437,
T_Beep_Delay = 438,
T_Sim_Duration = 439,
T_Server_Offset = 440,
T_Duration = 441,
T_Freq_Offset = 442,
T_Wander = 443,
T_Jitter = 444,
T_Prop_Delay = 445,
T_Proc_Delay = 446
};
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
T_Abbrev = 258,
T_Age = 259,
T_All = 260,
T_Allan = 261,
T_Allpeers = 262,
T_Auth = 263,
T_Autokey = 264,
T_Automax = 265,
T_Average = 266,
T_Bclient = 267,
T_Beacon = 268,
T_Broadcast = 269,
T_Broadcastclient = 270,
T_Broadcastdelay = 271,
T_Burst = 272,
T_Calibrate = 273,
T_Ceiling = 274,
T_Clockstats = 275,
T_Cohort = 276,
T_ControlKey = 277,
T_Crypto = 278,
T_Cryptostats = 279,
T_Ctl = 280,
T_Day = 281,
T_Default = 282,
T_Digest = 283,
T_Disable = 284,
T_Discard = 285,
T_Dispersion = 286,
T_Double = 287,
T_Driftfile = 288,
T_Drop = 289,
T_Dscp = 290,
T_Ellipsis = 291,
T_Enable = 292,
T_End = 293,
T_False = 294,
T_File = 295,
T_Filegen = 296,
T_Filenum = 297,
T_Flag1 = 298,
T_Flag2 = 299,
T_Flag3 = 300,
T_Flag4 = 301,
T_Flake = 302,
T_Floor = 303,
T_Freq = 304,
T_Fudge = 305,
T_Host = 306,
T_Huffpuff = 307,
T_Iburst = 308,
T_Ident = 309,
T_Ignore = 310,
T_Incalloc = 311,
T_Incmem = 312,
T_Initalloc = 313,
T_Initmem = 314,
T_Includefile = 315,
T_Integer = 316,
T_Interface = 317,
T_Intrange = 318,
T_Io = 319,
T_Ipv4 = 320,
T_Ipv4_flag = 321,
T_Ipv6 = 322,
T_Ipv6_flag = 323,
T_Kernel = 324,
T_Key = 325,
T_Keys = 326,
T_Keysdir = 327,
T_Kod = 328,
T_Mssntp = 329,
T_Leapfile = 330,
T_Leapsmearinterval = 331,
T_Limited = 332,
T_Link = 333,
T_Listen = 334,
T_Logconfig = 335,
T_Logfile = 336,
T_Loopstats = 337,
T_Lowpriotrap = 338,
T_Manycastclient = 339,
T_Manycastserver = 340,
T_Mask = 341,
T_Maxage = 342,
T_Maxclock = 343,
T_Maxdepth = 344,
T_Maxdist = 345,
T_Maxmem = 346,
T_Maxpoll = 347,
T_Mdnstries = 348,
T_Mem = 349,
T_Memlock = 350,
T_Minclock = 351,
T_Mindepth = 352,
T_Mindist = 353,
T_Minimum = 354,
T_Minpoll = 355,
T_Minsane = 356,
T_Mode = 357,
T_Mode7 = 358,
T_Monitor = 359,
T_Month = 360,
T_Mru = 361,
T_Multicastclient = 362,
T_Nic = 363,
T_Nolink = 364,
T_Nomodify = 365,
T_Nomrulist = 366,
T_None = 367,
T_Nonvolatile = 368,
T_Nopeer = 369,
T_Noquery = 370,
T_Noselect = 371,
T_Noserve = 372,
T_Notrap = 373,
T_Notrust = 374,
T_Ntp = 375,
T_Ntpport = 376,
T_NtpSignDsocket = 377,
T_Orphan = 378,
T_Orphanwait = 379,
T_Panic = 380,
T_Peer = 381,
T_Peerstats = 382,
T_Phone = 383,
T_Pid = 384,
T_Pidfile = 385,
T_Pool = 386,
T_Port = 387,
T_Preempt = 388,
T_Prefer = 389,
T_Protostats = 390,
T_Pw = 391,
T_Randfile = 392,
T_Rawstats = 393,
T_Refid = 394,
T_Requestkey = 395,
T_Reset = 396,
T_Restrict = 397,
T_Revoke = 398,
T_Rlimit = 399,
T_Saveconfigdir = 400,
T_Server = 401,
T_Setvar = 402,
T_Source = 403,
T_Stacksize = 404,
T_Statistics = 405,
T_Stats = 406,
T_Statsdir = 407,
T_Step = 408,
T_Stepback = 409,
T_Stepfwd = 410,
T_Stepout = 411,
T_Stratum = 412,
T_String = 413,
T_Sys = 414,
T_Sysstats = 415,
T_Tick = 416,
T_Time1 = 417,
T_Time2 = 418,
T_Timer = 419,
T_Timingstats = 420,
T_Tinker = 421,
T_Tos = 422,
T_Trap = 423,
T_True = 424,
T_Trustedkey = 425,
T_Ttl = 426,
T_Type = 427,
T_U_int = 428,
T_Unconfig = 429,
T_Unpeer = 430,
T_Version = 431,
T_WanderThreshold = 432,
T_Week = 433,
T_Wildcard = 434,
T_Xleave = 435,
T_Year = 436,
T_Flag = 437,
T_EOC = 438,
T_Simulate = 439,
T_Beep_Delay = 440,
T_Sim_Duration = 441,
T_Server_Offset = 442,
T_Duration = 443,
T_Freq_Offset = 444,
T_Wander = 445,
T_Jitter = 446,
T_Prop_Delay = 447,
T_Proc_Delay = 448
};
#endif
/* Tokens. */
#define T_Abbrev 258
@ -269,170 +272,173 @@ extern int yydebug;
#define T_Double 287
#define T_Driftfile 288
#define T_Drop 289
#define T_Ellipsis 290
#define T_Enable 291
#define T_End 292
#define T_False 293
#define T_File 294
#define T_Filegen 295
#define T_Filenum 296
#define T_Flag1 297
#define T_Flag2 298
#define T_Flag3 299
#define T_Flag4 300
#define T_Flake 301
#define T_Floor 302
#define T_Freq 303
#define T_Fudge 304
#define T_Host 305
#define T_Huffpuff 306
#define T_Iburst 307
#define T_Ident 308
#define T_Ignore 309
#define T_Incalloc 310
#define T_Incmem 311
#define T_Initalloc 312
#define T_Initmem 313
#define T_Includefile 314
#define T_Integer 315
#define T_Interface 316
#define T_Intrange 317
#define T_Io 318
#define T_Ipv4 319
#define T_Ipv4_flag 320
#define T_Ipv6 321
#define T_Ipv6_flag 322
#define T_Kernel 323
#define T_Key 324
#define T_Keys 325
#define T_Keysdir 326
#define T_Kod 327
#define T_Mssntp 328
#define T_Leapfile 329
#define T_Limited 330
#define T_Link 331
#define T_Listen 332
#define T_Logconfig 333
#define T_Logfile 334
#define T_Loopstats 335
#define T_Lowpriotrap 336
#define T_Manycastclient 337
#define T_Manycastserver 338
#define T_Mask 339
#define T_Maxage 340
#define T_Maxclock 341
#define T_Maxdepth 342
#define T_Maxdist 343
#define T_Maxmem 344
#define T_Maxpoll 345
#define T_Mdnstries 346
#define T_Mem 347
#define T_Memlock 348
#define T_Minclock 349
#define T_Mindepth 350
#define T_Mindist 351
#define T_Minimum 352
#define T_Minpoll 353
#define T_Minsane 354
#define T_Mode 355
#define T_Mode7 356
#define T_Monitor 357
#define T_Month 358
#define T_Mru 359
#define T_Multicastclient 360
#define T_Nic 361
#define T_Nolink 362
#define T_Nomodify 363
#define T_Nomrulist 364
#define T_None 365
#define T_Nonvolatile 366
#define T_Nopeer 367
#define T_Noquery 368
#define T_Noselect 369
#define T_Noserve 370
#define T_Notrap 371
#define T_Notrust 372
#define T_Ntp 373
#define T_Ntpport 374
#define T_NtpSignDsocket 375
#define T_Orphan 376
#define T_Orphanwait 377
#define T_Panic 378
#define T_Peer 379
#define T_Peerstats 380
#define T_Phone 381
#define T_Pid 382
#define T_Pidfile 383
#define T_Pool 384
#define T_Port 385
#define T_Preempt 386
#define T_Prefer 387
#define T_Protostats 388
#define T_Pw 389
#define T_Randfile 390
#define T_Rawstats 391
#define T_Refid 392
#define T_Requestkey 393
#define T_Reset 394
#define T_Restrict 395
#define T_Revoke 396
#define T_Rlimit 397
#define T_Saveconfigdir 398
#define T_Server 399
#define T_Setvar 400
#define T_Source 401
#define T_Stacksize 402
#define T_Statistics 403
#define T_Stats 404
#define T_Statsdir 405
#define T_Step 406
#define T_Stepback 407
#define T_Stepfwd 408
#define T_Stepout 409
#define T_Stratum 410
#define T_String 411
#define T_Sys 412
#define T_Sysstats 413
#define T_Tick 414
#define T_Time1 415
#define T_Time2 416
#define T_Timer 417
#define T_Timingstats 418
#define T_Tinker 419
#define T_Tos 420
#define T_Trap 421
#define T_True 422
#define T_Trustedkey 423
#define T_Ttl 424
#define T_Type 425
#define T_U_int 426
#define T_Unconfig 427
#define T_Unpeer 428
#define T_Version 429
#define T_WanderThreshold 430
#define T_Week 431
#define T_Wildcard 432
#define T_Xleave 433
#define T_Year 434
#define T_Flag 435
#define T_EOC 436
#define T_Simulate 437
#define T_Beep_Delay 438
#define T_Sim_Duration 439
#define T_Server_Offset 440
#define T_Duration 441
#define T_Freq_Offset 442
#define T_Wander 443
#define T_Jitter 444
#define T_Prop_Delay 445
#define T_Proc_Delay 446
#define T_Dscp 290
#define T_Ellipsis 291
#define T_Enable 292
#define T_End 293
#define T_False 294
#define T_File 295
#define T_Filegen 296
#define T_Filenum 297
#define T_Flag1 298
#define T_Flag2 299
#define T_Flag3 300
#define T_Flag4 301
#define T_Flake 302
#define T_Floor 303
#define T_Freq 304
#define T_Fudge 305
#define T_Host 306
#define T_Huffpuff 307
#define T_Iburst 308
#define T_Ident 309
#define T_Ignore 310
#define T_Incalloc 311
#define T_Incmem 312
#define T_Initalloc 313
#define T_Initmem 314
#define T_Includefile 315
#define T_Integer 316
#define T_Interface 317
#define T_Intrange 318
#define T_Io 319
#define T_Ipv4 320
#define T_Ipv4_flag 321
#define T_Ipv6 322
#define T_Ipv6_flag 323
#define T_Kernel 324
#define T_Key 325
#define T_Keys 326
#define T_Keysdir 327
#define T_Kod 328
#define T_Mssntp 329
#define T_Leapfile 330
#define T_Leapsmearinterval 331
#define T_Limited 332
#define T_Link 333
#define T_Listen 334
#define T_Logconfig 335
#define T_Logfile 336
#define T_Loopstats 337
#define T_Lowpriotrap 338
#define T_Manycastclient 339
#define T_Manycastserver 340
#define T_Mask 341
#define T_Maxage 342
#define T_Maxclock 343
#define T_Maxdepth 344
#define T_Maxdist 345
#define T_Maxmem 346
#define T_Maxpoll 347
#define T_Mdnstries 348
#define T_Mem 349
#define T_Memlock 350
#define T_Minclock 351
#define T_Mindepth 352
#define T_Mindist 353
#define T_Minimum 354
#define T_Minpoll 355
#define T_Minsane 356
#define T_Mode 357
#define T_Mode7 358
#define T_Monitor 359
#define T_Month 360
#define T_Mru 361
#define T_Multicastclient 362
#define T_Nic 363
#define T_Nolink 364
#define T_Nomodify 365
#define T_Nomrulist 366
#define T_None 367
#define T_Nonvolatile 368
#define T_Nopeer 369
#define T_Noquery 370
#define T_Noselect 371
#define T_Noserve 372
#define T_Notrap 373
#define T_Notrust 374
#define T_Ntp 375
#define T_Ntpport 376
#define T_NtpSignDsocket 377
#define T_Orphan 378
#define T_Orphanwait 379
#define T_Panic 380
#define T_Peer 381
#define T_Peerstats 382
#define T_Phone 383
#define T_Pid 384
#define T_Pidfile 385
#define T_Pool 386
#define T_Port 387
#define T_Preempt 388
#define T_Prefer 389
#define T_Protostats 390
#define T_Pw 391
#define T_Randfile 392
#define T_Rawstats 393
#define T_Refid 394
#define T_Requestkey 395
#define T_Reset 396
#define T_Restrict 397
#define T_Revoke 398
#define T_Rlimit 399
#define T_Saveconfigdir 400
#define T_Server 401
#define T_Setvar 402
#define T_Source 403
#define T_Stacksize 404
#define T_Statistics 405
#define T_Stats 406
#define T_Statsdir 407
#define T_Step 408
#define T_Stepback 409
#define T_Stepfwd 410
#define T_Stepout 411
#define T_Stratum 412
#define T_String 413
#define T_Sys 414
#define T_Sysstats 415
#define T_Tick 416
#define T_Time1 417
#define T_Time2 418
#define T_Timer 419
#define T_Timingstats 420
#define T_Tinker 421
#define T_Tos 422
#define T_Trap 423
#define T_True 424
#define T_Trustedkey 425
#define T_Ttl 426
#define T_Type 427
#define T_U_int 428
#define T_Unconfig 429
#define T_Unpeer 430
#define T_Version 431
#define T_WanderThreshold 432
#define T_Week 433
#define T_Wildcard 434
#define T_Xleave 435
#define T_Year 436
#define T_Flag 437
#define T_EOC 438
#define T_Simulate 439
#define T_Beep_Delay 440
#define T_Sim_Duration 441
#define T_Server_Offset 442
#define T_Duration 443
#define T_Freq_Offset 444
#define T_Wander 445
#define T_Jitter 446
#define T_Prop_Delay 447
#define T_Proc_Delay 448
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE
typedef union YYSTYPE
{
#line 54 "ntp_parser.y" /* yacc.c:1909 */
/* Line 2053 of yacc.c */
#line 51 "../../ntpd/ntp_parser.y"
char * String;
double Double;
@ -451,15 +457,29 @@ union YYSTYPE
script_info * Sim_script;
script_info_fifo * Sim_script_fifo;
#line 455 "ntp_parser.h" /* yacc.c:1909 */
};
/* Line 2053 of yacc.c */
#line 463 "ntp_parser.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
extern YYSTYPE yylval;
int yyparse (struct FILE_INFO *ip_file);
#ifdef YYPARSE_PARAM
#if defined __STDC__ || defined __cplusplus
int yyparse (void *YYPARSE_PARAM);
#else
int yyparse ();
#endif
#else /* ! YYPARSE_PARAM */
#if defined __STDC__ || defined __cplusplus
int yyparse (void);
#else
int yyparse ();
#endif
#endif /* ! YYPARSE_PARAM */
#endif /* !YY_YY_NTP_PARSER_H_INCLUDED */

View File

@ -14,6 +14,7 @@
#include "ntp_control.h"
#include "ntp_string.h"
#include "ntp_leapsec.h"
#include "refidsmear.h"
#include <stdio.h>
#ifdef HAVE_LIBSCF_H
@ -61,7 +62,8 @@ typedef struct peer_select_tag {
* System variables are declared here. Unless specified otherwise, all
* times are in seconds.
*/
u_char sys_leap; /* system leap indicator */
u_char sys_leap; /* system leap indicator, use set_sys_leap() to change this */
u_char xmt_leap; /* leap indicator sent in client requests, set up by set_sys_leap() */
u_char sys_stratum; /* system stratum */
s_char sys_precision; /* local clock precision (log2 s) */
double sys_rootdelay; /* roundtrip delay to primary source */
@ -70,6 +72,11 @@ u_int32 sys_refid; /* reference id (network byte order) */
l_fp sys_reftime; /* last update time */
struct peer *sys_peer; /* current peer */
#ifdef LEAP_SMEAR
struct leap_smear_info leap_smear;
#endif
int leap_sec_in_progress;
/*
* Rate controls. Leaky buckets are used to throttle the packet
* transmission rates in order to protect busy servers such as at NIST
@ -151,6 +158,33 @@ void pool_name_resolved (int, int, void *, const char *,
const struct addrinfo *);
#endif /* WORKER */
void
set_sys_leap(u_char new_sys_leap) {
sys_leap = new_sys_leap;
xmt_leap = sys_leap;
/*
* Under certain conditions we send faked leap bits to clients, so
* eventually change xmt_leap below, but never change LEAP_NOTINSYNC.
*/
if (xmt_leap != LEAP_NOTINSYNC) {
if (leap_sec_in_progress) {
/* always send "not sync" */
xmt_leap = LEAP_NOTINSYNC;
}
#ifdef LEAP_SMEAR
else {
/*
* If leap smear is enabled in general we must never send a leap second warning
* to clients, so make sure we only send "in sync".
*/
if (leap_smear.enabled)
xmt_leap = LEAP_NOWARNING;
}
#endif /* LEAP_SMEAR */
}
}
/*
* transmit - transmit procedure called by poll timeout
@ -1909,7 +1943,7 @@ clock_update(
*/
case 2:
clear_all();
sys_leap = LEAP_NOTINSYNC;
set_sys_leap(LEAP_NOTINSYNC);
sys_stratum = STRATUM_UNSPEC;
memcpy(&sys_refid, "STEP", 4);
sys_rootdelay = 0;
@ -1930,7 +1964,7 @@ clock_update(
* process.
*/
if (sys_leap == LEAP_NOTINSYNC) {
sys_leap = LEAP_NOWARNING;
set_sys_leap(LEAP_NOWARNING);
#ifdef AUTOKEY
if (crypto_flags)
crypto_update();
@ -2424,7 +2458,7 @@ clock_select(void)
osys_peer = sys_peer;
sys_survivors = 0;
#ifdef LOCKCLOCK
sys_leap = LEAP_NOTINSYNC;
set_sys_leap(LEAP_NOTINSYNC);
sys_stratum = STRATUM_UNSPEC;
memcpy(&sys_refid, "DOWN", 4);
#endif /* LOCKCLOCK */
@ -3407,6 +3441,16 @@ peer_xmit(
}
#ifdef LEAP_SMEAR
static void
leap_smear_add_offs(l_fp *t, l_fp *t_recv) {
L_ADD(t, &leap_smear.offset);
}
#endif /* LEAP_SMEAR */
/*
* fast_xmit - Send packet for nonpersistent association. Note that
* neither the source or destination can be a broadcast address.
@ -3468,18 +3512,60 @@ fast_xmit(
* This is a normal packet. Use the system variables.
*/
} else {
xpkt.li_vn_mode = PKT_LI_VN_MODE(sys_leap,
#ifdef LEAP_SMEAR
/*
* Make copies of the variables which can be affected by smearing.
*/
l_fp this_ref_time;
l_fp this_recv_time;
#endif
/*
* If we are inside the leap smear interval we add the current smear offset to
* the packet receive time, to the packet transmit time, and eventually to the
* reftime to make sure the reftime isn't later than the transmit/receive times.
*/
xpkt.li_vn_mode = PKT_LI_VN_MODE(xmt_leap,
PKT_VERSION(rpkt->li_vn_mode), xmode);
xpkt.stratum = STRATUM_TO_PKT(sys_stratum);
xpkt.ppoll = max(rpkt->ppoll, ntp_minpoll);
xpkt.precision = sys_precision;
xpkt.refid = sys_refid;
xpkt.rootdelay = HTONS_FP(DTOFP(sys_rootdelay));
xpkt.rootdisp = HTONS_FP(DTOUFP(sys_rootdisp));
#ifdef LEAP_SMEAR
this_ref_time = sys_reftime;
if (leap_smear.in_progress) {
leap_smear_add_offs(&this_ref_time, NULL);
xpkt.refid = convertLFPToRefID(leap_smear.offset);
DPRINTF(2, ("fast_xmit: leap_smear.in_progress: refid %8x, smear %s\n",
ntohl(xpkt.refid),
lfptoa(&leap_smear.offset, 8)
));
}
HTONL_FP(&this_ref_time, &xpkt.reftime);
#else
HTONL_FP(&sys_reftime, &xpkt.reftime);
#endif
xpkt.org = rpkt->xmt;
#ifdef LEAP_SMEAR
this_recv_time = rbufp->recv_time;
if (leap_smear.in_progress)
leap_smear_add_offs(&this_recv_time, NULL);
HTONL_FP(&this_recv_time, &xpkt.rec);
#else
HTONL_FP(&rbufp->recv_time, &xpkt.rec);
#endif
get_systime(&xmt_tx);
#ifdef LEAP_SMEAR
if (leap_smear.in_progress)
leap_smear_add_offs(&xmt_tx, &this_recv_time);
#endif
HTONL_FP(&xmt_tx, &xpkt.xmt);
}
@ -3988,7 +4074,7 @@ init_proto(void)
* Fill in the sys_* stuff. Default is don't listen to
* broadcasting, require authentication.
*/
sys_leap = LEAP_NOTINSYNC;
set_sys_leap(LEAP_NOTINSYNC);
sys_stratum = STRATUM_UNSPEC;
memcpy(&sys_refid, "INIT", 4);
sys_peer = NULL;
@ -4062,8 +4148,12 @@ proto_config(
case PROTO_MONITOR: /* monitoring (monitor) */
if (value)
mon_start(MON_ON);
else
else {
mon_stop(MON_ON);
if (mon_enabled)
msyslog(LOG_WARNING,
"restrict: 'monitor' cannot be disabled while 'limited' is enabled");
}
break;
case PROTO_NTP: /* NTP discipline (ntp) */

View File

@ -38,6 +38,7 @@
char yytext[MAX_LEXEME]; /* Buffer for storing the input text/lexeme */
u_int32 conf_file_sum; /* Simple sum of characters read */
static struct FILE_INFO * lex_stack = NULL;
@ -86,153 +87,342 @@ keyword(
}
/* FILE INTERFACE
* --------------
* We define a couple of wrapper functions around the standard C fgetc
* and ungetc functions in order to include positional bookkeeping
/* FILE & STRING BUFFER INTERFACE
* ------------------------------
*
* This set out as a couple of wrapper functions around the standard C
* fgetc and ungetc functions in order to include positional
* bookkeeping. Alas, this is no longer a good solution with nested
* input files and the possibility to send configuration commands via
* 'ntpdc' and 'ntpq'.
*
* Now there are a few functions to maintain a stack of nested input
* sources (though nesting is only allowd for disk files) and from the
* scanner / parser point of view there's no difference between both
* types of sources.
*
* The 'fgetc()' / 'ungetc()' replacements now operate on a FILE_INFO
* structure. Instead of trying different 'ungetc()' strategies for file
* and buffer based parsing, we keep the backup char in our own
* FILE_INFO structure. This is sufficient, as the parser does *not*
* jump around via 'seek' or the like, and there's no need to
* check/clear the backup store in other places than 'lex_getch()'.
*/
struct FILE_INFO *
F_OPEN(
/*
* Allocate an info structure and attach it to a file.
*
* Note: When 'mode' is NULL, then the INFO block will be set up to
* contain a NULL file pointer, as suited for remote config command
* parsing. Otherwise having a NULL file pointer is considered an error,
* and a NULL info block pointer is returned to indicate failure!
*
* Note: We use a variable-sized structure to hold a copy of the file
* name (or, more proper, the input source description). This is more
* secure than keeping a reference to some other storage that might go
* out of scope.
*/
static struct FILE_INFO *
lex_open(
const char *path,
const char *mode
)
{
struct FILE_INFO *my_info;
struct FILE_INFO *stream;
size_t nnambuf;
my_info = emalloc(sizeof *my_info);
nnambuf = strlen(path);
stream = emalloc_zero(sizeof(*stream) + nnambuf);
stream->curpos.nline = 1;
stream->backch = EOF;
/* copy name with memcpy -- trailing NUL already there! */
memcpy(stream->fname, path, nnambuf);
my_info->line_no = 1;
my_info->col_no = 0;
my_info->prev_line_col_no = 0;
my_info->prev_token_col_no = 0;
my_info->fname = path;
my_info->fd = fopen(path, mode);
if (NULL == my_info->fd) {
free(my_info);
return NULL;
if (NULL != mode) {
stream->fpi = fopen(path, mode);
if (NULL == stream->fpi) {
free(stream);
stream = NULL;
}
}
return my_info;
return stream;
}
int
FGETC(
/* get next character from buffer or file. This will return any putback
* character first; it will also make sure the last line is at least
* virtually terminated with a '\n'.
*/
static int
lex_getch(
struct FILE_INFO *stream
)
{
int ch;
do
ch = fgetc(stream->fd);
while (EOF != ch && (CHAR_MIN > ch || ch > CHAR_MAX));
if (EOF != ch) {
if (input_from_file)
conf_file_sum += (u_char)ch;
++stream->col_no;
if (ch == '\n') {
stream->prev_line_col_no = stream->col_no;
++stream->line_no;
stream->col_no = 1;
if (NULL == stream || stream->force_eof)
return EOF;
if (EOF != stream->backch) {
ch = stream->backch;
stream->backch = EOF;
if (stream->fpi)
conf_file_sum += ch;
} else if (stream->fpi) {
/* fetch next 7-bit ASCII char (or EOF) from file */
while ((ch = fgetc(stream->fpi)) != EOF && ch > SCHAR_MAX)
stream->curpos.ncol++;
if (EOF != ch) {
conf_file_sum += ch;
stream->curpos.ncol++;
}
} else {
/* fetch next 7-bit ASCII char from buffer */
const char * scan;
scan = &remote_config.buffer[remote_config.pos];
while ((ch = (u_char)*scan) > SCHAR_MAX) {
scan++;
stream->curpos.ncol++;
}
if ('\0' != ch) {
scan++;
stream->curpos.ncol++;
} else {
ch = EOF;
}
remote_config.pos = (int)(scan - remote_config.buffer);
}
/* If the last line ends without '\n', generate one. This
* happens most likely on Windows, where editors often have a
* sloppy concept of a line.
*/
if (EOF == ch && stream->curpos.ncol != 0)
ch = '\n';
/* update scan position tallies */
if (ch == '\n') {
stream->bakpos = stream->curpos;
stream->curpos.nline++;
stream->curpos.ncol = 0;
}
return ch;
}
/* BUGS: 1. Function will fail on more than one line of pushback
* 2. No error checking is done to see if ungetc fails
* SK: I don't think its worth fixing these bugs for our purposes ;-)
/* Note: lex_ungetch will fail to track more than one line of push
* back. But since it guarantees only one char of back storage anyway,
* this should not be a problem.
*/
int
UNGETC(
static int
lex_ungetch(
int ch,
struct FILE_INFO *stream
)
{
if (input_from_file)
conf_file_sum -= (u_char)ch;
if (ch == '\n') {
stream->col_no = stream->prev_line_col_no;
stream->prev_line_col_no = -1;
--stream->line_no;
/* check preconditions */
if (NULL == stream || stream->force_eof)
return EOF;
if (EOF != stream->backch || EOF == ch)
return EOF;
/* keep for later reference and update checksum */
stream->backch = (u_char)ch;
if (stream->fpi)
conf_file_sum -= stream->backch;
/* update position */
if (stream->backch == '\n') {
stream->curpos = stream->bakpos;
stream->bakpos.ncol = -1;
}
--stream->col_no;
return ungetc(ch, stream->fd);
stream->curpos.ncol--;
return stream->backch;
}
int
FCLOSE(
/* dispose of an input structure. If the file pointer is not NULL, close
* the file. This function does not check the result of 'fclose()'.
*/
static void
lex_close(
struct FILE_INFO *stream
)
{
int ret_val = fclose(stream->fd);
if (!ret_val)
if (NULL != stream) {
if (NULL != stream->fpi)
fclose(stream->fpi);
free(stream);
return ret_val;
}
}
/* STREAM INTERFACE
* ----------------
* Provide a wrapper for the stream functions so that the
* stream can either read from a file or from a character
* array.
* NOTE: This is not very efficient for reading from character
* arrays, but needed to allow remote configuration where the
* configuration command is provided through ntpq.
*
* The behavior of there two functions is determined by the
* input_from_file flag.
/* INPUT STACK
* -----------
*
* Nested input sources are a bit tricky at first glance. We deal with
* this problem using a stack of input sources, that is, a forward
* linked list of FILE_INFO structs.
*
* This stack is never empty during parsing; while an encounter with EOF
* can and will remove nested input sources, removing the last element
* in the stack will not work during parsing, and the EOF condition of
* the outermost input file remains until the parser folds up.
*/
static int
get_next_char(
struct FILE_INFO *ip_file
static struct FILE_INFO *
_drop_stack_do(
struct FILE_INFO * head
)
{
char ch;
if (input_from_file)
return FGETC(ip_file);
else {
if (remote_config.buffer[remote_config.pos] == '\0')
return EOF;
else {
ip_file->col_no++;
ch = remote_config.buffer[remote_config.pos++];
if (ch == '\n') {
ip_file->prev_line_col_no = ip_file->col_no;
++ip_file->line_no;
ip_file->col_no = 1;
}
return ch;
}
struct FILE_INFO * tail;
while (NULL != head) {
tail = head->st_next;
lex_close(head);
head = tail;
}
return head;
}
static void
push_back_char(
struct FILE_INFO *ip_file,
int ch
/* Create a singleton input source on an empty lexer stack. This will
* fail if there is already an input source, or if the underlying disk
* file cannot be opened.
*
* Returns TRUE if a new input object was successfully created.
*/
int/*BOOL*/
lex_init_stack(
const char * path,
const char * mode
)
{
if (input_from_file)
UNGETC(ch, ip_file);
else {
if (ch == '\n') {
ip_file->col_no = ip_file->prev_line_col_no;
ip_file->prev_line_col_no = -1;
--ip_file->line_no;
}
--ip_file->col_no;
if (NULL != lex_stack || NULL == path)
return FALSE;
remote_config.pos--;
}
lex_stack = lex_open(path, mode);
return (NULL != lex_stack);
}
/* This removes *all* input sources from the stack, leaving the head
* pointer as NULL. Any attempt to parse in that state is likely to bomb
* with segmentation faults or the like.
*
* In other words: Use this to clean up after parsing, and do not parse
* anything until the next 'lex_init_stack()' succeeded.
*/
void
lex_drop_stack()
{
lex_stack = _drop_stack_do(lex_stack);
}
/* Flush the lexer input stack: This will nip all input objects on the
* stack (but keeps the current top-of-stack) and marks the top-of-stack
* as inactive. Any further calls to lex_getch yield only EOF, and it's
* no longer possible to push something back.
*
* Returns TRUE if there is a head element (top-of-stack) that was not
* in the force-eof mode before this call.
*/
int/*BOOL*/
lex_flush_stack()
{
int retv = FALSE;
if (NULL != lex_stack) {
retv = !lex_stack->force_eof;
lex_stack->force_eof = TRUE;
lex_stack->st_next = _drop_stack_do(
lex_stack->st_next);
}
return retv;
}
/* Push another file on the parsing stack. If the mode is NULL, create a
* FILE_INFO suitable for in-memory parsing; otherwise, create a
* FILE_INFO that is bound to a local/disc file. Note that 'path' must
* not be NULL, or the function will fail.
*
* Returns TRUE if a new info record was pushed onto the stack.
*/
int/*BOOL*/ lex_push_file(
const char * path,
const char * mode
)
{
struct FILE_INFO * next = NULL;
if (NULL != path) {
next = lex_open(path, mode);
if (NULL != next) {
next->st_next = lex_stack;
lex_stack = next;
}
}
return (NULL != next);
}
/* Pop, close & free the top of the include stack, unless the stack
* contains only a singleton input object. In that case the function
* fails, because the parser does not expect the input stack to be
* empty.
*
* Returns TRUE if an object was successfuly popped from the stack.
*/
int/*BOOL*/
lex_pop_file(void)
{
struct FILE_INFO * head = lex_stack;
struct FILE_INFO * tail = NULL;
if (NULL != head) {
tail = head->st_next;
if (NULL != tail) {
lex_stack = tail;
lex_close(head);
}
}
return (NULL != tail);
}
/* Get include nesting level. This currently loops over the stack and
* counts elements; but since this is of concern only with an include
* statement and the nesting depth has a small limit, there's no
* bottleneck expected here.
*
* Returns the nesting level of includes, that is, the current depth of
* the lexer input stack.
*
* Note:
*/
size_t
lex_level(void)
{
size_t cnt = 0;
struct FILE_INFO *ipf = lex_stack;
while (NULL != ipf) {
cnt++;
ipf = ipf->st_next;
}
return cnt;
}
/* check if the current input is from a file */
int/*BOOL*/
lex_from_file(void)
{
return (NULL != lex_stack) && (NULL != lex_stack->fpi);
}
struct FILE_INFO *
lex_current()
{
/* this became so simple, it could be a macro. But then,
* lex_stack needed to be global...
*/
return lex_stack;
}
/* STATE MACHINES
* --------------
@ -297,7 +487,7 @@ is_integer(
/* Check that all the remaining characters are digits */
for (; lexeme[i] != '\0'; i++) {
if (!isdigit((unsigned char)lexeme[i]))
if (!isdigit((u_char)lexeme[i]))
return FALSE;
}
@ -322,7 +512,7 @@ is_u_int(
int is_hex;
i = 0;
if ('0' == lexeme[i] && 'x' == tolower((unsigned char)lexeme[i + 1])) {
if ('0' == lexeme[i] && 'x' == tolower((u_char)lexeme[i + 1])) {
i += 2;
is_hex = TRUE;
} else {
@ -331,9 +521,9 @@ is_u_int(
/* Check that all the remaining characters are digits */
for (; lexeme[i] != '\0'; i++) {
if (is_hex && !isxdigit((unsigned char)lexeme[i]))
if (is_hex && !isxdigit((u_char)lexeme[i]))
return FALSE;
if (!is_hex && !isdigit((unsigned char)lexeme[i]))
if (!is_hex && !isdigit((u_char)lexeme[i]))
return FALSE;
}
@ -357,14 +547,14 @@ is_double(
i++;
/* Read the integer part */
for (; lexeme[i] && isdigit((unsigned char)lexeme[i]); i++)
for (; lexeme[i] && isdigit((u_char)lexeme[i]); i++)
num_digits++;
/* Check for the optional decimal point */
if ('.' == lexeme[i]) {
i++;
/* Check for any digits after the decimal point */
for (; lexeme[i] && isdigit((unsigned char)lexeme[i]); i++)
for (; lexeme[i] && isdigit((u_char)lexeme[i]); i++)
num_digits++;
}
@ -380,7 +570,7 @@ is_double(
return 1;
/* There is still more input, read the exponent */
if ('e' == tolower((unsigned char)lexeme[i]))
if ('e' == tolower((u_char)lexeme[i]))
i++;
else
return 0;
@ -390,7 +580,7 @@ is_double(
i++;
/* Now read the exponent part */
while (lexeme[i] && isdigit((unsigned char)lexeme[i]))
while (lexeme[i] && isdigit((u_char)lexeme[i]))
i++;
/* Check if we are done */
@ -455,7 +645,7 @@ create_string_token(
* ignore end of line whitespace
*/
pch = lexeme;
while (*pch && isspace((unsigned char)*pch))
while (*pch && isspace((u_char)*pch))
pch++;
if (!*pch) {
@ -476,37 +666,31 @@ create_string_token(
* value representing the token or type.
*/
int
yylex(
struct FILE_INFO *ip_file
)
yylex(void)
{
static follby followedby = FOLLBY_TOKEN;
size_t i;
int i;
int instring;
int yylval_was_set;
int converted;
int token; /* The return value */
int ch;
if (input_from_file)
ip_file = fp[curr_include_level];
instring = FALSE;
yylval_was_set = FALSE;
do {
/* Ignore whitespace at the beginning */
while (EOF != (ch = get_next_char(ip_file)) &&
while (EOF != (ch = lex_getch(lex_stack)) &&
isspace(ch) &&
!is_EOC(ch))
; /* Null Statement */
if (EOF == ch) {
if (!input_from_file || curr_include_level <= 0)
if ( ! lex_pop_file())
return 0;
FCLOSE(fp[curr_include_level]);
ip_file = fp[--curr_include_level];
token = T_EOC;
goto normal_return;
@ -531,15 +715,14 @@ yylex(
yytext[1] = '\0';
goto normal_return;
} else
push_back_char(ip_file, ch);
lex_ungetch(ch, lex_stack);
/* save the position of start of the token */
ip_file->prev_token_line_no = ip_file->line_no;
ip_file->prev_token_col_no = ip_file->col_no;
lex_stack->tokpos = lex_stack->curpos;
/* Read in the lexeme */
i = 0;
while (EOF != (ch = get_next_char(ip_file))) {
while (EOF != (ch = lex_getch(lex_stack))) {
yytext[i] = (char)ch;
@ -553,7 +736,7 @@ yylex(
/* Read the rest of the line on reading a start
of comment character */
if ('#' == ch) {
while (EOF != (ch = get_next_char(ip_file))
while (EOF != (ch = lex_getch(lex_stack))
&& '\n' != ch)
; /* Null Statement */
break;
@ -571,7 +754,7 @@ yylex(
*/
if ('"' == ch) {
instring = TRUE;
while (EOF != (ch = get_next_char(ip_file)) &&
while (EOF != (ch = lex_getch(lex_stack)) &&
ch != '"' && ch != '\n') {
yytext[i++] = (char)ch;
if (i >= COUNTOF(yytext))
@ -583,18 +766,15 @@ yylex(
* not be pushed back, so we read another char.
*/
if ('"' == ch)
ch = get_next_char(ip_file);
ch = lex_getch(lex_stack);
}
/* Pushback the last character read that is not a part
* of this lexeme.
* If the last character read was an EOF, pushback a
* newline character. This is to prevent a parse error
* when there is no newline at the end of a file.
* of this lexeme. This fails silently if ch is EOF,
* but then the EOF condition persists and is handled on
* the next turn by the include stack mechanism.
*/
if (EOF == ch)
push_back_char(ip_file, '\n');
else
push_back_char(ip_file, ch);
lex_ungetch(ch, lex_stack);
yytext[i] = '\0';
} while (i == 0);
@ -627,7 +807,7 @@ yylex(
msyslog(LOG_ERR,
"Integer cannot be represented: %s",
yytext);
if (input_from_file) {
if (lex_from_file()) {
exit(1);
} else {
/* force end of parsing */
@ -640,7 +820,7 @@ yylex(
} else if (is_u_int(yytext)) {
yylval_was_set = TRUE;
if ('0' == yytext[0] &&
'x' == tolower((unsigned char)yytext[1]))
'x' == tolower((unsigned long)yytext[1]))
converted = sscanf(&yytext[2], "%x",
&yylval.U_int);
else
@ -650,7 +830,7 @@ yylex(
msyslog(LOG_ERR,
"U_int cannot be represented: %s",
yytext);
if (input_from_file) {
if (lex_from_file()) {
exit(1);
} else {
/* force end of parsing */
@ -735,14 +915,14 @@ yylex(
yytext[min(sizeof(yytext) - 1, 50)] = 0;
msyslog(LOG_ERR,
"configuration item on line %d longer than limit of %lu, began with '%s'",
ip_file->line_no, (u_long)min(sizeof(yytext) - 1, 50),
lex_stack->curpos.nline, (u_long)min(sizeof(yytext) - 1, 50),
yytext);
/*
* If we hit the length limit reading the startup configuration
* file, abort.
*/
if (input_from_file)
if (lex_from_file())
exit(sizeof(yytext) - 1);
/*

View File

@ -83,22 +83,28 @@ typedef enum {
typedef u_int32 scan_state;
struct LCPOS {
int nline;
int ncol;
};
/* Structure to hold a filename, file pointer and positional info */
/* Structure to hold a filename, file pointer and positional info.
* Instances are dynamically allocated, and the file name is copied by
* value into a dynamic extension of the 'fname' array. (Which *must* be
* the last field for that reason!)
*/
struct FILE_INFO {
const char * fname; /* Path to the file */
FILE * fd; /* File Descriptor */
int line_no; /* Line Number */
int col_no; /* Column Number */
int prev_line_col_no; /* Col No on the
previous line when a
'\n' was seen */
int prev_token_line_no; /* Line at start of
token */
int prev_token_col_no; /* Col No at start of
token */
int err_line_no;
int err_col_no;
struct FILE_INFO * st_next; /* next on stack */
FILE * fpi; /* File Descriptor */
int force_eof; /* locked or not */
int backch; /* ungetch buffer */
struct LCPOS curpos; /* current scan position */
struct LCPOS bakpos; /* last line end for ungetc */
struct LCPOS tokpos; /* current token position */
struct LCPOS errpos; /* error position */
char fname[1]; /* (formal only) buffered name */
};
@ -106,25 +112,31 @@ struct FILE_INFO {
* ------------------------
*/
extern config_tree cfgt; /* Parser output stored here */
extern int curr_include_level; /* The current include level */
/* VARIOUS EXTERNAL DECLARATIONS
* -----------------------------
*/
extern int old_config_style;
extern int input_from_file;
extern struct FILE_INFO *fp[];
/* VARIOUS SUBROUTINE DECLARATIONS
* -------------------------------
*/
extern const char *keyword(int token);
extern char *quote_if_needed(char *str);
int yylex(struct FILE_INFO *);
int yylex(void);
struct FILE_INFO *F_OPEN(const char *path, const char *mode);
int FGETC(struct FILE_INFO *stream);
int UNGETC(int ch, struct FILE_INFO *stream);
int FCLOSE(struct FILE_INFO *stream);
/* managing the input source stack itself */
extern int/*BOOL*/ lex_init_stack(const char * path, const char * mode);
extern void lex_drop_stack(void);
extern int/*BOOL*/ lex_flush_stack(void);
/* add/remove a nested input source */
extern int/*BOOL*/ lex_push_file(const char * path, const char * mode);
extern int/*BOOL*/ lex_pop_file(void);
/* input stack state query functions */
extern size_t lex_level(void);
extern int/*BOOL*/ lex_from_file(void);
extern struct FILE_INFO * lex_current(void);
#endif /* NTP_SCANNER_H */

View File

@ -41,6 +41,7 @@
#define TC_ERR (-1)
#endif
static void check_leapsec(u_int32, const time_t*, int/*BOOL*/);
/*
@ -110,7 +111,7 @@ static RETSIGTYPE alarming (int);
static timer_t timer_id;
typedef struct itimerspec intervaltimer;
# define itv_frac tv_nsec
# else
# else
typedef struct itimerval intervaltimer;
# define itv_frac tv_usec
# endif
@ -151,7 +152,7 @@ set_timer_or_die(
/*
* reinit_timer - reinitialize interval timer after a clock step.
*/
void
void
reinit_timer(void)
{
#if !defined(SYS_WINNT) && !defined(VMS)
@ -211,7 +212,7 @@ init_timer(void)
}
# endif
signal_no_reset(SIGALRM, alarming);
itimer.it_interval.tv_sec =
itimer.it_interval.tv_sec =
itimer.it_value.tv_sec = (1 << EVENT_TIMEOUT);
itimer.it_interval.itv_frac = itimer.it_value.itv_frac = 0;
set_timer_or_die(&itimer);
@ -228,7 +229,7 @@ init_timer(void)
#else /* SYS_WINNT follows */
/*
* Set up timer interrupts for every 2**EVENT_TIMEOUT seconds
* Under Windows/NT,
* Under Windows/NT,
*/
WaitableTimerHandle = CreateWaitableTimer(NULL, FALSE, NULL);
@ -341,9 +342,9 @@ timer(void)
if (sys_orphan < STRATUM_UNSPEC && sys_peer == NULL &&
current_time > orphwait) {
if (sys_leap == LEAP_NOTINSYNC) {
sys_leap = LEAP_NOWARNING;
set_sys_leap(LEAP_NOWARNING);
#ifdef AUTOKEY
if (crypto_flags)
if (crypto_flags)
crypto_update();
#endif /* AUTOKEY */
}
@ -370,11 +371,11 @@ timer(void)
if (sys_leap != LEAP_NOTINSYNC) {
if (leapsec >= LSPROX_ANNOUNCE && leapdif) {
if (leapdif > 0)
sys_leap = LEAP_ADDSECOND;
set_sys_leap(LEAP_ADDSECOND);
else
sys_leap = LEAP_DELSECOND;
set_sys_leap(LEAP_DELSECOND);
} else {
sys_leap = LEAP_NOWARNING;
set_sys_leap(LEAP_NOWARNING);
}
}
@ -472,7 +473,7 @@ alarming(
# endif
# ifdef DEBUG
if (debug >= 4)
write(1, msg, strlen(msg));
(void)(-1 == write(1, msg, strlen(msg)));
# endif
}
#endif /* SYS_WINNT */
@ -496,44 +497,162 @@ timer_clr_stats(void)
timer_timereset = current_time;
}
static void
check_leap_sec_in_progress( const leap_result_t *lsdata ) {
int prv_leap_sec_in_progress = leap_sec_in_progress;
leap_sec_in_progress = lsdata->tai_diff && (lsdata->ddist < 3);
/* if changed we may have to update the leap status sent to clients */
if (leap_sec_in_progress != prv_leap_sec_in_progress)
set_sys_leap(sys_leap);
}
static void
check_leapsec(
u_int32 now ,
const time_t * tpiv ,
int/*BOOL*/ reset)
{
static const char leapmsg_p_step[] =
"Positive leap second, stepped backward.";
static const char leapmsg_p_slew[] =
"Positive leap second, no step correction. "
"System clock will be inaccurate for a long time.";
static const char leapmsg_n_step[] =
"Negative leap second, stepped forward.";
static const char leapmsg_n_slew[] =
"Negative leap second, no step correction. "
"System clock will be inaccurate for a long time.";
leap_result_t lsdata;
u_int32 lsprox;
#ifdef AUTOKEY
int/*BOOL*/ update_autokey = FALSE;
#endif
#ifndef SYS_WINNT /* WinNT port has its own leap second handling */
# ifdef KERNEL_PLL
leapsec_electric(pll_control && kern_enable);
# else
leapsec_electric(0);
# endif
#endif
#endif
#ifdef LEAP_SMEAR
leap_smear.enabled = leap_smear_intv != 0;
#endif
if (reset) {
lsprox = LSPROX_NOWARN;
leapsec_reset_frame();
memset(&lsdata, 0, sizeof(lsdata));
} else if (leapsec_query(&lsdata, now, tpiv)) {
} else {
int fired = leapsec_query(&lsdata, now, tpiv);
DPRINTF(1, ("*** leapsec_query: fired %i, now %u (0x%08X), tai_diff %i, ddist %u\n",
fired, now, now, lsdata.tai_diff, lsdata.ddist));
#ifdef LEAP_SMEAR
leap_smear.in_progress = 0;
leap_smear.doffset = 0.0;
if (leap_smear.enabled) {
if (lsdata.tai_diff) {
if (leap_smear.interval == 0) {
leap_smear.interval = leap_smear_intv;
leap_smear.intv_end = lsdata.ttime.Q_s;
leap_smear.intv_start = leap_smear.intv_end - leap_smear.interval;
DPRINTF(1, ("*** leapsec_query: setting leap_smear interval %li, begin %.0f, end %.0f\n",
leap_smear.interval, leap_smear.intv_start, leap_smear.intv_end));
}
}
else {
if (leap_smear.interval)
DPRINTF(1, ("*** leapsec_query: clearing leap_smear interval\n"));
leap_smear.interval = 0;
}
if (leap_smear.interval) {
double dtemp = now;
if (dtemp >= leap_smear.intv_start && dtemp <= leap_smear.intv_end) {
double leap_smear_time = dtemp - leap_smear.intv_start;
/*
* For now we just do a linear interpolation over the smear interval
*/
#if 0
// linear interpolation
leap_smear.doffset = -(leap_smear_time * lsdata.tai_diff / leap_smear.interval);
#else
// Google approach: lie(t) = (1.0 - cos(pi * t / w)) / 2.0
leap_smear.doffset = -((double) lsdata.tai_diff - cos( M_PI * leap_smear_time / leap_smear.interval)) / 2.0;
#endif
/*
* TODO see if we're inside an inserted leap second, so we need to compute
* leap_smear.doffset = 1.0 - leap_smear.doffset
*/
leap_smear.in_progress = 1;
#if 0 && defined( DEBUG )
msyslog(LOG_NOTICE, "*** leapsec_query: [%.0f:%.0f] (%li), now %u (%.0f), smear offset %.6f ms\n",
leap_smear.intv_start, leap_smear.intv_end, leap_smear.interval,
now, leap_smear_time, leap_smear.doffset);
#else
DPRINTF(1, ("*** leapsec_query: [%.0f:%.0f] (%li), now %u (%.0f), smear offset %.6f ms\n",
leap_smear.intv_start, leap_smear.intv_end, leap_smear.interval,
now, leap_smear_time, leap_smear.doffset));
#endif
}
}
}
else
leap_smear.interval = 0;
/*
* Update the current leap smear offset, eventually 0.0 if outside smear interval.
*/
DTOLFP(leap_smear.doffset, &leap_smear.offset);
#endif /* LEAP_SMEAR */
if (fired) {
/* Full hit. Eventually step the clock, but always
* announce the leap event has happened.
*/
const char *leapmsg = NULL;
if (lsdata.warped < 0) {
step_systime(lsdata.warped);
msyslog(LOG_NOTICE, "Inserting positive leap second.");
if (clock_max_back > 0.0 &&
clock_max_back < fabs(lsdata.warped)) {
step_systime(lsdata.warped);
leapmsg = leapmsg_p_step;
} else {
leapmsg = leapmsg_p_slew;
}
} else if (lsdata.warped > 0) {
step_systime(lsdata.warped);
msyslog(LOG_NOTICE, "Inserting negative leap second.");
if (clock_max_fwd > 0.0 &&
clock_max_fwd < fabs(lsdata.warped)) {
step_systime(lsdata.warped);
leapmsg = leapmsg_n_step;
} else {
leapmsg = leapmsg_n_slew;
}
}
if (leapmsg)
msyslog(LOG_NOTICE, "%s", leapmsg);
report_event(EVNT_LEAP, NULL, NULL);
#ifdef AUTOKEY
update_autokey = TRUE;
#endif
lsprox = LSPROX_NOWARN;
leapsec = LSPROX_NOWARN;
sys_tai = lsdata.tai_offs;
} else {
} else {
#ifdef AUTOKEY
update_autokey = (sys_tai != lsdata.tai_offs);
#endif
lsprox = lsdata.proximity;
sys_tai = lsdata.tai_offs;
}
}
/* We guard against panic alarming during the red alert phase.
@ -563,8 +682,15 @@ check_leapsec(
leapsec = lsprox;
}
if (leapsec >= LSPROX_SCHEDULE)
leapdif = lsdata.tai_diff;
else
leapdif = 0;
if (leapsec >= LSPROX_SCHEDULE)
leapdif = lsdata.tai_diff;
else
leapdif = 0;
check_leap_sec_in_progress(&lsdata);
#ifdef AUTOKEY
if (update_autokey)
crypto_update_taichange();
#endif
}

View File

@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.c)
*
* It has been AutoGen-ed April 7, 2015 at 04:23:14 AM by AutoGen 5.18.5pre4
* It has been AutoGen-ed June 29, 2015 at 04:28:19 PM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@ -75,7 +75,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpd options
*/
static char const ntpd_opt_strs[3129] =
/* 0 */ "ntpd 4.2.8p2\n"
/* 0 */ "ntpd 4.2.8p3\n"
"Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@ -205,12 +205,12 @@ static char const ntpd_opt_strs[3129] =
/* 2900 */ "output version information and exit\0"
/* 2936 */ "version\0"
/* 2944 */ "NTPD\0"
/* 2949 */ "ntpd - NTP daemon program - Ver. 4.2.8p2\n"
/* 2949 */ "ntpd - NTP daemon program - Ver. 4.2.8p3\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n"
"\t\t[ <server1> ... <serverN> ]\n\0"
/* 3080 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 3114 */ "\n\0"
/* 3116 */ "ntpd 4.2.8p2";
/* 3116 */ "ntpd 4.2.8p3";
/**
* ipv4 option description with
@ -1331,7 +1331,7 @@ OPT_VALUE_SET_DEBUG_LEVEL++;
(void)pOptDesc;
(void)pOptions;
}
/* extracted from optmain.tlib near line 1245 */
/* extracted from optmain.tlib near line 1250 */
/**
* The directory containing the data associated with ntpd.
@ -1443,11 +1443,11 @@ AO_gettext(char const * pz)
if (option_xlateable_txt.field_ct != 0) {
res = dgettext("libopts", pz);
if (res == pz)
res = (char *)(void *)_(pz);
res = (char *)VOIDP(_(pz));
} else
res = (char *)(void *)_(pz);
res = (char *)VOIDP(_(pz));
#else
res = (char *)(void *)_(pz);
res = (char *)VOIDP(_(pz));
#endif
if (res == pz)
return res;
@ -1484,7 +1484,7 @@ translate_option_strings(void)
* Do the translations. The first pointer follows the field count
* field. The field count field is the size of a pointer.
*/
char ** ppz = (char**)(void*)&(option_xlateable_txt);
char ** ppz = (char**)VOIDP(&(option_xlateable_txt));
int ix = option_xlateable_txt.field_ct;
do {
@ -1494,16 +1494,16 @@ translate_option_strings(void)
/* prevent re-translation and disable "libopts" domain lookup */
option_xlateable_txt.field_ct = 0;
coerce_it((void*)&(opts->pzCopyright));
coerce_it((void*)&(opts->pzCopyNotice));
coerce_it((void*)&(opts->pzFullVersion));
coerce_it((void*)&(opts->pzUsageTitle));
coerce_it((void*)&(opts->pzExplain));
coerce_it((void*)&(opts->pzDetail));
coerce_it(VOIDP(&(opts->pzCopyright)));
coerce_it(VOIDP(&(opts->pzCopyNotice)));
coerce_it(VOIDP(&(opts->pzFullVersion)));
coerce_it(VOIDP(&(opts->pzUsageTitle)));
coerce_it(VOIDP(&(opts->pzExplain)));
coerce_it(VOIDP(&(opts->pzDetail)));
{
tOptDesc * od = opts->pOptDesc;
for (ix = opts->optCt; ix > 0; ix--, od++)
coerce_it((void*)&(od->pzText));
coerce_it(VOIDP(&(od->pzText)));
}
}
}
@ -1529,7 +1529,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpdOptions.pzCopyright */
puts(_("ntpd 4.2.8p2\n\
puts(_("ntpd 4.2.8p3\n\
Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@ -1670,7 +1670,7 @@ implied warranty.\n"));
puts(_("output version information and exit"));
/* referenced via ntpdOptions.pzUsageTitle */
puts(_("ntpd - NTP daemon program - Ver. 4.2.8p2\n\
puts(_("ntpd - NTP daemon program - Ver. 4.2.8p3\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
\t\t[ <server1> ... <serverN> ]\n"));
@ -1678,7 +1678,7 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("\n"));
/* referenced via ntpdOptions.pzFullVersion */
puts(_("ntpd 4.2.8p2"));
puts(_("ntpd 4.2.8p3"));
/* referenced via ntpdOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
@ -1704,7 +1704,7 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
#line 121 "../version.c"
puts(_("Automated Options version %s\n"
"\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n"));
#line 82 "../makeshell.c"
#line 87 "../makeshell.c"
puts(_("(AutoOpts bug): %s.\n"));
#line 90 "../reset.c"
puts(_("optionResetOpt() called, but reset-option not configured"));
@ -1728,9 +1728,9 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("%s: Command line arguments required\n"));
#line 43 "../alias.c"
puts(_("%d %s%s options allowed\n"));
#line 89 "../makeshell.c"
#line 94 "../makeshell.c"
puts(_("%s error %d (%s) calling %s for '%s'\n"));
#line 301 "../makeshell.c"
#line 306 "../makeshell.c"
puts(_("interprocess pipe"));
#line 168 "../version.c"
puts(_("error: version option argument '%c' invalid. Use:\n"
@ -1808,9 +1808,9 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("Try '%s %s' for more information.\n"));
#line 45 "../alias.c"
puts(_("one %s%s option allowed\n"));
#line 203 "../makeshell.c"
#line 208 "../makeshell.c"
puts(_("standard output"));
#line 938 "../makeshell.c"
#line 943 "../makeshell.c"
puts(_("standard output"));
#line 274 "../usage.c"
puts(_("standard output"));
@ -1828,9 +1828,9 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("standard error"));
#line 175 "../version.c"
puts(_("standard error"));
#line 203 "../makeshell.c"
#line 208 "../makeshell.c"
puts(_("write"));
#line 938 "../makeshell.c"
#line 943 "../makeshell.c"
puts(_("write"));
#line 273 "../usage.c"
puts(_("write"));
@ -1882,7 +1882,7 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
#line 380 "../usage.c"
puts(_("Options are specified by doubled hyphens and their name or by a single\n"
"hyphen and the flag character.\n"));
#line 916 "../makeshell.c"
#line 921 "../makeshell.c"
puts(_("\n"
"= = = = = = = =\n\n"
"This incarnation of genshell will produce\n"

View File

@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.h)
*
* It has been AutoGen-ed April 7, 2015 at 04:23:13 AM by AutoGen 5.18.5pre4
* It has been AutoGen-ed June 29, 2015 at 04:28:18 PM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@ -106,9 +106,9 @@ typedef enum {
/** count of all options for ntpd */
#define OPTION_CT 38
/** ntpd version */
#define NTPD_VERSION "4.2.8p2"
#define NTPD_VERSION "4.2.8p3"
/** Full ntpd version text */
#define NTPD_FULL_VERSION "ntpd 4.2.8p2"
#define NTPD_FULL_VERSION "ntpd 4.2.8p3"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED

View File

@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
.TH ntpd 1ntpdman "07 Apr 2015" "4.2.8p2" "User Commands"
.TH ntpd 1ntpdman "29 Jun 2015" "4.2.8p3" "User Commands"
.\"
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-TQays3/ag-5Qaqr3)
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-LZaapD/ag-XZa4nD)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:45 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:24 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@ -59,7 +59,7 @@ with future gigahertz CPU clocks and gigabit LANs.
Ordinarily,
\f\*[B-Font]ntpd\fP
reads the
\fCntp.conf\fR(5)\f[]
\fCntp.conf\f[]\fR(5)\f[]
configuration file at startup time in order to determine the
synchronization sources and operating modes.
It is also possible to
@ -78,7 +78,7 @@ then
\f\*[B-Font]ntpd\fP
will attempt to read its configuration from the
NetInfo if the default
\fCntp.conf\fR(5)\f[]
\fCntp.conf\f[]\fR(5)\f[]
file cannot be read and no file is
specified by the
\f\*[B-Font]\-c\f[]
@ -93,9 +93,9 @@ configuration options altered while the
\f\*[B-Font]ntpd\fP
is running
using the
\fCntpq\fR(1ntpqmdoc)\f[]
\fCntpq\f[]\fR(1ntpqmdoc)\f[]
and
\fCntpdc\fR(1ntpdcmdoc)\f[]
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[]
utility programs.
.sp \n(Ppu
.ne 2
@ -103,11 +103,11 @@ utility programs.
When
\f\*[B-Font]ntpd\fP
starts it looks at the value of
\fCumask\fR(2)\f[],
\fCumask\f[]\fR(2)\f[],
and if zero
\f\*[B-Font]ntpd\fP
will set the
\fCumask\fR(2)\f[]
\fCumask\f[]\fR(2)\f[]
to 022.
.SH "OPTIONS"
.TP
@ -472,7 +472,7 @@ keyword with the
\f\*[B-Font]server\f[]
configuration
command, as described in
\fCntp.conf\fR(5)\f[].
\fCntp.conf\f[]\fR(5)\f[].
.sp \n(Ppu
.ne 2
@ -601,9 +601,9 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
\fCntpdate\fR(1ntpdatemdoc)\f[]
\fCntpdate\f[]\fR(1ntpdatemdoc)\f[]
to get the system clock close to correct before starting
\fCntpd\fR(1ntpdmdoc)\f[],
\fCntpd\f[]\fR(1ntpdmdoc)\f[],
but this was never more than a mediocre hack and is no longer needed.
If you are following the instructions in
\fIStarting NTP (Best Current Practice)\f[]
@ -611,12 +611,12 @@ and you still need to set the system time before starting
\f\*[B-Font]ntpd\fP,
please open a bug report and document what is going on,
and then look at using
\fCsntp\fR(1sntpmdoc)\f[].
\fCsntp\f[]\fR(1sntpmdoc)\f[].
.sp \n(Ppu
.ne 2
There is a way to start
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
that often addresses all of the problems mentioned above.
.SS "Starting NTP (Best Current Practice)"
First, use the
@ -630,14 +630,14 @@ entries.
If you can also keep a good
\fIntp.drift\f[]
file then
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
will effectively "warm-start" and your system's clock will
be stable in under 11 seconds' time.
.sp \n(Ppu
.ne 2
As soon as possible in the startup sequence, start
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
with at least the
\f\*[B-Font]\-g\f[]
and perhaps the
@ -646,7 +646,7 @@ options.
Then,
start the rest of your "normal" processes.
This will give
\fCntpd\fR(1ntpdmdoc)\f[]
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
as much time as possible to get the system's clock synchronized and stable.
.sp \n(Ppu
.ne 2
@ -658,13 +658,13 @@ or database servers
that require
monotonically-increasing time,
run
\fCntp-wait\fR(1ntp-waitmdoc)\f[]
\fCntp-wait\f[]\fR(1ntp-waitmdoc)\f[]
as late as possible in the boot sequence
(perhaps with the
\f\*[B-Font]\-v\f[]
flag)
and after
\fCntp-wait\fR(1ntp-waitmdoc)\f[]
\fCntp-wait\f[]\fR(1ntp-waitmdoc)\f[]
exits successfully
it is as safe as it will ever be to start any process that require
stable time.
@ -749,11 +749,11 @@ In some cases it may not be practical for
\f\*[B-Font]ntpd\fP
to run continuously.
A common workaround has been to run the
\fCntpdate\fR(1ntpdatemdoc)\f[]
\fCntpdate\f[]\fR(1ntpdatemdoc)\f[]
or
\fCsntp\fR(1sntpmdoc)\f[]
\fCsntp\f[]\fR(1sntpmdoc)\f[]
programs from a
\fCcron\fR(8)\f[]
\fCcron\f[]\fR(8)\f[]
job at designated
times.
However, these programs do not have the crafted signal
@ -780,7 +780,7 @@ If nothing is heard after a
couple of minutes, the daemon times out and exits.
After a suitable
period of mourning, the
\fCntpdate\fR(1ntpdatemdoc)\f[]
\fCntpdate\f[]\fR(1ntpdatemdoc)\f[]
program will be
retired.
.sp \n(Ppu
@ -891,7 +891,7 @@ The filter is activated by the
command and
\f\*[B-Font]huffpuff\f[]
keyword, as described in
\fCntp.conf\fR(5)\f[].
\fCntp.conf\f[]\fR(5)\f[].
.SH "ENVIRONMENT"
See \fBOPTION PRESETS\fP for configuration environment variables.
.SH FILES
@ -923,11 +923,11 @@ libopts had an internal operational error. Please report
it to autogen-users@lists.sourceforge.net. Thank you.
.PP
.SH "SEE ALSO"
\fCntp.conf\fR(5)\f[],
\fCntpdate\fR(1ntpdatemdoc)\f[],
\fCntpdc\fR(1ntpdcmdoc)\f[],
\fCntpq\fR(1ntpqmdoc)\f[],
\fCsntp\fR(1sntpmdoc)\f[]
\fCntp.conf\f[]\fR(5)\f[],
\fCntpdate\f[]\fR(1ntpdatemdoc)\f[],
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[],
\fCntpq\f[]\fR(1ntpqmdoc)\f[],
\fCsntp\f[]\fR(1sntpmdoc)\f[]
.sp \n(Ppu
.ne 2

View File

@ -1,9 +1,9 @@
.Dd April 7 2015
.Dd June 29 2015
.Dt NTPD 1ntpdmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:26:02 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:41 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME

View File

@ -39,7 +39,7 @@ The program can operate in any of several modes, including client/server,
symmetric and broadcast modes, and with both symmetric-key and public-key
cryptography.
<p>This document applies to version 4.2.8p2 of <code>ntpd</code>.
<p>This document applies to version 4.2.8p3 of <code>ntpd</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpd-Description">ntpd Description</a>: Description
@ -220,7 +220,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
<pre class="example">ntpd - NTP daemon program - Ver. 4.2.8p2-RC3
<pre class="example">ntpd - NTP daemon program - Ver. 4.2.8p3-RC3
Usage: ntpd [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... \
[ &lt;server1&gt; ... &lt;serverN&gt; ]
Flg Arg Option-Name Description

View File

@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
.TH ntpd @NTPD_MS@ "07 Apr 2015" "4.2.8p2" "User Commands"
.TH ntpd @NTPD_MS@ "29 Jun 2015" "4.2.8p3" "User Commands"
.\"
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-TQays3/ag-5Qaqr3)
.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-LZaapD/ag-XZa4nD)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:25:45 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:24 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@ -59,7 +59,7 @@ with future gigahertz CPU clocks and gigabit LANs.
Ordinarily,
\f\*[B-Font]ntpd\fP
reads the
\fCntp.conf\fR(5)\f[]
\fCntp.conf\f[]\fR(5)\f[]
configuration file at startup time in order to determine the
synchronization sources and operating modes.
It is also possible to
@ -78,7 +78,7 @@ then
\f\*[B-Font]ntpd\fP
will attempt to read its configuration from the
NetInfo if the default
\fCntp.conf\fR(5)\f[]
\fCntp.conf\f[]\fR(5)\f[]
file cannot be read and no file is
specified by the
\f\*[B-Font]\-c\f[]
@ -93,9 +93,9 @@ configuration options altered while the
\f\*[B-Font]ntpd\fP
is running
using the
\fCntpq\fR(@NTPQ_MS@)\f[]
\fCntpq\f[]\fR(@NTPQ_MS@)\f[]
and
\fCntpdc\fR(@NTPDC_MS@)\f[]
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[]
utility programs.
.sp \n(Ppu
.ne 2
@ -103,11 +103,11 @@ utility programs.
When
\f\*[B-Font]ntpd\fP
starts it looks at the value of
\fCumask\fR(2)\f[],
\fCumask\f[]\fR(2)\f[],
and if zero
\f\*[B-Font]ntpd\fP
will set the
\fCumask\fR(2)\f[]
\fCumask\f[]\fR(2)\f[]
to 022.
.SH "OPTIONS"
.TP
@ -472,7 +472,7 @@ keyword with the
\f\*[B-Font]server\f[]
configuration
command, as described in
\fCntp.conf\fR(5)\f[].
\fCntp.conf\f[]\fR(5)\f[].
.sp \n(Ppu
.ne 2
@ -601,9 +601,9 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
\fCntpdate\fR(@NTPDATE_MS@)\f[]
\fCntpdate\f[]\fR(@NTPDATE_MS@)\f[]
to get the system clock close to correct before starting
\fCntpd\fR(@NTPD_MS@)\f[],
\fCntpd\f[]\fR(@NTPD_MS@)\f[],
but this was never more than a mediocre hack and is no longer needed.
If you are following the instructions in
\fIStarting NTP (Best Current Practice)\f[]
@ -611,12 +611,12 @@ and you still need to set the system time before starting
\f\*[B-Font]ntpd\fP,
please open a bug report and document what is going on,
and then look at using
\fCsntp\fR(@SNTP_MS@)\f[].
\fCsntp\f[]\fR(@SNTP_MS@)\f[].
.sp \n(Ppu
.ne 2
There is a way to start
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
that often addresses all of the problems mentioned above.
.SS "Starting NTP (Best Current Practice)"
First, use the
@ -630,14 +630,14 @@ entries.
If you can also keep a good
\fIntp.drift\f[]
file then
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
will effectively "warm-start" and your system's clock will
be stable in under 11 seconds' time.
.sp \n(Ppu
.ne 2
As soon as possible in the startup sequence, start
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
with at least the
\f\*[B-Font]\-g\f[]
and perhaps the
@ -646,7 +646,7 @@ options.
Then,
start the rest of your "normal" processes.
This will give
\fCntpd\fR(@NTPD_MS@)\f[]
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
as much time as possible to get the system's clock synchronized and stable.
.sp \n(Ppu
.ne 2
@ -658,13 +658,13 @@ or database servers
that require
monotonically-increasing time,
run
\fCntp-wait\fR(@NTP_WAIT_MS@)\f[]
\fCntp-wait\f[]\fR(@NTP_WAIT_MS@)\f[]
as late as possible in the boot sequence
(perhaps with the
\f\*[B-Font]\-v\f[]
flag)
and after
\fCntp-wait\fR(@NTP_WAIT_MS@)\f[]
\fCntp-wait\f[]\fR(@NTP_WAIT_MS@)\f[]
exits successfully
it is as safe as it will ever be to start any process that require
stable time.
@ -749,11 +749,11 @@ In some cases it may not be practical for
\f\*[B-Font]ntpd\fP
to run continuously.
A common workaround has been to run the
\fCntpdate\fR(@NTPDATE_MS@)\f[]
\fCntpdate\f[]\fR(@NTPDATE_MS@)\f[]
or
\fCsntp\fR(@SNTP_MS@)\f[]
\fCsntp\f[]\fR(@SNTP_MS@)\f[]
programs from a
\fCcron\fR(8)\f[]
\fCcron\f[]\fR(8)\f[]
job at designated
times.
However, these programs do not have the crafted signal
@ -780,7 +780,7 @@ If nothing is heard after a
couple of minutes, the daemon times out and exits.
After a suitable
period of mourning, the
\fCntpdate\fR(@NTPDATE_MS@)\f[]
\fCntpdate\f[]\fR(@NTPDATE_MS@)\f[]
program will be
retired.
.sp \n(Ppu
@ -891,7 +891,7 @@ The filter is activated by the
command and
\f\*[B-Font]huffpuff\f[]
keyword, as described in
\fCntp.conf\fR(5)\f[].
\fCntp.conf\f[]\fR(5)\f[].
.SH "ENVIRONMENT"
See \fBOPTION PRESETS\fP for configuration environment variables.
.SH FILES
@ -923,11 +923,11 @@ libopts had an internal operational error. Please report
it to autogen-users@lists.sourceforge.net. Thank you.
.PP
.SH "SEE ALSO"
\fCntp.conf\fR(5)\f[],
\fCntpdate\fR(@NTPDATE_MS@)\f[],
\fCntpdc\fR(@NTPDC_MS@)\f[],
\fCntpq\fR(@NTPQ_MS@)\f[],
\fCsntp\fR(@SNTP_MS@)\f[]
\fCntp.conf\f[]\fR(5)\f[],
\fCntpdate\f[]\fR(@NTPDATE_MS@)\f[],
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[],
\fCntpq\f[]\fR(@NTPQ_MS@)\f[],
\fCsntp\f[]\fR(@SNTP_MS@)\f[]
.sp \n(Ppu
.ne 2

View File

@ -1,9 +1,9 @@
.Dd April 7 2015
.Dd June 29 2015
.Dt NTPD @NTPD_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
.\" It has been AutoGen-ed April 7, 2015 at 04:26:02 AM by AutoGen 5.18.5pre4
.\" It has been AutoGen-ed June 29, 2015 at 04:30:41 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME

View File

@ -0,0 +1,35 @@
#include <config.h>
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
/* Bug 2853 */
/* evaluate the length of the command sequence. This breaks at the first
* char that is not >= SPACE and <= 127 after trimming from the right.
*/
size_t
remoteconfig_cmdlength(
const char *src_buf,
const char *src_end
)
{
const char *scan;
unsigned char ch;
/* trim whitespace & garbage from the right */
while (src_end != src_buf) {
ch = src_end[-1];
if (ch > ' ' && ch < 128)
break;
--src_end;
}
/* now do a forward scan */
for (scan = src_buf; scan != src_end; ++scan) {
ch = scan[0];
if ((ch < ' ' || ch >= 128) && ch != '\t')
break;
}
return (size_t)(scan - src_buf);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,7 @@
* Currently the STREAMS module is only available for Suns running
* SunOS 4.x and SunOS5.x.
*
* Copyright (c) 1995-2009 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1995-2015 by Frank Kardel <kardel <AT> ntp.org>
* Copyright (c) 1989-1994 by Frank Kardel, Friedrich-Alexander Universitaet Erlangen-Nuernberg, Germany
*
* Redistribution and use in source and binary forms, with or without
@ -2540,7 +2540,7 @@ parsestate(
{
{ PARSEB_S_LEAP, "LEAP INDICATION" },
{ PARSEB_S_PPS, "PPS SIGNAL" },
{ PARSEB_S_ANTENNA, "ANTENNA" },
{ PARSEB_S_CALLBIT, "CALLBIT" },
{ PARSEB_S_POSITION, "POSITION" },
{ 0, NULL }
};
@ -2562,7 +2562,7 @@ parsestate(
i++;
}
if (lstate & (PARSEB_S_LEAP|PARSEB_S_ANTENNA|PARSEB_S_PPS|PARSEB_S_POSITION))
if (lstate & (PARSEB_S_LEAP|PARSEB_S_CALLBIT|PARSEB_S_PPS|PARSEB_S_POSITION))
{
if (s != t)
t = ap(buffer, size, t, "; ");
@ -2998,7 +2998,7 @@ parse_start(
if (!notice)
{
NLOG(NLOG_CLOCKINFO) /* conditional if clause for conditional syslog */
msyslog(LOG_INFO, "NTP PARSE support: Copyright (c) 1989-2009, Frank Kardel");
msyslog(LOG_INFO, "NTP PARSE support: Copyright (c) 1989-2015, Frank Kardel");
notice = 1;
}
@ -3782,6 +3782,8 @@ parse_process(
msyslog(LOG_WARNING, "PARSE receiver #%d: FAILED TIMECODE: \"%s\" (check receiver configuration / wiring)",
CLK_UNIT(parse->peer), mkascii(buffer, sizeof buffer, tmpctl.parsegettc.parse_buffer, (unsigned)(tmpctl.parsegettc.parse_count - 1)));
}
/* copy status to show only changes in case of failures */
parse->timedata.parse_status = parsetime->parse_status;
}
}

View File

@ -24,6 +24,7 @@
#include "timespecops.h"
#undef fileno
#include "ntp_stdlib.h"
#include "ntp_assert.h"
#undef fileno
#include <ctype.h>
@ -37,6 +38,10 @@
# include <stdio.h>
#endif
#ifdef HAVE_STDATOMIC_H
# include <stdatomic.h>
#endif /* HAVE_STDATOMIC_H */
/*
* This driver supports a reference clock attached thru shared memory
*/
@ -117,6 +122,7 @@ struct shmunit {
time_t max_delay; /* age/stale limit */
};
static struct shmTime*
getShmTime(
int unit,
@ -144,8 +150,8 @@ getShmTime(
msyslog(LOG_ERR, "SHM shmat (unit %d): %m", unit);
return NULL;
}
return p;
return p;
#else
static const char * nspref[2] = { "Local", "Global" };
@ -195,10 +201,14 @@ getShmTime(
return NULL;
}
return p;
#endif
return p;
/* NOTREACHED */
ENSURE(!"getShmTime(): Not reached.");
}
/*
* shm_start - attach to shared memory
*/
@ -348,10 +358,158 @@ shm_poll(
shm_clockstats(unit, peer);
}
enum segstat_t {
OK, NO_SEGMENT, NOT_READY, BAD_MODE, CLASH
};
struct shm_stat_t {
int status;
int mode;
struct timespec tvc, tvr, tvt;
int precision;
int leap;
};
static inline void memory_barrier(void)
{
#ifdef HAVE_ATOMIC_THREAD_FENCE
atomic_thread_fence(memory_order_seq_cst);
#endif /* HAVE_ATOMIC_THREAD_FENCE */
}
static enum segstat_t shm_query(volatile struct shmTime *shm_in, struct shm_stat_t *shm_stat)
/* try to grab a sample from the specified SHM segment */
{
volatile struct shmTime shmcopy, *shm = shm_in;
volatile int cnt;
unsigned int cns_new, rns_new;
/*
* This is the main routine. It snatches the time from the shm
* board and tacks on a local timestamp.
*/
if (shm == NULL) {
shm_stat->status = NO_SEGMENT;
return NO_SEGMENT;
}
/*@-type@*//* splint is confused about struct timespec */
shm_stat->tvc.tv_sec = shm_stat->tvc.tv_nsec = 0;
{
time_t now;
time(&now);
shm_stat->tvc.tv_sec = now;
}
/* relying on word access to be atomic here */
if (shm->valid == 0) {
shm_stat->status = NOT_READY;
return NOT_READY;
}
cnt = shm->count;
/*
* This is proof against concurrency issues if either
* (a) the memory_barrier() call works on this host, or
* (b) memset compiles to an uninterruptible single-instruction bitblt.
*/
memory_barrier();
memcpy((void *)&shmcopy, (void *)shm, sizeof(struct shmTime));
shm->valid = 0;
memory_barrier();
/*
* Clash detection in case neither (a) nor (b) was true.
* Not supported in mode 0, and word access to the count field
* must be atomic for this to work.
*/
if (shmcopy.mode > 0 && cnt != shm->count) {
shm_stat->status = CLASH;
return shm_stat->status;
}
shm_stat->status = OK;
shm_stat->mode = shmcopy.mode;
switch (shmcopy.mode) {
case 0:
shm_stat->tvr.tv_sec = shmcopy.receiveTimeStampSec;
shm_stat->tvr.tv_nsec = shmcopy.receiveTimeStampUSec * 1000;
rns_new = shmcopy.receiveTimeStampNSec;
shm_stat->tvt.tv_sec = shmcopy.clockTimeStampSec;
shm_stat->tvt.tv_nsec = shmcopy.clockTimeStampUSec * 1000;
cns_new = shmcopy.clockTimeStampNSec;
/* Since the following comparisons are between unsigned
** variables they are always well defined, and any
** (signed) underflow will turn into very large unsigned
** values, well above the 1000 cutoff.
**
** Note: The usecs *must* be a *truncated*
** representation of the nsecs. This code will fail for
** *rounded* usecs, and the logic to deal with
** wrap-arounds in the presence of rounded values is
** much more convoluted.
*/
if ( ((cns_new - (unsigned)shm_stat->tvt.tv_nsec) < 1000)
&& ((rns_new - (unsigned)shm_stat->tvr.tv_nsec) < 1000)) {
shm_stat->tvt.tv_nsec = cns_new;
shm_stat->tvr.tv_nsec = rns_new;
}
/* At this point shm_stat->tvr and shm_stat->tvt contain valid ns-level
** timestamps, possibly generated by extending the old
** us-level timestamps
*/
break;
case 1:
shm_stat->tvr.tv_sec = shmcopy.receiveTimeStampSec;
shm_stat->tvr.tv_nsec = shmcopy.receiveTimeStampUSec * 1000;
rns_new = shmcopy.receiveTimeStampNSec;
shm_stat->tvt.tv_sec = shmcopy.clockTimeStampSec;
shm_stat->tvt.tv_nsec = shmcopy.clockTimeStampUSec * 1000;
cns_new = shmcopy.clockTimeStampNSec;
/* See the case above for an explanation of the
** following test.
*/
if ( ((cns_new - (unsigned)shm_stat->tvt.tv_nsec) < 1000)
&& ((rns_new - (unsigned)shm_stat->tvr.tv_nsec) < 1000)) {
shm_stat->tvt.tv_nsec = cns_new;
shm_stat->tvr.tv_nsec = rns_new;
}
/* At this point shm_stat->tvr and shm_stat->tvt contains valid ns-level
** timestamps, possibly generated by extending the old
** us-level timestamps
*/
break;
default:
shm_stat->status = BAD_MODE;
break;
}
/*@-type@*/
/*
* leap field is not a leap offset but a leap notification code.
* The values are magic numbers used by NTP and set by GPSD, if at all, in
* the subframe code.
*/
shm_stat->leap = shmcopy.leap;
shm_stat->precision = shmcopy.precision;
return shm_stat->status;
}
/*
* shm_timer - called onece every second.
* shm_timer - called once every second.
*
* This tries to grab a sample from the SHM segment
* This tries to grab a sample from the SHM segment, filtering bad ones
*/
static void
shm_timer(
@ -362,33 +520,20 @@ shm_timer(
struct refclockproc * const pp = peer->procptr;
struct shmunit * const up = pp->unitptr;
/* access order is important for lock-free SHM access; we
** enforce order by treating the whole structure volatile.
**
** IMPORTANT NOTE: This does not protect from reordering on CPU
** level, and it does nothing for cache consistency and
** visibility of changes by other cores. We need atomic and/or
** fence instructions for that.
*/
volatile struct shmTime *shm;
struct timespec tvr;
struct timespec tvt;
l_fp tsrcv;
l_fp tsref;
unsigned int c;
unsigned int cns_new, rns_new;
int cnt;
int c;
/* for formatting 'a_lastcode': */
struct calendar cd;
time_t tt, now;
time_t tt;
vint64 ts;
/*
* This is the main routine. It snatches the time from the shm
* board and tacks on a local timestamp.
*/
enum segstat_t status;
struct shm_stat_t shm_stat;
up->ticks++;
if ((shm = up->shm) == NULL) {
/* try to map again - this may succeed if meanwhile some-
@ -400,88 +545,43 @@ shm_timer(
return;
}
}
if ( ! shm->valid) {
DPRINTF(1, ("%s: SHM not ready\n",
refnumtoa(&peer->srcadr)));
up->notready++;
return;
}
switch (shm->mode) {
case 0:
tvr.tv_sec = shm->receiveTimeStampSec;
tvr.tv_nsec = shm->receiveTimeStampUSec * 1000;
rns_new = shm->receiveTimeStampNSec;
tvt.tv_sec = shm->clockTimeStampSec;
tvt.tv_nsec = shm->clockTimeStampUSec * 1000;
cns_new = shm->clockTimeStampNSec;
/* Since the following comparisons are between unsigned
** variables they are always well defined, and any
** (signed) underflow will turn into very large unsigned
** values, well above the 1000 cutoff.
**
** Note: The usecs *must* be a *truncated*
** representation of the nsecs. This code will fail for
** *rounded* usecs, and the logic to deal with
** wrap-arounds in the presence of rounded values is
** much more convoluted.
*/
if ( ((cns_new - (unsigned)tvt.tv_nsec) < 1000)
&& ((rns_new - (unsigned)tvr.tv_nsec) < 1000)) {
tvt.tv_nsec = cns_new;
tvr.tv_nsec = rns_new;
}
/* At this point tvr and tvt contains valid ns-level
** timestamps, possibly generated by extending the old
** us-level timestamps
*/
DPRINTF(2, ("%s: SHM type 0 sample\n",
refnumtoa(&peer->srcadr)));
break;
case 1:
cnt = shm->count;
tvr.tv_sec = shm->receiveTimeStampSec;
tvr.tv_nsec = shm->receiveTimeStampUSec * 1000;
rns_new = shm->receiveTimeStampNSec;
tvt.tv_sec = shm->clockTimeStampSec;
tvt.tv_nsec = shm->clockTimeStampUSec * 1000;
cns_new = shm->clockTimeStampNSec;
if (cnt != shm->count) {
DPRINTF(1, ("%s: type 1 access clash\n",
refnumtoa(&peer->srcadr)));
msyslog (LOG_NOTICE, "SHM: access clash in shared memory");
up->clash++;
return;
}
/* See the case above for an explanation of the
** following test.
*/
if ( ((cns_new - (unsigned)tvt.tv_nsec) < 1000)
&& ((rns_new - (unsigned)tvr.tv_nsec) < 1000)) {
tvt.tv_nsec = cns_new;
tvr.tv_nsec = rns_new;
}
/* At this point tvr and tvt contains valid ns-level
** timestamps, possibly generated by extending the old
** us-level timestamps
*/
DPRINTF(2, ("%s: SHM type 1 sample\n",
refnumtoa(&peer->srcadr)));
break;
/* query the segment, atomically */
status = shm_query(shm, &shm_stat);
switch (status) {
case OK:
DPRINTF(2, ("%s: SHM type %d sample\n",
refnumtoa(&peer->srcadr), shm_stat.mode));
break;
case NO_SEGMENT:
/* should never happen, but is harmless */
return;
case NOT_READY:
DPRINTF(1, ("%s: SHM not ready\n",refnumtoa(&peer->srcadr)));
up->notready++;
return;
case BAD_MODE:
DPRINTF(1, ("%s: SHM type blooper, mode=%d\n",
refnumtoa(&peer->srcadr), shm->mode));
up->bad++;
msyslog (LOG_ERR, "SHM: bad mode found in shared memory: %d",
shm->mode);
return;
case CLASH:
DPRINTF(1, ("%s: type 1 access clash\n",
refnumtoa(&peer->srcadr)));
msyslog (LOG_NOTICE, "SHM: access clash in shared memory");
up->clash++;
return;
default:
DPRINTF(1, ("%s: SHM type blooper, mode=%d\n",
refnumtoa(&peer->srcadr), shm->mode));
up->bad++;
msyslog (LOG_ERR, "SHM: bad mode found in shared memory: %d",
shm->mode);
return;
DPRINTF(1, ("%s: internal error, unknown SHM fetch status\n",
refnumtoa(&peer->srcadr)));
msyslog (LOG_NOTICE, "internal error, unknown SHM fetch status");
up->bad++;
return;
}
shm->valid = 0;
/* format the last time code in human-readable form into
* 'pp->a_lastcode'. Someone claimed: "NetBSD has incompatible
@ -489,7 +589,7 @@ shm_timer(
* around that potential problem. BTW, simply casting a pointer
* is a receipe for disaster on some architectures.
*/
tt = (time_t)tvt.tv_sec;
tt = (time_t)shm_stat.tvt.tv_sec;
ts = time_to_vint64(&tt);
ntpcal_time_to_date(&cd, &ts);
@ -498,12 +598,11 @@ shm_timer(
"%04u-%02u-%02uT%02u:%02u:%02u.%09ldZ",
cd.year, cd.month, cd.monthday,
cd.hour, cd.minute, cd.second,
(long)tvt.tv_nsec);
(long)shm_stat.tvt.tv_nsec);
pp->lencode = (c < sizeof(pp->a_lastcode)) ? c : 0;
/* check 1: age control of local time stamp */
time(&now);
tt = now - tvr.tv_sec;
tt = shm_stat.tvc.tv_sec - shm_stat.tvr.tv_sec;
if (tt < 0 || tt > up->max_delay) {
DPRINTF(1, ("%s:SHM stale/bad receive time, delay=%llds\n",
refnumtoa(&peer->srcadr), (long long)tt));
@ -514,7 +613,7 @@ shm_timer(
}
/* check 2: delta check */
tt = tvr.tv_sec - tvt.tv_sec - (tvr.tv_nsec < tvt.tv_nsec);
tt = shm_stat.tvr.tv_sec - shm_stat.tvt.tv_sec - (shm_stat.tvr.tv_nsec < shm_stat.tvt.tv_nsec);
if (tt < 0)
tt = -tt;
if (up->max_delta > 0 && tt > up->max_delta) {
@ -529,10 +628,10 @@ shm_timer(
/* if we really made it to this point... we're winners! */
DPRINTF(2, ("%s: SHM feeding data\n",
refnumtoa(&peer->srcadr)));
tsrcv = tspec_stamp_to_lfp(tvr);
tsref = tspec_stamp_to_lfp(tvt);
pp->leap = shm->leap;
peer->precision = shm->precision;
tsrcv = tspec_stamp_to_lfp(shm_stat.tvr);
tsref = tspec_stamp_to_lfp(shm_stat.tvt);
pp->leap = shm_stat.leap;
peer->precision = shm_stat.precision;
refclock_process_offset(pp, tsref, tsrcv, pp->fudgetime1);
up->good++;
}

View File

@ -240,7 +240,7 @@ true_debug(struct peer *peer, const char *fmt, ...)
"/tmp/true%d.debug", up->unit);
fd = open(filename, O_CREAT | O_WRONLY | O_EXCL,
0600);
if (fd >= 0 && (up->debug = fdopen(fd, "r+"))) {
if (fd >= 0 && (up->debug = fdopen(fd, "w"))) {
#ifdef HAVE_SETVBUF
static char buf[BUFSIZ];

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -21,6 +20,61 @@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -40,10 +94,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
EXTRA_PROGRAMS = ntpdate$(EXEEXT)
DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/bincheck.mf \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf
subdir = ntpdate
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@ -75,6 +125,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -84,6 +135,8 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
@ -97,9 +150,22 @@ am__DEPENDENCIES_1 =
ntpdate_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/sntp/libevent/build-aux/depcomp
am__depfiles_maybe = depfiles
@ -110,27 +176,49 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = ntpdate.c
DIST_SOURCES = ntpdate.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bincheck.mf \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf \
$(top_srcdir)/sntp/libevent/build-aux/depcomp README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -181,6 +269,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -297,6 +386,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -429,7 +519,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/bincheck.mf $(top_sr
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpdate/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign ntpdate/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -438,6 +527,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_srcdir)/bincheck.mf $(top_srcdir)/sntp/check-libntp.mf $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@ -449,14 +539,19 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -477,7 +572,8 @@ uninstall-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
@ -492,14 +588,19 @@ clean-binPROGRAMS:
rm -f $$list
install-libexecPROGRAMS: $(libexec_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -520,7 +621,8 @@ uninstall-libexecPROGRAMS:
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
@ -535,14 +637,19 @@ clean-libexecPROGRAMS:
rm -f $$list
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -563,7 +670,8 @@ uninstall-sbinPROGRAMS:
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(sbindir)" && rm -f $$files
@ -576,7 +684,8 @@ clean-sbinPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
ntpdate$(EXEEXT): $(ntpdate_OBJECTS) $(ntpdate_DEPENDENCIES)
ntpdate$(EXEEXT): $(ntpdate_OBJECTS) $(ntpdate_DEPENDENCIES) $(EXTRA_ntpdate_DEPENDENCIES)
@rm -f ntpdate$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ntpdate_OBJECTS) $(ntpdate_LDADD) $(LIBS)
@ -591,26 +700,23 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
@ -618,26 +724,15 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -649,15 +744,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -666,6 +757,21 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -719,10 +825,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -813,22 +924,25 @@ uninstall-am: uninstall-binPROGRAMS uninstall-libexecPROGRAMS \
.MAKE: all check install install-am install-exec-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libexecPROGRAMS clean-libtool \
clean-sbinPROGRAMS ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-exec-hook \
install-html install-html-am install-info install-info-am \
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
clean-binPROGRAMS clean-generic clean-libexecPROGRAMS \
clean-libtool clean-sbinPROGRAMS cscopelist-am ctags ctags-am \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-exec-hook install-html \
install-html-am install-info install-info-am \
install-libexecPROGRAMS install-man install-pdf install-pdf-am \
install-ps install-ps-am install-sbinPROGRAMS install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-libexecPROGRAMS uninstall-sbinPROGRAMS
.PRECIOUS: Makefile
$(PROGRAMS): $(LDADD)

View File

@ -1,9 +1,8 @@
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.in generated by automake 1.15 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -22,6 +21,61 @@
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@ -41,11 +95,6 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
EXTRA_PROGRAMS = ntpdc$(EXEEXT) ntpdc-layout$(EXEEXT)
DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/nl.pl.in \
$(top_srcdir)/bincheck.mf $(top_srcdir)/check-libopts.mf \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf
subdir = ntpdc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@ -77,6 +126,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
$(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
$(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
$(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
$(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
@ -86,6 +136,8 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = nl.pl
@ -102,12 +154,25 @@ ntpdc_DEPENDENCIES = version.o $(am__DEPENDENCIES_1) \
../libntp/libntp.a $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
ntpdc_layout_SOURCES = ntpdc-layout.c
ntpdc_layout_OBJECTS = ntpdc-layout.$(OBJEXT)
ntpdc_layout_DEPENDENCIES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/sntp/libevent/build-aux/depcomp
am__depfiles_maybe = depfiles
@ -118,24 +183,25 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo " CC " $@;
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo " CCLD " $@;
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo " GEN " $@;
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(ntpdc_SOURCES) ntpdc-layout.c
DIST_SOURCES = $(ntpdc_SOURCES) ntpdc-layout.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@ -157,14 +223,42 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
man1dir = $(mandir)/man1
man8dir = $(mandir)/man8
NROFF = nroff
MANS = $(man1_MANS) $(man8_MANS) $(man_MANS)
DATA = $(html_DATA) $(noinst_DATA)
HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/nl.pl.in \
$(top_srcdir)/bincheck.mf $(top_srcdir)/check-libopts.mf \
$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf \
$(top_srcdir)/sntp/check-libntp.mf \
$(top_srcdir)/sntp/libevent/build-aux/depcomp README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
@ -215,6 +309,7 @@ GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
GTEST_LDFLAGS = @GTEST_LDFLAGS@
GTEST_LIBS = @GTEST_LIBS@
HAVE_INLINE = @HAVE_INLINE@
HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
INSTALL = @INSTALL@
@ -331,6 +426,7 @@ PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
PATH_PERL = @PATH_PERL@
PATH_RUBY = @PATH_RUBY@
PATH_SEPARATOR = @PATH_SEPARATOR@
PATH_TEST = @PATH_TEST@
PERLLIBDIR = @PERLLIBDIR@
@ -511,7 +607,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/bincheck.mf $(top_sr
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpdc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign ntpdc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
@ -520,6 +615,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_srcdir)/bincheck.mf $(top_srcdir)/check-libopts.mf $(top_srcdir)/sntp/check-libntp.mf $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@ -533,14 +629,19 @@ nl.pl: $(top_builddir)/config.status $(srcdir)/nl.pl.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -561,7 +662,8 @@ uninstall-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
@ -576,14 +678,19 @@ clean-binPROGRAMS:
rm -f $$list
install-libexecPROGRAMS: $(libexec_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -604,7 +711,8 @@ uninstall-libexecPROGRAMS:
@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
@ -619,14 +727,19 @@ clean-libexecPROGRAMS:
rm -f $$list
install-sbinPROGRAMS: $(sbin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@ -647,7 +760,8 @@ uninstall-sbinPROGRAMS:
@list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(sbindir)" && rm -f $$files
@ -660,10 +774,12 @@ clean-sbinPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
ntpdc$(EXEEXT): $(ntpdc_OBJECTS) $(ntpdc_DEPENDENCIES)
ntpdc$(EXEEXT): $(ntpdc_OBJECTS) $(ntpdc_DEPENDENCIES) $(EXTRA_ntpdc_DEPENDENCIES)
@rm -f ntpdc$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ntpdc_OBJECTS) $(ntpdc_LDADD) $(LIBS)
ntpdc-layout$(EXEEXT): $(ntpdc_layout_OBJECTS) $(ntpdc_layout_DEPENDENCIES)
ntpdc-layout$(EXEEXT): $(ntpdc_layout_OBJECTS) $(ntpdc_layout_DEPENDENCIES) $(EXTRA_ntpdc_layout_DEPENDENCIES)
@rm -f ntpdc-layout$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ntpdc_layout_OBJECTS) $(ntpdc_layout_LDADD) $(LIBS)
@ -681,26 +797,23 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
@ -709,11 +822,18 @@ clean-libtool:
-rm -rf .libs _libs
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.1[a-z]*$$/p'; \
@list1='$(man1_MANS)'; \
list2='$(man_MANS)'; \
test -n "$(man1dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.1[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
@ -742,16 +862,21 @@ uninstall-man1:
sed -n '/\.1[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
test -z "$$files" || { \
echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
install-man8: $(man8_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
@list='$(man8_MANS)'; test -n "$(man8dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.8[a-z]*$$/p'; \
@list1='$(man8_MANS)'; \
list2='$(man_MANS)'; \
test -n "$(man8dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.8[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
@ -780,13 +905,14 @@ uninstall-man8:
sed -n '/\.8[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
test -z "$$files" || { \
echo " ( cd '$(DESTDIR)$(man8dir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man8dir)" && rm -f $$files; }
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
install-htmlDATA: $(html_DATA)
@$(NORMAL_INSTALL)
test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
@list='$(html_DATA)'; test -n "$(htmldir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
$(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
@ -800,30 +926,17 @@ uninstall-htmlDATA:
@$(NORMAL_UNINSTALL)
@list='$(html_DATA)'; test -n "$(htmldir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(htmldir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(htmldir)" && rm -f $$files
dir='$(DESTDIR)$(htmldir)'; $(am__uninstall_files_from_dir)
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
@ -835,15 +948,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
@ -852,24 +961,26 @@ GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
if test -n "$$list" && \
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
echo " typically \`make maintainer-clean' will remove them" >&2; \
exit 1; \
else :; fi; \
else :; fi
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@ -918,10 +1029,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
@ -1014,25 +1130,27 @@ uninstall-man: uninstall-man1 uninstall-man8
.MAKE: all check install install-am install-exec-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
clean-generic clean-libexecPROGRAMS clean-libtool \
clean-sbinPROGRAMS ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-binPROGRAMS install-data install-data-am \
install-data-local install-dvi install-dvi-am install-exec \
install-exec-am install-exec-hook install-html install-html-am \
install-htmlDATA install-info install-info-am \
install-libexecPROGRAMS install-man install-man1 install-man8 \
install-pdf install-pdf-am install-ps install-ps-am \
install-sbinPROGRAMS install-strip installcheck \
installcheck-am installdirs maintainer-clean \
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
clean-binPROGRAMS clean-generic clean-libexecPROGRAMS \
clean-libtool clean-sbinPROGRAMS cscopelist-am ctags ctags-am \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-binPROGRAMS \
install-data install-data-am install-data-local install-dvi \
install-dvi-am install-exec install-exec-am install-exec-hook \
install-html install-html-am install-htmlDATA install-info \
install-info-am install-libexecPROGRAMS install-man \
install-man1 install-man8 install-pdf install-pdf-am \
install-ps install-ps-am install-sbinPROGRAMS install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-binPROGRAMS \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
uninstall-htmlDATA uninstall-libexecPROGRAMS uninstall-man \
uninstall-man1 uninstall-man8 uninstall-sbinPROGRAMS
.PRECIOUS: Makefile
install-data-local: install-html

Some files were not shown because too many files have changed in this diff Show More