From 4ded1c1fa0bc21c61f91a2dbe864835986745121 Mon Sep 17 00:00:00 2001 From: roberto Date: Sun, 17 Aug 2008 17:37:33 +0000 Subject: Flatten the dist and various 4.n.n trees in preparation of future ntp imports. --- contrib/ntp/scripts/Makefile.am | 4 - contrib/ntp/scripts/Makefile.in | 345 ---- contrib/ntp/scripts/README | 43 - contrib/ntp/scripts/calc_tickadj.in | 38 - contrib/ntp/scripts/checktime.in | 79 - contrib/ntp/scripts/fixautomakedepsmagic | 28 - contrib/ntp/scripts/freq_adj.in | 97 -- contrib/ntp/scripts/hpadjtime.sh | 18 - contrib/ntp/scripts/mkver.in | 43 - contrib/ntp/scripts/monitoring/README | 158 -- .../ntp/scripts/monitoring/loopwatch.config.SAMPLE | 89 -- contrib/ntp/scripts/monitoring/lr.pl | 151 -- contrib/ntp/scripts/monitoring/ntp.pl | 479 ------ contrib/ntp/scripts/monitoring/ntploopstat | 458 ------ contrib/ntp/scripts/monitoring/ntploopwatch | 1667 -------------------- contrib/ntp/scripts/monitoring/ntptrap | 463 ------ contrib/ntp/scripts/monitoring/timelocal.pl | 77 - contrib/ntp/scripts/ntp-close | 8 - contrib/ntp/scripts/ntp-groper | 95 -- contrib/ntp/scripts/ntp-restart | 10 - contrib/ntp/scripts/ntp-status | 45 - contrib/ntp/scripts/ntp-wait.in | 42 - contrib/ntp/scripts/ntpsweep.in | 301 ---- contrib/ntp/scripts/ntptrace.in | 60 - contrib/ntp/scripts/ntpver.in | 7 - contrib/ntp/scripts/plot_summary.in | 337 ---- contrib/ntp/scripts/rc1/postinstall | 2 - contrib/ntp/scripts/rc1/preinstall | 6 - contrib/ntp/scripts/rc1/preremove | 4 - contrib/ntp/scripts/rc1/prototype | 19 - contrib/ntp/scripts/rc1/xntp | 29 - contrib/ntp/scripts/rc2/local.ntpd | 64 - contrib/ntp/scripts/stats/README | 39 - contrib/ntp/scripts/stats/README.stats | 246 --- contrib/ntp/scripts/stats/README.timecodes | 149 -- contrib/ntp/scripts/stats/clock.awk | 431 ----- contrib/ntp/scripts/stats/dupe.awk | 8 - contrib/ntp/scripts/stats/ensemble.S | 5 - contrib/ntp/scripts/stats/ensemble.awk | 17 - contrib/ntp/scripts/stats/etf.S | 15 - contrib/ntp/scripts/stats/etf.awk | 19 - contrib/ntp/scripts/stats/itf.S | 5 - contrib/ntp/scripts/stats/itf.awk | 19 - contrib/ntp/scripts/stats/loop.S | 7 - contrib/ntp/scripts/stats/loop.awk | 45 - contrib/ntp/scripts/stats/loop_summary | 2 - contrib/ntp/scripts/stats/peer.awk | 68 - contrib/ntp/scripts/stats/psummary.awk | 82 - contrib/ntp/scripts/stats/summary.sh | 88 -- contrib/ntp/scripts/stats/tdata.S | 5 - contrib/ntp/scripts/stats/tdata.awk | 45 - contrib/ntp/scripts/summary.in | 373 ----- contrib/ntp/scripts/support/README | 73 - contrib/ntp/scripts/support/bin/monl | 213 --- contrib/ntp/scripts/support/bin/mvstats | 23 - contrib/ntp/scripts/support/conf/hp300.hp300 | 0 contrib/ntp/scripts/support/conf/hp700.hp700 | 0 .../ntp/scripts/support/conf/hp700.hp700.faui47 | 0 contrib/ntp/scripts/support/conf/hp800.hp800 | 0 contrib/ntp/scripts/support/conf/ntp.conf | 3 - contrib/ntp/scripts/support/conf/sun3.sun3 | 0 contrib/ntp/scripts/support/conf/sun4.sun4.faui01 | 0 contrib/ntp/scripts/support/conf/sun4.sun4.faui10 | 0 contrib/ntp/scripts/support/conf/sun4.sun4.faui45 | 0 contrib/ntp/scripts/support/conf/sun4.sun4c | 0 .../ntp/scripts/support/conf/sun4.sun4c.Lucifer | 0 contrib/ntp/scripts/support/conf/sun4.sun4m | 0 contrib/ntp/scripts/support/conf/sun4.sun4m.faui42 | 0 .../ntp/scripts/support/conf/sun4.sun4m.faui45m | 0 contrib/ntp/scripts/support/conf/tickconf | 19 - contrib/ntp/scripts/support/etc/cron | 18 - contrib/ntp/scripts/support/etc/crontab | 8 - contrib/ntp/scripts/support/etc/install | 67 - contrib/ntp/scripts/support/etc/rc | 198 --- contrib/ntp/scripts/support/etc/setup | 72 - 75 files changed, 7628 deletions(-) delete mode 100644 contrib/ntp/scripts/Makefile.am delete mode 100644 contrib/ntp/scripts/Makefile.in delete mode 100644 contrib/ntp/scripts/README delete mode 100644 contrib/ntp/scripts/calc_tickadj.in delete mode 100644 contrib/ntp/scripts/checktime.in delete mode 100644 contrib/ntp/scripts/fixautomakedepsmagic delete mode 100644 contrib/ntp/scripts/freq_adj.in delete mode 100755 contrib/ntp/scripts/hpadjtime.sh delete mode 100644 contrib/ntp/scripts/mkver.in delete mode 100644 contrib/ntp/scripts/monitoring/README delete mode 100644 contrib/ntp/scripts/monitoring/loopwatch.config.SAMPLE delete mode 100644 contrib/ntp/scripts/monitoring/lr.pl delete mode 100644 contrib/ntp/scripts/monitoring/ntp.pl delete mode 100644 contrib/ntp/scripts/monitoring/ntploopstat delete mode 100644 contrib/ntp/scripts/monitoring/ntploopwatch delete mode 100644 contrib/ntp/scripts/monitoring/ntptrap delete mode 100644 contrib/ntp/scripts/monitoring/timelocal.pl delete mode 100755 contrib/ntp/scripts/ntp-close delete mode 100755 contrib/ntp/scripts/ntp-groper delete mode 100755 contrib/ntp/scripts/ntp-restart delete mode 100755 contrib/ntp/scripts/ntp-status delete mode 100644 contrib/ntp/scripts/ntp-wait.in delete mode 100644 contrib/ntp/scripts/ntpsweep.in delete mode 100755 contrib/ntp/scripts/ntptrace.in delete mode 100644 contrib/ntp/scripts/ntpver.in delete mode 100644 contrib/ntp/scripts/plot_summary.in delete mode 100644 contrib/ntp/scripts/rc1/postinstall delete mode 100644 contrib/ntp/scripts/rc1/preinstall delete mode 100644 contrib/ntp/scripts/rc1/preremove delete mode 100644 contrib/ntp/scripts/rc1/prototype delete mode 100644 contrib/ntp/scripts/rc1/xntp delete mode 100644 contrib/ntp/scripts/rc2/local.ntpd delete mode 100644 contrib/ntp/scripts/stats/README delete mode 100644 contrib/ntp/scripts/stats/README.stats delete mode 100644 contrib/ntp/scripts/stats/README.timecodes delete mode 100755 contrib/ntp/scripts/stats/clock.awk delete mode 100755 contrib/ntp/scripts/stats/dupe.awk delete mode 100755 contrib/ntp/scripts/stats/ensemble.S delete mode 100755 contrib/ntp/scripts/stats/ensemble.awk delete mode 100755 contrib/ntp/scripts/stats/etf.S delete mode 100755 contrib/ntp/scripts/stats/etf.awk delete mode 100755 contrib/ntp/scripts/stats/itf.S delete mode 100755 contrib/ntp/scripts/stats/itf.awk delete mode 100755 contrib/ntp/scripts/stats/loop.S delete mode 100755 contrib/ntp/scripts/stats/loop.awk delete mode 100755 contrib/ntp/scripts/stats/loop_summary delete mode 100755 contrib/ntp/scripts/stats/peer.awk delete mode 100755 contrib/ntp/scripts/stats/psummary.awk delete mode 100755 contrib/ntp/scripts/stats/summary.sh delete mode 100755 contrib/ntp/scripts/stats/tdata.S delete mode 100755 contrib/ntp/scripts/stats/tdata.awk delete mode 100644 contrib/ntp/scripts/summary.in delete mode 100644 contrib/ntp/scripts/support/README delete mode 100644 contrib/ntp/scripts/support/bin/monl delete mode 100644 contrib/ntp/scripts/support/bin/mvstats delete mode 100644 contrib/ntp/scripts/support/conf/hp300.hp300 delete mode 100644 contrib/ntp/scripts/support/conf/hp700.hp700 delete mode 100644 contrib/ntp/scripts/support/conf/hp700.hp700.faui47 delete mode 100644 contrib/ntp/scripts/support/conf/hp800.hp800 delete mode 100644 contrib/ntp/scripts/support/conf/ntp.conf delete mode 100644 contrib/ntp/scripts/support/conf/sun3.sun3 delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4.faui01 delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4.faui10 delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4.faui45 delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4c delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4c.Lucifer delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4m delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4m.faui42 delete mode 100644 contrib/ntp/scripts/support/conf/sun4.sun4m.faui45m delete mode 100644 contrib/ntp/scripts/support/conf/tickconf delete mode 100644 contrib/ntp/scripts/support/etc/cron delete mode 100644 contrib/ntp/scripts/support/etc/crontab delete mode 100644 contrib/ntp/scripts/support/etc/install delete mode 100644 contrib/ntp/scripts/support/etc/rc delete mode 100644 contrib/ntp/scripts/support/etc/setup (limited to 'contrib/ntp/scripts') diff --git a/contrib/ntp/scripts/Makefile.am b/contrib/ntp/scripts/Makefile.am deleted file mode 100644 index dc41963..0000000 --- a/contrib/ntp/scripts/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -bin_SCRIPTS = ntp-wait ntptrace -noinst_SCRIPTS = calc_tickadj checktime freq_adj mkver ntpsweep ntpver plot_summary summary -EXTRA_DIST = fixautomakedepsmagic hpadjtime.sh monitoring ntp-close \ - ntp-groper ntp-restart ntp-status rc1 rc2 stats support diff --git a/contrib/ntp/scripts/Makefile.in b/contrib/ntp/scripts/Makefile.in deleted file mode 100644 index ff2c46b..0000000 --- a/contrib/ntp/scripts/Makefile.in +++ /dev/null @@ -1,345 +0,0 @@ -# Makefile.in generated by automake 1.7.7 from Makefile.am. -# @configure_input@ - -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 -# 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. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. - -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -ARLIB_DIR = @ARLIB_DIR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CHUTEST = @CHUTEST@ -CLKTEST = @CLKTEST@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DCFD = @DCFD@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EF_LIBS = @EF_LIBS@ -EF_PROGS = @EF_PROGS@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LCRYPTO = @LCRYPTO@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBPARSE = @LIBPARSE@ -LIBS = @LIBS@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MAKE_ADJTIMED = @MAKE_ADJTIMED@ -MAKE_CHECK_Y2K = @MAKE_CHECK_Y2K@ -MAKE_LIBNTPSIM = @MAKE_LIBNTPSIM@ -MAKE_LIBPARSE = @MAKE_LIBPARSE@ -MAKE_LIBPARSE_KERNEL = @MAKE_LIBPARSE_KERNEL@ -MAKE_NTPDSIM = @MAKE_NTPDSIM@ -MAKE_NTPTIME = @MAKE_NTPTIME@ -MAKE_NTP_KEYGEN = @MAKE_NTP_KEYGEN@ -MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ -MAKE_SNTP = @MAKE_SNTP@ -MAKE_TICKADJ = @MAKE_TICKADJ@ -MAKE_TIMETRIM = @MAKE_TIMETRIM@ -OBJEXT = @OBJEXT@ -OPENSSL = @OPENSSL@ -OPENSSL_INC = @OPENSSL_INC@ -OPENSSL_LIB = @OPENSSL_LIB@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_PERL = @PATH_PERL@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PATH_SH = @PATH_SH@ -PROPDELAY = @PROPDELAY@ -RANLIB = @RANLIB@ -READLINE_LIBS = @READLINE_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TESTDCF = @TESTDCF@ -U = @U@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -subdirs = @subdirs@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -bin_SCRIPTS = ntp-wait ntptrace -noinst_SCRIPTS = calc_tickadj checktime freq_adj mkver ntpsweep ntpver plot_summary summary -EXTRA_DIST = fixautomakedepsmagic hpadjtime.sh monitoring ntp-close \ - ntp-groper ntp-restart ntp-status rc1 rc2 stats support - -subdir = scripts -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = calc_tickadj checktime freq_adj mkver ntp-wait \ - ntpsweep ntptrace ntpver plot_summary summary -SCRIPTS = $(bin_SCRIPTS) $(noinst_SCRIPTS) - -DIST_SOURCES = -DIST_COMMON = README $(srcdir)/Makefile.in Makefile.am calc_tickadj.in \ - checktime.in freq_adj.in mkver.in ntp-wait.in ntpsweep.in \ - ntptrace.in ntpver.in plot_summary.in summary.in -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu scripts/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) -calc_tickadj: $(top_builddir)/config.status calc_tickadj.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -checktime: $(top_builddir)/config.status checktime.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -freq_adj: $(top_builddir)/config.status freq_adj.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -mkver: $(top_builddir)/config.status mkver.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -ntp-wait: $(top_builddir)/config.status ntp-wait.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -ntpsweep: $(top_builddir)/config.status ntpsweep.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -ntptrace: $(top_builddir)/config.status ntptrace.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -ntpver: $(top_builddir)/config.status ntpver.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -plot_summary: $(top_builddir)/config.status plot_summary.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -summary: $(top_builddir)/config.status summary.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -binSCRIPT_INSTALL = $(INSTALL_SCRIPT) -install-binSCRIPTS: $(bin_SCRIPTS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(bindir) - @list='$(bin_SCRIPTS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f $$d$$p; then \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \ - $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \ - else :; fi; \ - done - -uninstall-binSCRIPTS: - @$(NORMAL_UNINSTALL) - @list='$(bin_SCRIPTS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ - rm -f $(DESTDIR)$(bindir)/$$f; \ - done -uninstall-info-am: -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -top_distdir = .. -distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkinstalldirs) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(SCRIPTS) - -installdirs: - $(mkinstalldirs) $(DESTDIR)$(bindir) -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic mostlyclean-am - -distclean: distclean-am - -rm -f Makefile - -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: install-binSCRIPTS - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile - -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binSCRIPTS uninstall-info-am - -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am info info-am install \ - install-am install-binSCRIPTS install-data install-data-am \ - install-exec install-exec-am install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ - uninstall-am uninstall-binSCRIPTS uninstall-info-am - -# 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. -.NOEXPORT: diff --git a/contrib/ntp/scripts/README b/contrib/ntp/scripts/README deleted file mode 100644 index 673ddb4..0000000 --- a/contrib/ntp/scripts/README +++ /dev/null @@ -1,43 +0,0 @@ -README file for directory ./scripts of the NTP Version 4 distribution - -This directory contains shell and perl script files for the configuration, -monitoring and support of NTP installations. See the README and RELNOTES -files in the parent directory for directions on how to use these files. - -calc_tickadj Calculates "optimal" value for tick given ntp.drift file - -freq_adj Calculates and optionally sets the clock frequency - based on ntp.drift . For FreeBSD systems. - -mkver.in script to create new version numbers for all sources - -monitoring directory containing perl scripts useful for monitoring - operations - -rc1 start/stop scripts for NTP - -rc2 start/stop script for NTP - -ntp-close find public stratum 2 servers that don't respond - -ntp-groper script useful for reaching out and rattling the cages of - NTP peers to see if animals are inside the bars - -ntp-restart script useful for killing and restarting the NTP daemon - -ntp-wait Blocks until ntpd is in state 4 (synchronized). - Hopefully useful at boot time, to delay the boot sequence - until after "ntpd -g" has set the time. - -ntpsweep prints per host given in the NTP stratum level, the - clock offset in seconds, the daemon version, the operating - system and the processor. - -ntpver What version of the NTP daemon is running? - -stats directory containing awk and shell scripts useful for - maintaining statistics summaries of clockstats, loopstats - and peerstats files - -support directory containing shell and perl scripts useful for - configuration and monitoring of NTP subnets diff --git a/contrib/ntp/scripts/calc_tickadj.in b/contrib/ntp/scripts/calc_tickadj.in deleted file mode 100644 index 32eae12..0000000 --- a/contrib/ntp/scripts/calc_tickadj.in +++ /dev/null @@ -1,38 +0,0 @@ -#! @PATH_PERL@ -# -# drift of 104.8576 -> +1 tick. Base of 10000 ticks. -# -# 970306 HMS Deal with nanoseconds. Fix sign of adjustments. - -$df="/etc/ntp.drift"; -# Assumes a 100Hz box with "tick" of 10000 -# Someday, we might call "tickadj" for better values... -$base=10000; # tick: 1,000,000 / HZ -$cvt=104.8576; # 2 ** 20 / $base -$v1=0.; -$v2=""; - -if (open(DF, $df)) - { - if ($_=) - { - ($v1, $v2) = split; - } - - while ($v1 < 0) - { - $v1 += $cvt; - $base--; - } - - while ($v1 > $cvt) - { - $v1 -= $cvt; - $base++; - } - } - -printf("%.3f (drift)\n", $v1); - -printf("%d usec; %d nsec\n", $base, ($base + ($v1/$cvt)) * 1000); - diff --git a/contrib/ntp/scripts/checktime.in b/contrib/ntp/scripts/checktime.in deleted file mode 100644 index 2fe8f71..0000000 --- a/contrib/ntp/scripts/checktime.in +++ /dev/null @@ -1,79 +0,0 @@ -#! @PATH_PERL@ -#! @PATH_PERL@ -d -# -# This script compares the time of several machines with the -# time on the local host. -# -# Use or modify it as you wish. -# -# As the original author is only expecting 14 minutes of fame, -# leaving his name attached would be appreciated. -# -# R. Gary Cutbill -# 21 April 1999 -# -$tol=2.0; -$|=1; -print "Time Check"; - -open(HOSTS,"ypcat hosts.byaddr |"); # get a list of hosts from the yp server. - -while ($line=) { # loop for each host getting the offset compared to localhost - ($addr,$host,$aliases)=split(/\s+/,$line,3); - $res=`/usr/local/bin/ntptrace -m 1 -r 1 -t 1 $host`; - print "."; - chop $res; - push (@results,$res); -} -print "\n"; - - -# -# Sort the list of hosts, and print out there offsets -# from the local host. -# -@list=sort appropriately @results; -foreach $i ( @list ) { - - @dargs=split(/\s+/,$i); - if ( $dargs[1] eq "\*Timeout\*" ) { - print "$i\n"; - chop $dargs[0]; - push(@down,$dargs[0]); - } else { - printf "%-25s %7s %3s %6s %10s %5s %8s %8s\n",@dargs; - if ( ( $dargs[4] > $tol ) || ( $dargs[4] < -$tol ) ) { - chop $dargs[0]; - push(@toofarout,$dargs[0]); } - } -} -# -# When the above list finishes, hosts that are different by +/- $tol (two seconds) -# are in @toofarout. Hosts that are down are in @down. They are treated the same -# way here, but you might want to do something different depending on your site. -# -# print a set of suggested rsh commands to run on the hosts that -# don't have "good" time. "restartntp" is left as an excersize to the reader. -# I usually use it to kill a running xntpd, ntpdate some server, and the start xntp -# again. -# -print "\nConsider:\n"; -foreach $i ( (@down,@toofarout) ) { - print " rsh $i sudo restartntp\n"; -} - - -# -# sort the results from the list. First by stratum, then by time deviation -# Put hosts that didn't respond (timed out) on the bottom. -# -sub appropriately { - @af=split(/\s+/,$a); - @bf=split(/\s+/,$b); - $aba= ($af[4]<0)?-$af[4]:$af[4]; - $abb= ($bf[4]<0)?-$bf[4]:$bf[4]; - - ( $af[1] ne $bf[1] ) ? $bf[1] cmp $af[1] : - ( ( $af[2] != $bf[2] ) ? ( $bf[2] <=> $af[2] ) : - ( ( $aba != $abb ) ? ( $abb <=> $aba ) : ($af[0] cmp $bf[0] ) ) ); -} diff --git a/contrib/ntp/scripts/fixautomakedepsmagic b/contrib/ntp/scripts/fixautomakedepsmagic deleted file mode 100644 index ec82bba..0000000 --- a/contrib/ntp/scripts/fixautomakedepsmagic +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -prog=`basename $0` - - -t=/tmp/$prog.$$ - -trap 'rm -f ${t} ; exit 1' 1 3 15 - -while [ $# -gt 0 ]; do - f=$1 - shift - sed -e '/^DEPS_MAGIC :=/,/^-include \$/s/^/#/' $f > $t - c="diff $f $t" - echo $c - $c - tstatus=$? - if [ $tstatus = 0 ]; then - echo "$prog":" $f not modified" - elif [ ! -w $f ]; then - echo "$prog":" $f not not writable" - else - c="cp $t $f" - echo $c - $c - fi - rm -f $t -done diff --git a/contrib/ntp/scripts/freq_adj.in b/contrib/ntp/scripts/freq_adj.in deleted file mode 100644 index 88eb390..0000000 --- a/contrib/ntp/scripts/freq_adj.in +++ /dev/null @@ -1,97 +0,0 @@ -#! @PATH_PERL@ -w - -die "perl5 needed\n" unless ($] > 5); - -use Getopt::Std; -use vars qw($opt_n); - -getopts('d:nt:'); - -#chop($ncpu = `sysctl -n hw.ncpu`); -#die "Found $ncpu CPUs; can only be run on systems with 1 CPU.\n" if ($ncpu > 1); - -$driftfile = "/etc/ntp.drift"; -$driftfile = $opt_d if defined($opt_d); - -chop($timer = `sysctl -n kern.timecounter.hardware 2> /dev/null`); - -$timer =~ tr/\U/\L/; - -if ($timer eq '') { - open(DM, "/var/run/dmesg.boot"); - while() { - # Timecounter "i8254" frequency 1193182 Hz - if (/^Timecounter "(\w+)"\s+/) { - $timer = $1; - last; - } - } - close(DM); -} - -$opt_t = $timer if !defined($opt_t); - -if ($timer ne '') { # $timer found... - if ($opt_t ne '') { # - and $opt_t found - if ($timer ne $opt_t) { # - - and they differ - warn "You specified a $opt_t timer but I detected a $timer timer.\n"; - usage(); - exit 1; - } else { # - - and they are the same - ; - } - } else { # - but no $opt_t specified; this is OK - ; - } -} else { # No $timer found... - if ($opt_t ne '') { # - but $opt_t was specified - $timer = $opt_t; # - - so use it. - } else { # - and neither was $opt_t - warn "I can't tell what timer you have. Please specify one.\n"; - usage(); - exit 1; - } -} - -open(DF, $driftfile) || die "Can't open driftfile ($driftfile): $!\n"; -while() { - chop; - if (/^(-?\d+\.\d+)(\s\d)?$/) { - $drift = $1; - } else { - die "Bogus value in driftfile $driftfile: <$_>\n"; - } -} -close(DF); - -print "NTP drift is <$drift>\n"; - -# Convert from NTP's idea of PPM to a decimal equivalent -$freq_adj = int ( $drift * ( 10 ** 6 / 2 ** 20) ); -print "normalized freq_adj is <$freq_adj>\n"; - -$freq_adj = int ( ( $freq_adj - 1 ) / 2 ); -print "Applying freq_adj of <".-$freq_adj.">\n"; - -$sysctl = "machdep.".$timer."_freq"; - -chop($mach_freq = `sysctl -n $sysctl`); - -print "$sysctl is <$mach_freq>\n"; - -$n_mach_freq = $mach_freq - $freq_adj; - -if (defined($opt_n)) { - print "$sysctl $mach_freq -> $n_mach_freq\n"; -} else { - print "i8254: ".`sysctl -w $sysctl=$n_mach_freq`; -} - -sub usage { - print STDERR < .version -fi -RUN="`cat .version`" -RUN="`expr $RUN + 1`" -echo $RUN > .version - -ConfStr="$ConfStr (${RUN})" - -echo "Version <${ConfStr}>"; - -rm -f version.c -cat > version.c << -EoF- -/* - * version file for $PROG - */ -#include -const char * Version = "${ConfStr}"; --EoF- diff --git a/contrib/ntp/scripts/monitoring/README b/contrib/ntp/scripts/monitoring/README deleted file mode 100644 index f8eb0a9..0000000 --- a/contrib/ntp/scripts/monitoring/README +++ /dev/null @@ -1,158 +0,0 @@ -This directory contains support for monitoring the local clock of xntp daemons. - -WARNING: The scripts and routines contained in this directory are beta - release! Do not depend on their correct operation. They are, - however, in regular use at University of Erlangen-Nuernberg. - No severe problems are known for this code. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -PLEASE THINK TWICE BEFORE STARTING MONITORING REMOTE XNTP DEAMONS !!!! -MONITORING MAY INCREASE THE LOAD OF THE DEAMON MONITORED AND MAY -INCREASE THE NETWORK LOAD SIGNIFICANTLY -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - -Files are: - -README: - This file - -ntptrap: - perl script to log ntp mode 6 trap messages. - - It sends a set_trap request to each server given and dumps the - trap messages received. It handles refresh of set_trap. - Currently it handles only NTP V2, however the NTP V3 servers - also accept v2 requests. It will not interpret v3 system and - peer stati correctly. - - usage: - ntptrap [-n] [-p ] [-l ] servers... - - -n: do not send set_trap requests - - port: port to listen for responses - useful if you have a configured trap - - debug-output: file to write trace output to (for debugging) - - This script convinced me that ntp trap messages are only of - little use. - -ntploopstat: - perl script to gather loop info statistics from xntpd via mode 7 - LOOP_INFO requests. - - This script collects data to allow monitoring of remote xntp servers - where it is not possible to directly access the loopstats file - produced by xntpd itself. Of course, it can be used to sample - a local server if it is not configured to produce a loopstats file. - - Please note, this program poses a high load on the server as - a communication takes place every delay seconds ! USE WITH CARE ! - - usage: - ntploopstat [-d] [-t] [-l ] [-v] [ntpserver] - - delay: number of seconds to wait between samples - default: 60 seconds - timeout: number of seconds to wait for reply - default 12 seconds - logfile: file to log samples to - default: loopstats:: - (note the trailing colon) - This name actually is a prefix. - The file name is dynamically derived by appending - the name of the month the sample belongs to. - Thus all samples of a month end up in the same file. - - the format of the files generated is identical to the format used by - xntpd with the loopstats file: - MJD offset frequency compliance - - if a timeout occurs the next sample is tried after delay/2 seconds - - The script will terminate after MAX_FAIL (currently 60) - consecutive errors. - - Errors are counted for: - - error on send call - - error on select call - - error on recv call - - short packet received - - bad packet - - error on open for logfile - -ntploopwatch: - perl script to display loop filter statistics collected by ntploopstat - or dumped directly by xntpd. - - Gnuplot is used to produce a graphical representation of the sample - values, that have been preprocessed and analysed by this script. - - It can either be called to produce a printout of specific data set or - used to continously monitor the values. Monitoring is achieved by - periodically reprocessing the logfiles, which are updated regularly - either by a running ntploopstat process or by the running xntpd. - - usage: - to watch statistics permanently: - ntploopwatch [-v[]] [-c ] [-d ] - - to get a single print out specify also - -P [-s] - [-S ] [-E ] - [-O ] [-o ] - - level: level of verbosity for debugging - config-file: file to read configurable settings from - On each iteration it is checked and reread - if it has been changed - default: loopwatch.config - working-dir: specify working directory for process, affects - interpretation of relative file names - - All other flags are only useful with printing plots, as otherwise - command line values would be replaced by settings from the config file. - - printer: specify printer to print plot - BSD print systems semantics apply; if printer - is omitted the name "ps" is used; plots are - prepared using PostScript, thus the printer - should best accept postscript input - - For the following see also the comments in loopwatch.config.SAMPLE - - samples: use last # samples from input data - start-time: ignore input samples before this date - end-time: ignore input samples after this date - if both start-time and end-time are specified - a given samples value is ignored - MaxOffs: - MinOffs: restrict value range - -loopwatch.config.SAMPLE: - sample config file for ntploopwatch - each configurable option is explained there - -lr.pl: - linear regression package used by ntploopwatch to compute - linear approximations for frequency and offset values - within display range - -timelocal.pl: - - used during conversion of ISO_DATE_TIME values specified in - loopwatch config files to unix epoch values (seconds since - 1970-01-01_00:00_00 UTC) - - A version of this file is distributed with perl-4.x, however, - it has a bug related to dates crossing 1970, causing endless loops.. - The version contained here has been fixed. - -ntp.pl: - perl support for ntp v2 mode 6 message handling - WARNING: This code is beta level - it triggers a memory leak; - as for now it is not quite clear, wether this is caused by a - bug in perl or by bad usage of perl within this script. - diff --git a/contrib/ntp/scripts/monitoring/loopwatch.config.SAMPLE b/contrib/ntp/scripts/monitoring/loopwatch.config.SAMPLE deleted file mode 100644 index 8cefea3..0000000 --- a/contrib/ntp/scripts/monitoring/loopwatch.config.SAMPLE +++ /dev/null @@ -1,89 +0,0 @@ -# sample configuration and control file for ntploowatch -# -# delay: sampling interval in seconds -delay=60 -# samples: use only last # samples -samples=600 -# DO NOT USE srcprefix in shared config files -# srcprefix: name of file to read samples from -# current time suffix (month name) is appended -# defaults to "./var@$STATHOST/loopstats." -# The string "$STATHOST"is replaced by the name of the host -# being monitored -#srcprefix=./var@$STATHOST/loopstats. -# -# showoffs: yes/no control display of offset values -showoffs=yes -# -# showfreq: yes/no control display of frequency values -showfreq=yes -# -# showcmpl: yes/no control display of compliance values -showcmpl=no -# -# showoreg: yes/no control display of linear regression of offset values -showoreg=no -# -# showfreg: yes/no control display of linear regression of frequency values -showfreg=no -# -# timebase: dynamic/ISO_DATE_TIME point of zero for linear regression -# ISO_DATE_TIME: yyyy-mm-dd_hh:mm:ss.ms -# values are interpreted using local time zone -# parts omitted from front default to current date/time -# parts omitted from end default to lowest permitted values -# to get aa:bb being interpreted as minutes:seconds use aa:bb.0 -# for dynamic '00:00:00.0 of current day' is used -timebase=dynamic -# -# freqbase: dynamic/ -# if a number is given, subtract this from sampling values for display -# if dynamic is selected, freqbase is adjusted to fit into the range of -# offset values -freqbase=dynamic -# -# cmplscale: dynamic/ -# if a number is given, the sampling values are divided by this number -# if dynamic is selected, cmplscale is adjusted to fit into the range of -# offset values -cmplscale=dynamic -# -# DumbScale: 0/1 -# 0 enables dynamic adjust of value ranges for freqbase and cmplscale -# timescale is labeled with human readable times -# 1 only uses explicit scaling for numbers -# timescale is labeled with hours relative to timebase -DumbScale=0 -# -# StartTime: none/ISO_DATE_TIME -# ignore any samples before the specified date -StartTime=none -# -# EndTime: none/ISO_DATE_TIME -# ignore any samples after the specified date -# -# if both StartTime and EndTime are specified -# the value specified for samples is ignored -EndTime=none -# -# MaxOffs: none/ -# limit display (y-axis) to values not larger than -MaxOffset=none -# -# MinOffs: none/ -# limit display (y-axis) to values not smaller than -MinOffset=none - -# -# verbose: -# specify level for debugging -# default is 0 for printing and 1 for monitoring -# level 1 will just print a timestamp for any display update -# (this is every delay seconds) -verbose=1 -# -# deltaT: -# mark `holes' in the sample data grater than -# by a break in the plot -# default: 512 seconds -deltaT=512 diff --git a/contrib/ntp/scripts/monitoring/lr.pl b/contrib/ntp/scripts/monitoring/lr.pl deleted file mode 100644 index 7980d22..0000000 --- a/contrib/ntp/scripts/monitoring/lr.pl +++ /dev/null @@ -1,151 +0,0 @@ -;# -;# lr.pl,v 3.1 1993/07/06 01:09:08 jbj Exp -;# -;# -;# Linear Regression Package for perl -;# to be 'required' from perl -;# -;# Copyright (c) 1992 -;# Frank Kardel, Rainer Pruy -;# Friedrich-Alexander Universitaet Erlangen-Nuernberg -;# -;# Copyright (c) 1997 by -;# Ulrich Windl -;# (Converted to a PERL 5.004 package) -;# -;############################################################# - -package lr; - -## -## y = A + Bx -## -## B = (n * Sum(xy) - Sum(x) * Sum(y)) / (n * Sum(x^2) - Sum(x)^2) -## -## A = (Sum(y) - B * Sum(x)) / n -## - -## -## interface -## -;# init(tag); initialize data set for tag -;# sample(x, y, tag); enter sample -;# Y(x, tag); compute y for given x -;# X(y, tag); compute x for given y -;# r(tag); regression coefficient -;# cov(tag); covariance -;# A(tag); -;# B(tag); -;# sigma(tag); standard deviation -;# mean(tag); -######################### - -sub init -{ - my $self = shift; - - $self->{n} = 0; - $self->{sx} = 0.0; - $self->{sx2} = 0.0; - $self->{sxy} = 0.0; - $self->{sy} = 0.0; - $self->{sy2} = 0.0; -} - -sub sample($$$) -{ - my $self = shift; - my($_x, $_y) = @_; - - ++($self->{n}); - $self->{sx} += $_x; - $self->{sy} += $_y; - $self->{sxy} += $_x * $_y; - $self->{sx2} += $_x**2; - $self->{sy2} += $_y**2; -} - -sub B($) -{ - my $self = shift; - - return 1 unless ($self->{n} * $self->{sx2} - $self->{sx}**2); - return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) - / ($self->{n} * $self->{sx2} - $self->{sx}**2); -} - -sub A($) -{ - my $self = shift; - - return ($self->{sy} - B($self) * $self->{sx}) / $self->{n}; -} - -sub Y($$) -{ - my $self = shift; - - return A($self) + B($self) * $_[$[]; -} - -sub X($$) -{ - my $self = shift; - - return ($_[$[] - A($self)) / B($self); -} - -sub r($) -{ - my $self = shift; - - my $s = ($self->{n} * $self->{sx2} - $self->{sx}**2) - * ($self->{n} * $self->{sy2} - $self->{sy}**2); - - return 1 unless $s; - - return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) / sqrt($s); -} - -sub cov($) -{ - my $self = shift; - - return ($self->{sxy} - $self->{sx} * $self->{sy} / $self->{n}) - / ($self->{n} - 1); -} - -sub sigma($) -{ - my $self = shift; - - return 0 if $self->{n} <= 1; - return sqrt(($self->{sy2} - ($self->{sy} * $self->{sy}) / $self->{n}) - / ($self->{n})); -} - -sub mean($) -{ - my $self = shift; - - return 0 if $self->{n} <= 0; - return $self->{sy} / $self->{n}; -} - -sub new -{ - my $class = shift; - my $self = { - (n => undef, - sx => undef, - sx2 => undef, - sxy => undef, - sy => undef, - sy2 => undef) - }; - bless $self, $class; - init($self); - return $self; -} - -1; diff --git a/contrib/ntp/scripts/monitoring/ntp.pl b/contrib/ntp/scripts/monitoring/ntp.pl deleted file mode 100644 index b23f396..0000000 --- a/contrib/ntp/scripts/monitoring/ntp.pl +++ /dev/null @@ -1,479 +0,0 @@ -#!/usr/bin/perl -w -;# -;# ntp.pl,v 3.1 1993/07/06 01:09:09 jbj Exp -;# -;# process loop filter statistics file and either -;# - show statistics periodically using gnuplot -;# - or print a single plot -;# -;# Copyright (c) 1992 -;# Rainer Pruy Friedrich-Alexander Universitaet Erlangen-Nuernberg -;# -;# -;############################################################# - -package ntp; - -$NTP_version = 2; -$ctrl_mode=6; - -$byte1 = (($NTP_version & 0x7)<< 3) & 0x34 | ($ctrl_mode & 0x7); -$MAX_DATA = 468; - -$sequence = 0; # initial sequence number incred before used -$pad=4; -$do_auth=0; # no possibility today -$keyid=0; -;#list if known keys (passwords) -%KEYS = ( 0, "\200\200\200\200\200\200\200\200", - ); - -;#----------------------------------------------------------------------------- -;# access routines for ntp control packet - ;# NTP control message format - ;# C LI|VN|MODE LI 2bit=00 VN 3bit=2(3) MODE 3bit=6 : $byte1 - ;# C R|E|M|Op R response E error M more Op opcode - ;# n sequence - ;# n status - ;# n associd - ;# n offset - ;# n count - ;# a+ data (+ padding) - ;# optional authentication data - ;# N key - ;# N2 checksum - -;# first byte of packet -sub pkt_LI { return ($_[$[] >> 6) & 0x3; } -sub pkt_VN { return ($_[$[] >> 3) & 0x7; } -sub pkt_MODE { return ($_[$[] ) & 0x7; } - -;# second byte of packet -sub pkt_R { return ($_[$[] & 0x80) == 0x80; } -sub pkt_E { return ($_[$[] & 0x40) == 0x40; } -sub pkt_M { return ($_[$[] & 0x20) == 0x20; } -sub pkt_OP { return $_[$[] & 0x1f; } - -;#----------------------------------------------------------------------------- - -sub setkey -{ - local($id,$key) = @_; - - $KEYS{$id} = $key if (defined($key)); - if (! defined($KEYS{$id})) - { - warn "Key $id not yet specified - key not changed\n"; - return undef; - } - return ($keyid,$keyid = $id)[$[]; -} - -;#----------------------------------------------------------------------------- -sub numerical { $a <=> $b; } - -;#----------------------------------------------------------------------------- - -sub send #' -{ - local($fh,$opcode, $associd, $data,$address) = @_; - $fh = caller(0)."'$fh"; - - local($junksize,$junk,$packet,$offset,$ret); - $offset = 0; - - $sequence++; - while(1) - { - $junksize = length($data); - $junksize = $MAX_DATA if $junksize > $MAX_DATA; - - ($junk,$data) = $data =~ /^(.{$junksize})(.*)$/; - $packet - = pack("C2n5a".(($junk eq "") ? 0 : &pad($junksize+12,$pad)-12), - $byte1, - ($opcode & 0x1f) | ($data ? 0x20 : 0), - $sequence, - 0, $associd, - $offset, $junksize, $junk); - if ($do_auth) - { - ;# not yet - } - $offset += $junksize; - - if (defined($address)) - { - $ret = send($fh, $packet, 0, $address); - } - else - { - $ret = send($fh, $packet, 0); - } - - if (! defined($ret)) - { - warn "send failed: $!\n"; - return undef; - } - elsif ($ret != length($packet)) - { - warn "send failed: sent only $ret from ".length($packet). "bytes\n"; - return undef; - } - return $sequence unless $data; - } -} - -;#----------------------------------------------------------------------------- -;# status interpretation -;# -sub getval -{ - local($val,*list) = @_; - - return $list{$val} if defined($list{$val}); - return sprintf("%s#%d",$list{"-"},$val) if defined($list{"-"}); - return "unknown-$val"; -} - -;#--------------------------------- -;# system status -;# -;# format: |LI|CS|SECnt|SECode| LI=2bit CS=6bit SECnt=4bit SECode=4bit -sub ssw_LI { return ($_[$[] >> 14) & 0x3; } -sub ssw_CS { return ($_[$[] >> 8) & 0x3f; } -sub ssw_SECnt { return ($_[$[] >> 4) & 0xf; } -sub ssw_SECode { return $_[$[] & 0xf; } - -%LI = ( 0, "leap_none", 1, "leap_add_sec", 2, "leap_del_sec", 3, "sync_alarm", "-", "leap"); -%ClockSource = (0, "sync_unspec", - 1, "sync_lf_clock", - 2, "sync_uhf_clock", - 3, "sync_hf_clock", - 4, "sync_local_proto", - 5, "sync_ntp", - 6, "sync_udp/time", - 7, "sync_wristwatch", - "-", "ClockSource", - ); - -%SystemEvent = (0, "event_unspec", - 1, "event_restart", - 2, "event_fault", - 3, "event_sync_chg", - 4, "event_sync/strat_chg", - 5, "event_clock_reset", - 6, "event_bad_date", - 7, "event_clock_excptn", - "-", "event", - ); -sub LI -{ - &getval(&ssw_LI($_[$[]),*LI); -} -sub ClockSource -{ - &getval(&ssw_CS($_[$[]),*ClockSource); -} - -sub SystemEvent -{ - &getval(&ssw_SECode($_[$[]),*SystemEvent); -} - -sub system_status -{ - return sprintf("%s, %s, %d event%s, %s", &LI($_[$[]), &ClockSource($_[$[]), - &ssw_SECnt($_[$[]), ((&ssw_SECnt($_[$[])==1) ? "" : "s"), - &SystemEvent($_[$[])); -} -;#--------------------------------- -;# peer status -;# -;# format: |PStat|PSel|PCnt|PCode| Pstat=6bit PSel=2bit PCnt=4bit PCode=4bit -sub psw_PStat_config { return ($_[$[] & 0x8000) == 0x8000; } -sub psw_PStat_authenable { return ($_[$[] & 0x4000) == 0x4000; } -sub psw_PStat_authentic { return ($_[$[] & 0x2000) == 0x2000; } -sub psw_PStat_reach { return ($_[$[] & 0x1000) == 0x1000; } -sub psw_PStat_sane { return ($_[$[] & 0x0800) == 0x0800; } -sub psw_PStat_dispok { return ($_[$[] & 0x0400) == 0x0400; } -sub psw_PStat { return ($_[$[] >> 10) & 0x3f; } -sub psw_PSel { return ($_[$[] >> 8) & 0x3; } -sub psw_PCnt { return ($_[$[] >> 4) & 0xf; } -sub psw_PCode { return $_[$[] & 0xf; } - -%PeerSelection = (0, "sel_reject", - 1, "sel_candidate", - 2, "sel_selcand", - 3, "sel_sys.peer", - "-", "PeerSel", - ); -%PeerEvent = (0, "event_unspec", - 1, "event_ip_err", - 2, "event_authen", - 3, "event_unreach", - 4, "event_reach", - 5, "event_clock_excptn", - 6, "event_stratum_chg", - "-", "event", - ); - -sub PeerSelection -{ - &getval(&psw_PSel($_[$[]),*PeerSelection); -} - -sub PeerEvent -{ - &getval(&psw_PCode($_[$[]),*PeerEvent); -} - -sub peer_status -{ - local($x) = (""); - $x .= "config," if &psw_PStat_config($_[$[]); - $x .= "authenable," if &psw_PStat_authenable($_[$[]); - $x .= "authentic," if &psw_PStat_authentic($_[$[]); - $x .= "reach," if &psw_PStat_reach($_[$[]); - $x .= &psw_PStat_sane($_[$[]) ? "sane," : "insane,"; - $x .= "hi_disp," unless &psw_PStat_dispok($_[$[]); - - $x .= sprintf(" %s, %d event%s, %s", &PeerSelection($_[$[]), - &psw_PCnt($_[$[]), ((&psw_PCnt($_[$[]) == 1) ? "" : "s"), - &PeerEvent($_[$[])); - return $x; -} - -;#--------------------------------- -;# clock status -;# -;# format: |CStat|CEvnt| CStat=8bit CEvnt=8bit -sub csw_CStat { return ($_[$[] >> 8) & 0xff; } -sub csw_CEvnt { return $_[$[] & 0xff; } - -%ClockStatus = (0, "clk_nominal", - 1, "clk_timeout", - 2, "clk_badreply", - 3, "clk_fault", - 4, "clk_prop", - 5, "clk_baddate", - 6, "clk_badtime", - "-", "clk", - ); - -sub clock_status -{ - return sprintf("%s, last %s", - &getval(&csw_CStat($_[$[]),*ClockStatus), - &getval(&csw_CEvnt($_[$[]),*ClockStatus)); -} - -;#--------------------------------- -;# error status -;# -;# format: |Err|reserved| Err=8bit -;# -sub esw_Err { return ($_[$[] >> 8) & 0xff; } - -%ErrorStatus = (0, "err_unspec", - 1, "err_auth_fail", - 2, "err_invalid_fmt", - 3, "err_invalid_opcode", - 4, "err_unknown_assoc", - 5, "err_unknown_var", - 6, "err_invalid_value", - 7, "err_adm_prohibit", - ); - -sub error_status -{ - return sprintf("%s", &getval(&esw_Err($_[$[]),*ErrorStatus)); -} - -;#----------------------------------------------------------------------------- -;# -;# cntrl op name translation - -%CntrlOpName = (1, "read_status", - 2, "read_variables", - 3, "write_variables", - 4, "read_clock_variables", - 5, "write_clock_variables", - 6, "set_trap", - 7, "trap_response", - 31, "unset_trap", # !!! unofficial !!! - "-", "cntrlop", - ); - -sub cntrlop_name -{ - return &getval($_[$[],*CntrlOpName); -} - -;#----------------------------------------------------------------------------- - -$STAT_short_pkt = 0; -$STAT_pkt = 0; - -;# process a NTP control message (response) packet -;# returns a list ($ret,$data,$status,$associd,$op,$seq,$auth_keyid) -;# $ret: undef --> not yet complete -;# "" --> complete packet received -;# "ERROR" --> error during receive, bad packet, ... -;# else --> error packet - list may contain useful info - - -sub handle_packet -{ - local($pkt,$from) = @_; # parameters - local($len_pkt) = (length($pkt)); -;# local(*FRAGS,*lastseen); - local($li_vn_mode,$r_e_m_op,$seq,$status,$associd,$offset,$count,$data); - local($autch_keyid,$auth_cksum); - - $STAT_pkt++; - if ($len_pkt < 12) - { - $STAT_short_pkt++; - return ("ERROR","short packet received"); - } - - ;# now break packet apart - ($li_vn_mode,$r_e_m_op,$seq,$status,$associd,$offset,$count,$data) = - unpack("C2n5a".($len_pkt-12),$pkt); - $data=substr($data,$[,$count); - if ((($len_pkt - 12) - &pad($count,4)) >= 12) - { - ;# looks like an authenticator - ($auth_keyid,$auth_cksum) = - unpack("Na8",substr($pkt,$len_pkt-12+$[,12)); - $STAT_auth++; - ;# no checking of auth_cksum (yet ?) - } - - if (&pkt_VN($li_vn_mode) != $NTP_version) - { - $STAT_bad_version++; - return ("ERROR","version ".&pkt_VN($li_vn_mode)."packet ignored"); - } - - if (&pkt_MODE($li_vn_mode) != $ctrl_mode) - { - $STAT_bad_mode++; - return ("ERROR", "mode ".&pkt_MODE($li_vn_mode)." packet ignored"); - } - - ;# handle single fragment fast - if ($offset == 0 && &pkt_M($r_e_m_op) == 0) - { - $STAT_single_frag++; - if (&pkt_E($r_e_m_op)) - { - $STAT_err_pkt++; - return (&error_status($status), - $data,$status,$associd,&pkt_OP($r_e_m_op),$seq, - $auth_keyid); - } - else - { - return ("", - $data,$status,$associd,&pkt_OP($r_e_m_op),$seq, - $auth_keyid); - } - } - else - { - ;# fragment - set up local name space - $id = "$from$seq".&pkt_OP($r_e_m_op); - $ID{$id} = 1; - *FRAGS = "$id FRAGS"; - *lastseen = "$id lastseen"; - - $STAT_frag++; - - $lastseen = 1 if !&pkt_M($r_e_m_op); - if (!defined(%FRAGS)) - { - print((&pkt_M($r_e_m_op) ? " more" : "")."\n"); - $FRAGS{$offset} = $data; - ;# save other info - @FRAGS = ($status,$associd,&pkt_OP($r_e_m_op),$seq,$auth_keyid,$r_e_m_op); - } - else - { - print((&pkt_M($r_e_m_op) ? " more" : "")."\n"); - ;# add frag to previous - combine on the fly - if (defined($FRAGS{$offset})) - { - $STAT_dup_frag++; - return ("ERROR","duplicate fragment at $offset seq=$seq"); - } - - $FRAGS{$offset} = $data; - - undef($loff); - foreach $off (sort numerical keys(%FRAGS)) - { - next unless defined($FRAGS{$off}); - if (defined($loff) && - ($loff + length($FRAGS{$loff})) == $off) - { - $FRAGS{$loff} .= $FRAGS{$off}; - delete $FRAGS{$off}; - last; - } - $loff = $off; - } - - ;# return packet if all frags arrived - ;# at most two frags with possible padding ??? - if ($lastseen && defined($FRAGS{0}) && - (((scalar(@x=sort numerical keys(%FRAGS)) == 2) && - (length($FRAGS{0}) + 8) > $x[$[+1]) || - (scalar(@x=sort numerical keys(%FRAGS)) < 2))) - { - @x=((&pkt_E($r_e_m_op) ? &error_status($status) : ""), - $FRAGS{0},@FRAGS); - &pkt_E($r_e_m_op) ? $STAT_err_frag++ : $STAT_frag_all++; - undef(%FRAGS); - undef(@FRAGS); - undef($lastseen); - delete $ID{$id}; - &main'clear_timeout($id); - return @x; - } - else - { - &main'set_timeout($id,time+$timeout,"&ntp'handle_packet_timeout(\"".unpack("H*",$id)."\");"); #'"; - } - } - return (undef); - } -} - -sub handle_packet_timeout -{ - local($id) = @_; - local($r_e_m_op,*FRAGS,*lastseen,@x) = (@FRAGS[$[+5]); - - *FRAGS = "$id FRAGS"; - *lastseen = "$id lastseen"; - - @x=((&pkt_E($r_e_m_op) ? &error_status($status) : "TIMEOUT"), - $FRAGS{0},@FRAGS[$[ .. $[+4]); - $STAT_frag_timeout++; - undef(%FRAGS); - undef(@FRAGS); - undef($lastseen); - delete $ID{$id}; - return @x; -} - - -sub pad -{ - return $_[$[+1] * int(($_[$[] + $_[$[+1] - 1) / $_[$[+1]); -} - -1; diff --git a/contrib/ntp/scripts/monitoring/ntploopstat b/contrib/ntp/scripts/monitoring/ntploopstat deleted file mode 100644 index 7583c7c..0000000 --- a/contrib/ntp/scripts/monitoring/ntploopstat +++ /dev/null @@ -1,458 +0,0 @@ -#!/usr/bin/perl -w -# --*-perl-*- -;# -;# ntploopstat,v 3.1 1993/07/06 01:09:11 jbj Exp -;# -;# Poll NTP server using NTP mode 7 loopinfo request. -;# Log info and timestamp to file for processing by ntploopwatch. -;# -;# -;# Copyright (c) 1992 -;# Rainer Pruy Friedrich-Alexander Universitaet Erlangen-Nuernberg -;# -;################################################################# -;# -;# The format written to the logfile is the same as used by xntpd -;# for the loopstats file. -;# This script however allows to gather loop filter statistics from -;# remote servers where you do not have access to the loopstats logfile. -;# -;# Please note: Communication delays affect the accuracy of the -;# timestamps recorded. Effects from these delays will probably -;# not show up, as timestamps are recorded to the second only. -;# (Should have implemented &gettimeofday()..) -;# - -$0 =~ s!^.*/([^/]+)$!$1!; # beautify script name - -$ntpserver = 'localhost'; # default host to poll -$delay = 60; # default sampling rate - ;# keep it shorter than minpoll (=64) - ;# to get all values - -require "ctime.pl"; -;# handle bug in early ctime distributions -$ENV{'TZ'} = 'MET' unless defined($ENV{'TZ'}) || $] > 4.010; - -if (defined(@ctime'MoY)) -{ - *MonthName = *ctime'MoY; -} -else -{ - @MonthName = ('Jan','Feb','Mar','Apr','May','Jun', - 'Jul','Aug','Sep','Oct','Nov','Dec'); -} - -;# this routine can be redefined to point to syslog if necessary -sub msg -{ - return unless $verbose; - - print STDERR "$0: "; - printf STDERR @_; -} - -;############################################################# -;# -;# process command line -$usage = <<"E-O-S"; - -usage: - $0 [-d] [-t] [-l ] [-v] [ntpserver] -E-O-S - -while($_ = shift) -{ - /^-v(\d*)$/ && ($verbose=($1 eq '') ? 1 : $1,1) && next; - /^-d(\d*)$/ && - do { - ($1 ne '') && ($delay = $1,1) && next; - @ARGV || die("$0: delay value missing after -d\n$usage"); - $delay = shift; - ($delay >= 0) || die("$0: bad delay value \"$delay\"\n$usage"); - next; - }; - /^-l$/ && - do { - @ARGV || die("$0: logfile missing after -l\n$usage"); - $logfile = shift; - next; - }; - /^-t(\d*(\.\d*)?)$/ && - do { - ($1 ne '') && ($timeout = $1,1) && next; - @ARGV || die("$0: timeout value missing after -t\n$usage\n"); - $timeout = shift; - ($timeout > 0) || - die("$0: bad timeout value \"$timeout\"\n$usage"); - next; - }; - - /^-/ && die("$0: unknown option \"$_\"\n$usage"); - - ;# any other argument is server to poll - $ntpserver = $_; - last; -} - -if (@ARGV) -{ - warn("unexpected arguments: ".join(" ",@ARGV).".\n"); - die("$0: too many servers specified\n$usage"); -} - -;# logfile defaults to include server name -;# The name of the current month is appended and -;# the file is opened and closed for each sample. -;# -$logfile = "loopstats:$ntpserver." unless defined($logfile); -$timeout = 12.0 unless defined($timeout); # wait $timeout seconds for reply - -$MAX_FAIL = 60; # give up after $MAX_FAIL failed polls - - -$MJD_1970 = 40587; - -if (eval 'require "syscall.ph";') -{ - if (defined(&SYS_gettimeofday)) - { - ;# assume standard - ;# gettimeofday(struct timeval *tp,struct timezone *tzp) - ;# syntax for gettimeofday syscall - ;# tzp = NULL -> undef - ;# tp = (long,long) - eval 'sub time { local($tz) = pack("LL",0,0); - (&msg("gettimeofday failed: $!\n"), - return (time)) - unless syscall(&SYS_gettimeofday,$tz,undef) == 0; - local($s,$us) = unpack("LL",$tz); - return $s + $us/1000000; }'; - local($t1,$t2,$t3); - $t1 = time; - eval '$t2 = &time;'; - $t3 = time; - die("$0: gettimeofday failed: $@.\n") if defined($@) && $@; - die("$0: gettimeofday inconsistency time=$t1,gettimeofday=$t2,time=$t2\n") - if (int($t1) != int($t2) && int($t3) != int($t2)); - &msg("Using gettimeofday for timestamps\n"); - } - else - { - warn("No gettimeofday syscall found - using time builtin for timestamps\n"); - eval 'sub time { return time; }'; - } -} -else -{ - warn("No syscall.ph file found - using time builtin for timestamps\n"); - eval 'sub time { return time; }'; -} - - -;#------------------+ -;# from ntp_request.h -;#------------------+ - -;# NTP mode 7 packet format: -;# Byte 1: ResponseBit MoreBit Version(3bit) Mode(3bit)==7 -;# Byte 2: AuthBit Sequence # - 0 - 127 see MoreBit -;# Byte 3: Implementation # -;# Byte 4: Request Code -;# -;# Short 1: Err(3bit) NumItems(12bit) -;# Short 2: MBZ(3bit)=0 DataItemSize(12bit) -;# 0 - 500 byte Data -;# if AuthBit is set: -;# Long: KeyId -;# 2xLong: AuthCode - -;# -$IMPL_XNTPD = 2; -$REQ_LOOP_INFO = 8; - - -;# request packet for REQ_LOOP_INFO: -;# B1: RB=0 MB=0 V=2 M=7 -;# B2: S# = 0 -;# B3: I# = IMPL_XNTPD -;# B4: RC = REQ_LOOP_INFO -;# S1: E=0 NI=0 -;# S2: MBZ=0 DIS=0 -;# data: 32 byte 0 padding -;# 8byte timestamp if encryption, 0 padding otherwise -$loopinfo_reqpkt = - pack("CCCC nn x32 x8", 0x17, 0, $IMPL_XNTPD, $REQ_LOOP_INFO, 0, 0); - -;# ignore any auth data in packets -$loopinfo_response_size = - 1+1+1+1+2+2 # header size like request pkt - + 8 # l_fp last_offset - + 8 # l_fp drift_comp - + 4 # u_long compliance - + 4 # u_long watchdog_timer - ; -$loopinfo_response_fmt = "C4n2N2N2NN"; -$loopinfo_response_fmt_v2 = "C4n2N2N2N2N"; - -;# -;# prepare connection to server -;# - -;# workaround for broken socket.ph on dynix_ptx -eval 'sub INTEL {1;}' unless defined(&INTEL); -eval 'sub ATT {1;}' unless defined(&ATT); - -require "sys/socket.ph"; - -require 'netinet/in.ph'; - -;# if you do not have netinet/in.ph enable the following lines -;#eval 'sub INADDR_ANY { 0x00000000; }' unless defined(&INADDR_ANY); -;#eval 'sub IPPRORO_UDP { 17; }' unless defined(&IPPROTO_UDP); - -if ($ntpserver =~ /^((0x?)?\w+)\.((0x?)?\w+)\.((0x?)?\w+)\.((0x?)?\w+)$/) -{ - local($a,$b,$c,$d) = ($1,$3,$5,$7); - $a = oct($a) if defined($2); - $b = oct($b) if defined($4); - $c = oct($c) if defined($6); - $d = oct($d) if defined($8); - $server_addr = pack("C4", $a,$b,$c,$d); - - $server_mainname - = (gethostbyaddr($server_addr,&AF_INET))[$[] || $ntpserver; -} -else -{ - ($server_mainname,$server_addr) - = (gethostbyname($ntpserver))[$[,$[+4]; - - die("$0: host \"$ntpserver\" is unknown\n") - unless defined($server_addr); -} -&msg ("Address of server \"$ntpserver\" is \"%d.%d.%d.%d\"\n", - unpack("C4",$server_addr)); - -$proto_udp = (getprotobyname('udp'))[$[+2] || &IPPROTO_UDP; - -$ntp_port = - (getservbyname('ntp','udp'))[$[+2] || - (warn "Could not get port number for service \"ntp/udp\" using 123\n"), - ($ntp_port=123); - -;# -0 && &SOCK_DGRAM; # satisfy perl -w ... -socket(S, &AF_INET, &SOCK_DGRAM, $proto_udp) || - die("Cannot open socket: $!\n"); - -bind(S, pack("S n N x8", &AF_INET, 0, &INADDR_ANY)) || - die("Cannot bind: $!\n"); - -($my_port, $my_addr) = (unpack("S n a4 x8",getsockname(S)))[$[+1,$[+2]; - -&msg("Listening at address %d.%d.%d.%d port %d\n", - unpack("C4",$my_addr), $my_port); - -$server_inaddr = pack("Sna4x8", &AF_INET, $ntp_port, $server_addr); - -;############################################################ -;# -;# the main loop: -;# send request -;# get reply -;# wait til next sample time - -undef($lasttime); -$lostpacket = 0; - -while(1) -{ - $stime = &time; - - &msg("Sending request $stime...\n"); - - $ret = send(S,$loopinfo_reqpkt,0,$server_inaddr); - - if (! defined($ret) || $ret < length($loopinfo_reqpkt)) - { - warn("$0: send failed ret=($ret): $!\n"); - $fail++; - next; - } - - &msg("Waiting for reply...\n"); - - $mask = ""; vec($mask,fileno(S),1) = 1; - $ret = select($mask,undef,undef,$timeout); - - if (! defined($ret)) - { - warn("$0: select failed: $!\n"); - $fail++; - next; - } - elsif ($ret == 0) - { - warn("$0: request to $ntpserver timed out ($timeout seconds)\n"); - ;# do not count this event as failure - ;# it usually this happens due to dropped udp packets on noisy and - ;# havily loaded lines, so just try again; - $lostpacket = 1; - next; - } - - &msg("Receiving reply...\n"); - - $len = 520; # max size of a mode 7 packet - $reply = ""; # just make it defined for -w - $ret = recv(S,$reply,$len,0); - - if (!defined($ret)) - { - warn("$0: recv failed: $!\n"); - $fail++; - next; - } - - $etime = &time; - &msg("Received at\t$etime\n"); - - ;#$time = ($stime + $etime) / 2; # symmetric delay assumed - $time = $etime; # the above assumption breaks for X25 - ;# so taking etime makes timestamps be a - ;# little late, but keeps them increasing - ;# monotonously - - &msg(sprintf("Reply from %d.%d.%d.%d took %f seconds\n", - (unpack("SnC4",$ret))[$[+2 .. $[+5], ($etime - $stime))); - - if ($len < $loopinfo_response_size) - { - warn("$0: short packet ($len bytes) received ($loopinfo_response_size bytes expected\n"); - $fail++; - next; - } - - ($b1,$b2,$b3,$b4,$s1,$s2, - $offset_i,$offset_f,$drift_i,$drift_f,$compl,$watchdog) - = unpack($loopinfo_response_fmt,$reply); - - ;# check reply - if (($s1 >> 12) != 0) # error ! - { - die("$0: got error reply ".($s1>>12)."\n"); - } - if (($b1 != 0x97 && $b1 != 0x9f) || # Reply NotMore V=2 M=7 - ($b2 != 0 && $b2 != 0x80) || # S=0 Auth no/yes - $b3 != $IMPL_XNTPD || # ! IMPL_XNTPD - $b4 != $REQ_LOOP_INFO || # Ehh.. not loopinfo reply ? - $s1 != 1 || # ???? - ($s2 != 24 && $s2 != 28) # - ) - { - warn("$0: Bad/unexpected reply from server:\n"); - warn(" \"".unpack("H*",$reply)."\"\n"); - warn(" ".sprintf("b1=%x b2=%x b3=%x b4=%x s1=%d s2=%d\n", - $b1,$b2,$b3,$b4,$s1,$s2)); - $fail++; - next; - } - elsif ($s2 == 28) - { - ;# seems to be a version 2 xntpd - ($b1,$b2,$b3,$b4,$s1,$s2, - $offset_i,$offset_f,$drift_i,$drift_f,$compl_i,$compl_f,$watchdog) - = unpack($loopinfo_response_fmt_v2,$reply); - $compl = &lfptoa($compl_i, $compl_f); - } - - $time -= $watchdog; - - $offset = &lfptoa($offset_i, $offset_f); - $drift = &lfptoa($drift_i, $drift_f); - - &log($time,$offset,$drift,$compl) && ($fail = 0);; -} -continue -{ - die("$0: Too many failures - terminating\n") if $fail > $MAX_FAIL; - &msg("Sleeping " . ($lostpacket ? ($delay / 2) : $delay) . " seconds...\n"); - - sleep($lostpacket ? ($delay / 2) : $delay); - $lostpacket = 0; -} - -sub log -{ - local($time,$offs,$freq,$cmpl) = @_; - local($y,$m,$d); - local($fname,$suff) = ($logfile); - - - ;# silently drop sample if distance to last sample is too low - if (defined($lasttime) && ($lasttime + 2) >= $time) - { - &msg("Dropped packet - old sample\n"); - return 1; - } - - ;# $suff determines which samples end up in the same file - ;# could have used $year (;-) or WeekOfYear, DayOfYear,.... - ;# Change it to your suit... - - ($d,$m,$y) = (localtime($time))[$[+3 .. $[+5]; - $suff = sprintf("%04d%02d%02d",$y+1900,$m+1,$d); - $fname .= $suff; - if (!open(LOG,">>$fname")) - { - warn("$0: open($fname) failed: $!\n"); - $fail++; - return 0; - } - else - { - ;# file format - ;# MJD seconds offset drift compliance - printf LOG ("%d %.3lf %.8lf %.7lf %d\n", - int($time/86400)+$MJD_1970, - $time - int($time/86400) * 86400, - $offs,$freq,$cmpl); - close(LOG); - $lasttime = $time; - } - return 1; -} - -;# see ntp_fp.h to understand this -sub lfptoa -{ - local($i,$f) = @_; - local($sign) = 1; - - - if ($i & 0x80000000) - { - if ($f == 0) - { - $i = -$i; - } - else - { - $f = -$f; - $i = ~$i; - $i += 1; # 2s complement - } - $sign = -1; - ;#print "NEG: $i $f\n"; - } - else - { - ;#print "POS: $i $f\n"; - } - ;# unlike xntpd I have perl do the dirty work. - ;# Using floats here may affect precision, but - ;# currently these bits aren't significant anyway - return $sign * ($i + $f/2**32); -} diff --git a/contrib/ntp/scripts/monitoring/ntploopwatch b/contrib/ntp/scripts/monitoring/ntploopwatch deleted file mode 100644 index db661d3..0000000 --- a/contrib/ntp/scripts/monitoring/ntploopwatch +++ /dev/null @@ -1,1667 +0,0 @@ -#!/usr/bin/perl -w -;# --*-perl-*-- -;# -;# /src/NTP/ntp-4/scripts/monitoring/ntploopwatch,v 4.3 1999/02/21 12:18:38 kardel RELEASE_19990228_A -;# RELEASE_19990228_A -;# -;# process loop filter statistics file and either -;# - show statistics periodically using gnuplot -;# - or print a single plot -;# -;# Copyright (c) 1992-1998 -;# Rainer Pruy, Friedrich-Alexander Universität Erlangen-Nürnberg -;# -;# -;############################################################# -$0 =~ s!^.*/([^/]+)$!$1!; -$F = ' ' x length($0); -$|=1; - -$ENV{'SHELL'} = '/bin/sh'; # use bourne shell - -undef($config); -undef($workdir); -undef($PrintIt); -undef($samples); -undef($StartTime); -undef($EndTime); -($a,$b) if 0; # keep -w happy -$usage = <<"E-O-P"; -usage: - to watch statistics permanently: - $0 [-v[]] [-c ] [-d ] - $F [-h ] - - to get a single print out specify also - $F -P[] [-s] - $F [-S ] [-E ] - $F [-Y ] [-y ] - -If You like long option names, You can use: - -help - -c +config - -d +directory - -h +host - -v +verbose[=] - -P +printer[=] - -s +samples[=] - -S +starttime - -E +endtime - -Y +maxy - -y +miny - -If contains a '/' (slash character) output is directed to -a file of this name instead of delivered to a printer. -E-O-P - -;# add directory to look for lr.pl and timelocal.pl (in front of current list) -unshift(@INC,"/usr/local/xntp/monitoring"); - -require "lr.pl"; # linear regresion routines - -$MJD_1970 = 40587; # from ntp.h (V3) -$RecordSize = 48; # usually a line fits into 42 bytes -$MinClip = 1; # clip Y scales with greater range than this - -;# largest extension of Y scale from mean value, factor for standart deviation -$FuzzLow = 2.2; # for side closer to zero -$FuzzBig = 1.8; # for side farther from zero - -require "ctime.pl"; -require "timelocal.pl"; -;# early distributions of ctime.pl had a bug -$ENV{'TZ'} = 'MET' unless defined $ENV{'TZ'} || $[ > 4.010; -if (defined(@ctime'MoY)) -{ - *Month=*ctime'MoY; - *Day=*ctime'DoW; -} # ' re-sync emacs fontification -else -{ - @Month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); - @Day = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); -} -print @ctime'DoW if 0; # ' re-sync emacs fontification - -;# max number of days per month -@MaxNumDaysPerMonth = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); - -;# config settable parameters -$delay = 60; -$srcprefix = "./var\@\$STATHOST/loopstats."; -$showoffs = 1; -$showfreq = 1; -$showcmpl = 0; -$showoreg = 0; -$showfreg = 0; -undef($timebase); -undef($freqbase); -undef($cmplscale); -undef($MaxY); -undef($MinY); -$deltaT = 512; # indicate sample data gaps greater than $deltaT seconds -$verbose = 1; - -while($_ = shift(@ARGV)) -{ - (/^[+-]help$/) && die($usage); - - (/^-c$/ || /^\+config$/) && - (@ARGV || die($usage), $config = shift(@ARGV), next); - - (/^-d$/ || /^\+directory$/) && - (@ARGV || die($usage), $workdir = shift(@ARGV), next); - - (/^-h$/ || /^\+host$/) && - (@ARGV || die($usage), $STATHOST = shift, next); - - (/^-v(\d*)$/ || /^\+verbose=?(\d*)$/) && - ($verbose=($1 eq "") ? 1 : $1, next); - - (/^-P(\S*)$/ || /^\+[Pp]rinter=?(\S*)$/) && - ($PrintIt = $1, $verbose==1 && ($verbose = 0), next); - - (/^-s(\d*)$/ || /^\+samples=?(\d*)$/) && - (($samples = ($1 eq "") ? (shift || die($usage)): $1), next); - - (/^-S$/ || /^\+[Ss]tart[Tt]ime$/) && - (@ARGV || die($usage), $StartTime=&date_time_spec2seconds(shift),next); - - (/^-E$/ || /^\+[Ee]nd[Tt]ime$/) && - (@ARGV || die($usage), $EndTime = &date_time_spec2seconds(shift),next); - - (/^-Y$/ || /^\+[Mm]ax[Yy]$/) && - (@ARGV || die($usage), $MaxY = shift, next); - - (/^-y$/ || /^\+[Mm]in[Yy]$/) && - (@ARGV || die($usage), $MinY = shift, next); - - die("$0: unexpected argument \"$_\"\n$usage"); -} - -if (defined($workdir)) -{ - chdir($workdir) || - die("$0: failed to change working dir to \"$workdir\": $!\n"); -} - -$PrintIt = "ps" if defined($PrintIt) && $PrintIt eq ""; - -if (!defined($PrintIt)) -{ - defined($samples) && - print "WARNING: your samples value may be shadowed by config file settings\n"; - defined($StartTime) && - print "WARNING: your StartTime value may be shadowed by config file settings\n"; - defined($EndTime) && - print "WARNING: your EndTime value may be shadowed by config file settings\n"; - defined($MaxY) && - print "WARNING: your MaxY value may be shadowed by config file settings\n"; - defined($MinY) && - print "WARNING: your MinY value may be shadowed by config file settings\n"; - - ;# check operating environment - ;# - ;# gnuplot usually has X support - ;# I vaguely remember there was one with sunview support - ;# - ;# If Your plotcmd can display graphics using some other method - ;# (Tek window,..) fix the following test - ;# (or may be, just disable it) - ;# - !(defined($ENV{'DISPLAY'}) || defined($ENV{'WINDOW_PARENT'})) && - die("Need window system to monitor statistics\n"); -} - -;# configuration file -$config = "loopwatch.config" unless defined($config); -($STATHOST = $config) =~ s!.*loopwatch\.config.([^/\.]*)$!$1! - unless defined($STATHOST); -($STATTAG = $STATHOST) =~ s/^([^\.\*\s]+)\..*$/$1/; - -$srcprefix =~ s/\$STATHOST/$STATHOST/g; - -;# plot command -@plotcmd=("gnuplot", - '-title', "Ntp loop filter statistics $STATHOST", - '-name', "NtpLoopWatch_$STATTAG"); -$tmpfile = "/tmp/ntpstat.$$"; - -;# other variables -$doplot = ""; # assembled command for @plotcmd to display plot -undef($laststat); - -;# plot value ranges -undef($mintime); -undef($maxtime); -undef($minoffs); -undef($maxoffs); -undef($minfreq); -undef($maxfreq); -undef($mincmpl); -undef($maxcmpl); -undef($miny); -undef($maxy); - -;# stop operation if plot command dies -sub sigchld -{ - local($pid) = wait; - unlink($tmpfile); - warn(sprintf("%s: %s died: exit status: %d signal %d\n", - $0, - (defined($Plotpid) && $Plotpid == $pid) - ? "plotcmd" : "unknown child $pid", - $?>>8,$? & 0xff)) if $?; - exit(1) if $? && defined($Plotpid) && $pid == $Plotpid; -} -&sigchld if 0; -$SIG{'CHLD'} = "sigchld"; -$SIG{'CLD'} = "sigchld"; - -sub abort -{ - unlink($tmpfile); - defined($Plotpid) && kill('TERM',$Plotpid); - die("$0: received signal SIG$_[$[] - exiting\n"); -} -&abort if 0; # make -w happy - &abort IS used -$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = $SIG{'PIPE'} = "abort"; - -;# -sub abs -{ - ($_[$[] < 0) ? -($_[$[]) : $_[$[]; -} - -sub boolval -{ - local($v) = ($_[$[]); - - return 1 if ($v eq 'yes') || ($v eq 'y'); - return 1 if ($v =~ /^[0-9]*$/) && ($v != 0); - return 0; -} - -;##################### -;# start of real work - -print "starting plot command (" . join(" ",@plotcmd) . ")\n" if $verbose > 1; - -$Plotpid = open(PLOT,"|-"); -select((select(PLOT),$|=1)[$[]); # make PLOT line bufferd - -defined($Plotpid) || - die("$0: failed to start plot command: $!\n"); - -unless ($Plotpid) -{ - ;# child == plot command - close(STDOUT); - open(STDOUT,">&STDERR") || - die("$0: failed to redirect STDOUT of plot command: $!\n"); - - print STDOUT "plot command running as $$\n"; - - exec @plotcmd; - die("$0: failed to exec (@plotcmd): $!\n"); - exit(1); # in case ... -} - -sub read_config -{ - local($at) = (stat($config))[$[+9]; - local($_,$c,$v); - - (undef($laststat),(print("stat $config failed: $!\n")),return) if ! defined($at); - return if (defined($laststat) && ($laststat == $at)); - $laststat = $at; - - print "reading configuration from \"$config\"\n" if $verbose; - - open(CF,"<$config") || - (warn("$0: failed to read \"$config\" - using old settings ($!)\n"), - return); - while() - { - chop; - s/^([^\#]*[^\#\s]?)\s*\#.*$//; - next if /^\s*$/; - - s/^\s*([^=\s]*)\s*=\s*(.*\S)\s*$/$1=$2/; - - ($c,$v) = split(/=/,$_,2); - print "processing \"$c=$v\"\n" if $verbose > 3; - ($c eq "delay") && ($delay = $v,1) && next; - ($c eq 'samples') && (!defined($PrintIt) || !defined($samples)) && - ($samples = $v,1) && next; - ($c eq 'srcprefix') && (($srcprefix=$v)=~s/\$STATHOST/$STATHOST/g,1) - && next; - ($c eq 'showoffs') && - ($showoffs = boolval($v),1) && next; - ($c eq 'showfreq') && - ($showfreq = boolval($v),1) && next; - ($c eq 'showcmpl') && - ($showcmpl = boolval($v),1) && next; - ($c eq 'showoreg') && - ($showoreg = boolval($v),1) && next; - ($c eq 'showfreg') && - ($showfreg = boolval($v),1) && next; - - ($c eq 'exit') && (unlink($tmpfile),die("$0: exit by config request\n")); - - ($c eq 'freqbase' || - $c eq 'cmplscale') && - do { - if (! defined($v) || $v eq "" || $v eq 'dynamic') - { - eval "undef(\$$c);"; - } - else - { - eval "\$$c = \$v;"; - } - next; - }; - ($c eq 'timebase') && - do { - if (! defined($v) || $v eq "" || $v eq "dynamic") - { - undef($timebase); - } - else - { - $timebase=&date_time_spec2seconds($v); - } - }; - ($c eq 'EndTime') && - do { - next if defined($EndTime) && defined($PrintIt); - if (! defined($v) || $v eq "" || $v eq "none") - { - undef($EndTime); - } - else - { - $EndTime=&date_time_spec2seconds($v); - } - }; - ($c eq 'StartTime') && - do { - next if defined($StartTime) && defined($PrintIt); - if (! defined($v) || $v eq "" || $v eq "none") - { - undef($StartTime); - } - else - { - $StartTime=&date_time_spec2seconds($v); - } - }; - - ($c eq 'MaxY') && - do { - next if defined($MaxY) && defined($PrintIt); - if (! defined($v) || $v eq "" || $v eq "none") - { - undef($MaxY); - } - else - { - $MaxY=$v; - } - }; - - ($c eq 'MinY') && - do { - next if defined($MinY) && defined($PrintIt); - if (! defined($v) || $v eq "" || $v eq "none") - { - undef($MinY); - } - else - { - $MinY=$v; - } - }; - - ($c eq 'deltaT') && - do { - if (!defined($v) || $v eq "") - { - undef($deltaT); - } - else - { - $deltaT = $v; - } - next; - }; - ($c eq 'verbose') && ! defined($PrintIt) && - do { - if (!defined($v) || $v == 0) - { - $verbose = 0; - } - else - { - $verbose = $v; - } - next; - }; - ;# otherwise: silently ignore unrecognized config line - } - close(CF); - ;# set show defaults when nothing selected - $showoffs = $showfreq = $showcmpl = 1 - unless $showoffs || $showfreq || $showcmpl; - if ($verbose > 3) - { - print "new configuration:\n"; - print " delay\t= $delay\n"; - print " samples\t= $samples\n"; - print " srcprefix\t= $srcprefix\n"; - print " showoffs\t= $showoffs\n"; - print " showfreq\t= $showfreq\n"; - print " showcmpl\t= $showcmpl\n"; - print " showoreg\t= $showoreg\n"; - print " showfreg\t= $showfreg\n"; - printf " timebase\t= %s",defined($timebase)?&ctime($timebase):"dynamic\n"; - printf " freqbase\t= %s\n",defined($freqbase) ?"$freqbase":"dynamic"; - printf " cmplscale\t= %s\n",defined($cmplscale)?"$cmplscale":"dynamic"; - printf " StartTime\t= %s",defined($StartTime)?&ctime($StartTime):"none\n"; - printf " EndTime\t= %s", defined($EndTime) ? &ctime($EndTime):"none\n"; - printf " MaxY\t= %s",defined($MaxY)? $MaxY :"none\n"; - printf " MinY\t= %s",defined($MinY)? $MinY :"none\n"; - print " verbose\t= $verbose\n"; - } -print "configuration file read\n" if $verbose > 2; -} - -sub make_doplot -{ - local($c) = (""); - local($fmt) - = ("%s \"%s\" using 1:%d title '%s <%lf %lf> %6s' with lines"); - local($regfmt) - = ("%s ((%lf * x) + %lf) title 'lin. approx. %s (%f t[h]) %s %f <%f> %6s' with lines"); - - $doplot = " set title 'NTP loopfilter statistics for $STATHOST " . - "(last $LastCnt samples from $srcprefix*)'\n"; - - local($xts,$xte,$i,$t); - - local($s,$c) = (""); - - ;# number of integral seconds to get at least 12 tic marks on x axis - $t = int(($maxtime - $mintime) / 12 + 0.5); - $t = 1 unless $t; # prevent $t to be zero - foreach $i (30, - 60,5*60,15*60,30*60, - 60*60,2*60*60,6*60*60,12*60*60, - 24*60*60,48*60*60) - { - last if $t < $i; - $t = $t - ($t % $i); - } - print "time label resolution: $t seconds\n" if $verbose > 1; - - ;# make gnuplot use wall clock time labels instead of NTP seconds - for ($c="", $i = $mintime - ($mintime % $t); - $i <= $maxtime + $t; - $i += $t, $c=",") - { - $s .= $c; - ((int($i / $t) % 2) && - ($s .= sprintf("'' %lf",($i - $LastTimeBase)/3600))) || - (($t <= 60) && - ($s .= sprintf("'%d:%02d:%02d' %lf", - (localtime($i))[$[+2,$[+1,$[+0], - ($i - $LastTimeBase)/3600))) - || (($t <= 2*60*60) && - ($s .= sprintf("'%d:%02d' %lf", - (localtime($i))[$[+2,$[+1], - ($i - $LastTimeBase)/3600))) - || (($t <= 12*60*60) && - ($s .= sprintf("'%s %d:00' %lf", - $Day[(localtime($i))[$[+6]], - (localtime($i))[$[+2], - ($i - $LastTimeBase)/3600))) - || ($s .= sprintf("'%d.%d-%d:00' %lf", - (localtime($i))[$[+3,$[+4,$[+2], - ($i - $LastTimeBase)/3600)); - } - $doplot .= "set xtics ($s)\n"; - - chop($xts = &ctime($mintime)); - chop($xte = &ctime($maxtime)); - $doplot .= "set xlabel 'Start: $xts -- Time Scale -- End: $xte'\n"; - $doplot .= "set yrange [" ; - $doplot .= defined($MinY) ? sprintf("%lf", $MinY) : $miny; - $doplot .= ':'; - $doplot .= defined($MaxY) ? sprintf("%lf", $MaxY) : $maxy; - $doplot .= "]\n"; - - $doplot .= " plot"; - $c = ""; - $showoffs && - ($doplot .= sprintf($fmt,$c,$tmpfile,2, - "offset", - $minoffs,$maxoffs, - "[ms]"), - $c = ","); - $LastCmplScale = 1 if ! defined($LastCmplScale); - $showcmpl && - ($doplot .= sprintf($fmt,$c,$tmpfile,4, - "compliance" . - (&abs($LastCmplScale) > 1 - ? " / $LastCmplScale" - : (&abs($LastCmplScale) == 1 ? "" : " * ".(1/$LastCmplScale))), - $mincmpl/$LastCmplScale,$maxcmpl/$LastCmplScale, - ""), - $c = ","); - $LastFreqBase = 0 if ! defined($LastFreqBase); - $LastFreqBaseString = "?" if ! defined($LastFreqBaseString); - $FreqScale = 1 if ! defined($FreqScale); - $FreqScaleInv = 1 if ! defined($FreqScaleInv); - $showfreq && - ($doplot .= sprintf($fmt,$c,$tmpfile,3, - "frequency" . - ($LastFreqBase > 0 - ? " - $LastFreqBaseString" - : ($LastFreqBase == 0 ? "" : " + $LastFreqBaseString")), - $minfreq * $FreqScale - $LastFreqBase, - $maxfreq * $FreqScale - $LastFreqBase, - "[${FreqScaleInv}ppm]"), - $c = ","); - $showoreg && $showoffs && - ($doplot .= sprintf($regfmt, $c, - &lr_B('offs'),&lr_A('offs'), - "offset ", - &lr_B('offs'), - ((&lr_A('offs')) < 0 ? '-' : '+'), - &abs(&lr_A('offs')), &lr_r('offs'), - "[ms]"), - $c = ","); - $showfreg && $showfreq && - ($doplot .= sprintf($regfmt, $c, - &lr_B('freq') * $FreqScale, - (&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase, - "frequency", - &lr_B('freq') * $FreqScale, - ((&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase) < 0 ? '-' : '+', - &abs((&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase), - &lr_r('freq'), - "[${FreqScaleInv}ppm]"), - $c = ","); - $doplot .= "\n"; -} - -%F_key = (); -%F_name = (); -%F_size = (); -%F_mtime = (); -%F_first = (); -%F_last = (); - -sub genfile -{ - local($cnt,$in,$out,@fpos) = @_; - - local(@F,@t,$t,$lastT) = (); - local(@break,@time,@offs,@freq,@cmpl,@loffset,@filekey) = (); - local($lm,$l,@f); - - local($sdir,$sname); - - ;# allocate some storage for the tables - ;# otherwise realloc may get into troubles - if (defined($StartTime) && defined($EndTime)) - { - $l = ($EndTime-$StartTime) -$[+1 +1; # worst case: 1 sample per second - } - else - { - $l = $cnt + 10; - } - print "preextending arrays to $l entries\n" if $verbose > 2; - $#break = $l; for ($i=$[; $i<=$l;$i++) { $break[$i] = 0; } - $#time = $l; for ($i=$[; $i<=$l;$i++) { $time[$i] = 0; } - $#offs = $l; for ($i=$[; $i<=$l;$i++) { $offs[$i] = 0; } - $#freq = $l; for ($i=$[; $i<=$l;$i++) { $freq[$i] = 0; } - $#cmpl = $l; for ($i=$[; $i<=$l;$i++) { $cmpl[$i] = 0; } - $#loffset = $l; for ($i=$[; $i<=$l;$i++) { $loffset[$i] = 0; } - $#filekey = $l; for ($i=$[; $i<=$l;$i++) { $filekey[$i] = 0; } - ;# now reduce size again - $#break = $[ - 1; - $#time = $[ - 1; - $#offs = $[ - 1; - $#freq = $[ - 1; - $#cmpl = $[ - 1; - $#loffset = $[ - 1; - $#filekey = $[ - 1; - print "memory allocation ready\n" if $verbose > 2; - sleep(3) if $verbose > 1; - - $fpos[$[] = '' if !defined($fpos[$[]); - - if (index($in,"/") < $[) - { - $sdir = "."; - $sname = $in; - } - else - { - ($sdir,$sname) = ($in =~ m!^(.*)/([^/]*)!); - $sname = "" unless defined($sname); - } - - $Ltime = -1 if ! defined($Ltime); - if (!defined($Lsdir) || $Lsdir ne $sdir || $Ltime != (stat($sdir))[$[+9] || - grep($F_mtime{$_} != (stat($F_name{$_}))[$[+9], @F_files)) - - { - print "rescanning directory \"$sdir\" for files \"$sname*\"\n" - if $verbose > 1; - - ;# rescan directory on changes - $Lsdir = $sdir; - $Ltime = (stat($sdir))[$[+9]; - if 0; # dummy line - calm down my formatter - local(@newfiles) = < ${in}*[0-9] >; - local($st_dev,$st_ino,$st_mtime,$st_size,$name,$key,$modified); - - foreach $name (@newfiles) - { - ($st_dev,$st_ino,$st_size,$st_mtime) = - (stat($name))[$[,$[+1,$[+7,$[+9]; - $modified = 0; - $key = sprintf("%lx|%lu", $st_dev, $st_ino); - - print "candidate file \"$name\"", - (defined($st_dev) ? "" : " failed: $!"),"\n" - if $verbose > 2; - - if (! defined($F_key{$name}) || $F_key{$name} ne $key) - { - $F_key{$name} = $key; - $modified++; - } - if (!defined($F_name{$key}) || $F_name{$key} ne $name) - { - $F_name{$key} = $name; - $modified++; - } - if (!defined($F_size{$key}) || $F_size{$key} != $st_size) - { - $F_size{$key} = $st_size; - $modified++; - } - if (!defined($F_mtime{$key}) || $F_mtime{$key} != $st_mtime) - { - $F_mtime{$key} = $st_mtime; - $modified++; - } - if ($modified) - { - print "new data \"$name\" key: $key;\n" if $verbose > 1; - print " size: $st_size; mtime: $st_mtime;\n" - if $verbose > 1; - $F_last{$key} = $F_first{$key} = $st_mtime; - $F_first{$key}--; # prevent zero divide later on - ;# now compute derivated attributes - open(IN, "<$name") || - do { - warn "$0: failed to open \"$name\": $!"; - next; - }; - - while() - { - @F = split; - next if @F < 5; - next if $F[$[] eq ""; - $t = ($F[$[] - $MJD_1970) * 24 * 60 * 60; - $t += $F[$[+1]; - $F_first{$key} = $t; - print "\tfound first entry: $t ",&ctime($t) - if $verbose > 4; - last; - } - seek(IN, - ($st_size > 4*$RecordSize) ? $st_size - 4*$RecordSize : 0, - 0); - while() - { - @F = split; - next if @F < 5; - next if $F[$[] eq ""; - $t = ($F[$[] - $MJD_1970) * 24 * 60 * 60; - $t += $F[$[+1]; - $F_last{$key} = $t; - $_ = ; - print "\tfound last entry: $t ", &ctime($t) - if $verbose > 4 && ! defined($_); - last unless defined($_); - redo; - ;# Ok, calm down... - ;# using $_ = in conjunction with redo - ;# is semantically equivalent to the while loop, but - ;# I needed a one line look ahead and this solution - ;# was what I thought of first - ;# and.. If you do not like it dont look - } - close(IN); - print(" first: ",$F_first{$key}, - " last: ",$F_last{$key},"\n") if $verbose > 1; - } - } - ;# now reclaim memory used for files no longer referenced ... - local(%Names); - grep($Names{$_} = 1,@newfiles); - foreach (keys %F_key) - { - next if defined($Names{$_}); - delete $F_key{$_}; - $verbose > 2 && print "no longer referenced: \"$_\"\n"; - } - %Names = (); - - grep($Names{$_} = 1,values(%F_key)); - foreach (keys %F_name) - { - next if defined($Names{$_}); - delete $F_name{$_}; - $verbose > 2 && print "unref name($_)= $F_name{$_}\n"; - } - foreach (keys %F_size) - { - next if defined($Names{$_}); - delete $F_size{$_}; - $verbose > 2 && print "unref size($_)\n"; - } - foreach (keys %F_mtime) - { - next if defined($Names{$_}); - delete $F_mtime{$_}; - $verbose > 2 && print "unref mtime($_)\n"; - } - foreach (keys %F_first) - { - next if defined($Names{$_}); - delete $F_first{$_}; - $verbose > 2 && print "unref first($_)\n"; - } - foreach (keys %F_last) - { - next if defined($Names{$_}); - delete $F_last{$_}; - $verbose > 2 && print "unref last($_)\n"; - } - ;# create list sorted by time - @F_files = sort {$F_first{$a} <=> $F_first{$b}; } keys(%F_name); - if ($verbose > 1) - { - print "Resulting file list:\n"; - foreach (@F_files) - { - print "\t$_\t$F_name{$_}\n"; - } - } - } - - printf("processing %s; output \"$out\" (%d input files)\n", - ((defined($StartTime) && defined($EndTime)) - ? "time range" - : (defined($StartTime) ? "$cnt samples from StartTime" : - (defined($EndTime) ? "$cnt samples to EndTime" : - "last $cnt samples"))), - scalar(@F_files)) - if $verbose > 1; - - ;# open output file - will be input for plotcmd - open(OUT,">$out") || - do { - warn("$0: cannot create \"$out\": $!\n"); - }; - - @f = @F_files; - if (defined($StartTime)) - { - while (@f && ($F_last{$f[$[]} < $StartTime)) - { - print("shifting ", $F_name{$f[$[]}, - " last: ", $F_last{$f[$[]}, - " < StartTime: $StartTime\n") - if $verbose > 3; - shift(@f); - } - - - } - if (defined($EndTime)) - { - while (@f && ($F_first{$f[$#f]} > $EndTime)) - { - print("popping ", $F_name{$f[$#f]}, - " first: ", $F_first{$f[$#f]}, - " > EndTime: $EndTime\n") - if $verbose > 3; - pop(@f); - } - } - - if (@f) - { - if (defined($StartTime)) - { - print "guess start according to StartTime ($StartTime)\n" - if $verbose > 3; - - if ($fpos[$[] eq 'start') - { - if (grep($_ eq $fpos[$[+1],@f)) - { - shift(@f) while @f && $f[$[] ne $fpos[$[+1]; - } - else - { - @fpos = ('start', $f[$[], undef); - } - } - else - { - @fpos = ('start' , $f[$[], undef); - } - - if (!defined($fpos[$[+2])) - { - if ($StartTime <= $F_first{$f[$[]}) - { - $fpos[$[+2] = 0; - } - else - { - $fpos[$[+2] = - int($F_size{$f[$[]} * - (($StartTime - $F_first{$f[$[]})/ - ($F_last{$f[$[]} - $F_first{$f[$[]}))); - $fpos[$[+2] = ($fpos[$[+2] <= 2 * $RecordSize) - ? 0 : $fpos[$[+2] - 2 * $RecordSize; - ;# anyway as the data may contain "time holes" - ;# our heuristics may baldly fail - ;# so just start at 0 - $fpos[$[+2] = 0; - } - } - } - elsif (defined($EndTime)) - { - print "guess starting point according to EndTime ($EndTime)\n" - if $verbose > 3; - - if ($fpos[$[] eq 'end') - { - if (grep($_ eq $fpos[$[+1],@f)) - { - shift(@f) while @f && $f[$[] ne $fpos[$[+1]; - } - else - { - @fpos = ('end', $f[$[], undef); - } - } - else - { - @fpos = ('end', $f[$[], undef); - } - - if (!defined($fpos[$[+2])) - { - local(@x) = reverse(@f); - local($s,$c) = (0,$cnt); - if ($EndTime < $F_last{$x[$[]}) - { - ;# last file will only be used partially - $s = int($F_size{$x[$[]} * - (($EndTime - $F_first{$x[$[]}) / - ($F_last{$x[$[]} - $F_first{$x[$[]}))); - $s = int($s/$RecordSize); - $c -= $s - 1; - if ($c <= 0) - { - ;# start is in the same file - $fpos[$[+1] = $x[$[]; - $fpos[$[+2] = ($c >=-2) ? 0 : (-$c - 2) * $RecordSize; - shift(@f) while @f && ($f[$[] ne $x[$[]); - } - else - { - shift(@x); - } - } - - if (!defined($fpos[$[+2])) - { - local($_); - while($_ = shift(@x)) - { - $s = int($F_size{$_}/$RecordSize); - $c -= $s - 1; - if ($c <= 0) - { - $fpos[$[+1] = $_; - $fpos[$[+2] = ($c>-2) ? 0 : (-$c - 2) * $RecordSize; - shift(@f) while @f && ($f[$[] ne $_); - last; - } - } - } - } - } - else - { - print "guessing starting point according to count ($cnt)\n" - if $verbose > 3; - ;# guess offset to get last available $cnt samples - if ($fpos[$[] eq 'cnt') - { - if (grep($_ eq $fpos[$[+1],@f)) - { - print "old positioning applies\n" if $verbose > 3; - shift(@f) while @f && $f[$[] ne $fpos[$[+1]; - } - else - { - @fpos = ('cnt', $f[$[], undef); - } - } - else - { - @fpos = ('cnt', $f[$[], undef); - } - - if (!defined($fpos[$[+2])) - { - local(@x) = reverse(@f); - local($s,$c) = (0,$cnt); - - local($_); - while($_ = shift(@x)) - { - print "examing \"$_\" $c samples still needed\n" - if $verbose > 4; - $s = int($F_size{$_}/$RecordSize); - $c -= $s - 1; - if ($c <= 0) - { - $fpos[$[+1] = $_; - $fpos[$[+2] = ($c>-2) ? 0 : (-$c - 2) * $RecordSize; - shift(@f) while @f && ($f[$[] ne $_); - last; - } - } - if (!defined($fpos[$[+2])) - { - print "no starting point yet - using start of data\n" - if $verbose > 2; - $fpos[$[+2] = 0; - } - } - } - } - print "Ooops, no suitable input file ??\n" - if $verbose > 1 && @f <= 0; - - printf("Starting at (%s) \"%s\" offset %ld using %d files\n", - $fpos[$[+1], - $F_name{$fpos[$[+1]}, - $fpos[$[+2], - scalar(@f)) - if $verbose > 2; - - $lm = 1; - $l = 0; - foreach $key (@f) - { - $file = $F_name{$key}; - print "processing file \"$file\"\n" if $verbose > 2; - - open(IN,"<$file") || - (warn("$0: cannot read \"$file\": $!\n"), next); - - ;# try to seek to a position nearer to the start of the interesting lines - ;# should always affect only first item in @f - ($key eq $fpos[$[+1]) && - (($verbose > 1) && - print("Seeking to offset $fpos[$[+2]\n"), - seek(IN,$fpos[$[+2],0) || - warn("$0: seek(\"$F_name{$key}\" failed: $|\n")); - - while() - { - $l++; - ($verbose > 3) && - (($l % $lm) == 0 && print("\t$l lines read\n") && - (($l == 2) && ($lm = 10) || - ($l == 100) && ($lm = 100) || - ($l == 500) && ($lm = 500) || - ($l == 1000) && ($lm = 1000) || - ($l == 5000) && ($lm = 5000) || - ($l == 10000) && ($lm = 10000))); - - @F = split; - - next if @F < 6; # no valid input line is this short - next if $F[$[] eq ""; - next if ($F[$[] !~ /^\d+$/); - ($F[$[] !~ /^\d+$/) && # A 'never should have happend' error - die("$0: unexpected input line: >$_<\n"); - - ;# modified Julian to UNIX epoch - $t = ($F[$[] - $MJD_1970) * 24 * 60 * 60; - $t += $F[$[+1]; # add seconds + fraction - - ;# multiply offset by 1000 to get ms - try to avoid float op - (($F[$[+2] =~ s/(\d*)\.(\d{3})(\d*)/$1$2.$3/) && - $F[$[+2] =~ s/0+([\d\.])/($1 eq '.') ? '0.' : $1/e) # strip leading zeros - || ($F[$[+2] *= 1000); - - - ;# skip samples out of specified time range - next if (defined($StartTime) && $StartTime > $t); - next if (defined($EndTime) && $EndTime < $t); - - next if defined($lastT) && $t < $lastT; # backward in time ?? - - push(@offs,$F[$[+2]); - push(@freq,$F[$[+3] * (2**20/10**6)); - push(@cmpl,$F[$[+5]); - - push(@break, (defined($lastT) && ($t - $lastT > $deltaT))); - $lastT = $t; - push(@time,$t); - push(@loffset, tell(IN) - length($_)); - push(@filekey, $key); - - shift(@break),shift(@time),shift(@offs), - shift(@freq), shift(@cmpl),shift(@loffset), - shift(@filekey) - if @time > $cnt && - ! (defined($StartTime) && defined($EndTime)); - - last if @time >= $cnt && defined($StartTime) && !defined($EndTime); - } - close(IN); - last if @time >= $cnt && defined($StartTime) && !defined($EndTime); - } - print "input scanned ($l lines/",scalar(@time)," samples)\n" - if $verbose > 1; - - &lr_init('offs'); - &lr_init('freq'); - - if (@time) - { - local($_,@F); - - local($timebase) unless defined($timebase); - local($freqbase) unless defined($freqbase); - local($cmplscale) unless defined($cmplscale); - - undef $mintime; - undef $maxtime; - undef $minoffs; - undef $maxoffs; - undef $minfreq; - undef $maxfreq; - undef $mincmpl; - undef $maxcmpl; - undef $miny; - undef $maxy ; - - print "computing ranges\n" if $verbose > 2; - - $LastCnt = @time; - - ;# @time is in ascending order (;-) - $mintime = $time[$[]; - $maxtime = $time[$#time]; - unless (defined($timebase)) - { - local($time,@X) = (time); - @X = localtime($time); - - ;# compute today 00:00:00 - $timebase = $time - ((($X[$[+2]*60)+$X[$[+1])*60+$X[$[]); - - } - $LastTimeBase = $timebase; - - if ($showoffs) - { - local($i,$m,$f); - - $minoffs = &min(@offs); - $maxoffs = &max(@offs); - - ;# I know, it is not perl style using indices to access arrays, - ;# but I have to proccess two arrays in sync, non-destructively - ;# (otherwise a (shift(@a1),shift(a2)) would do), - ;# I dont like to make copies of these arrays as they may be huge - $i = $[; - &lr_sample(($time[$i]-$timebase)/3600,$offs[$i],'offs'),$i++ - while $i <= $#time; - - ($minoffs == $maxoffs) && ($minoffs -= 0.1,$maxoffs += 0.1); - - $i = &lr_sigma('offs'); - $m = &lr_mean('offs'); - - print "mean offset: $m sigma: $i\n" if $verbose > 2; - - if (($maxoffs - $minoffs) > $MinClip) - { - $f = (&abs($minoffs) < &abs($maxoffs)) ? $FuzzLow : $FuzzBig; - $miny = (($m - $minoffs) <= ($f * $i)) - ? $minoffs : ($m - $f * $i); - $f = ($f == $FuzzLow) ? $FuzzBig : $FuzzLow; - $maxy = (($maxoffs - $m) <= ($f * $i)) - ? $maxoffs : ($m + $f * $i); - } - else - { - $miny = $minoffs; - $maxy = $maxoffs; - } - ($maxy-$miny) == 0 && - (($maxy,$miny) - = (($maxoffs - $minoffs) > 0) - ? ($maxoffs,$minoffs) : ($MinClip,-$MinClip)); - - $maxy = $MaxY if defined($MaxY) && $MaxY < $maxy; - $miny = $MinY if defined($MinY) && $MinY > $miny; - - print "offset min clipped from $minoffs to $miny\n" - if $verbose > 2 && $minoffs != $miny; - print "offset max clipped from $maxoffs to $maxy\n" - if $verbose > 2 && $maxoffs != $maxy; - } - - if ($showfreq) - { - local($i,$m); - - $minfreq = &min(@freq); - $maxfreq = &max(@freq); - - $i = $[; - &lr_sample(($time[$i]-$timebase)/3600,$freq[$i]-$minfreq,'freq'), - $i++ - while $i <= $#time; - - $i = &lr_sigma('freq'); - $m = &lr_mean('freq') + $minfreq; - - print "mean frequency: $m sigma: $i\n" if $verbose > 2; - - if (defined($maxy)) - { - local($s) = - ($maxfreq - $minfreq) - ? ($maxy - $miny) / ($maxfreq - $minfreq) : 1; - - if (defined($freqbase)) - { - $FreqScale = 1; - $FreqScaleInv = ""; - } - else - { - $FreqScale = 1; - $FreqScale = 10 ** int(log($s)/log(10) - 0.9999); - $FreqScaleInv = - ("$FreqScale" =~ /^10(0*)$/) ? "0.${1}1" : - ($FreqScale == 1 ? "" : (1/$FreqScale)); - - $freqbase = ($maxfreq + $minfreq)/ 2 * $FreqScale; #$m * $FreqScale; - $freqbase -= ($maxy + $miny) / 2; #&lr_mean('offs'); - - ;# round resulting freqbase - ;# to precision of min max difference - $s = -12; - $s = int(log(($maxfreq-$minfreq)*$FreqScale)/log(10))-1 - unless ($maxfreq-$minfreq) < 1e-12; - $s = 10 ** $s; - $freqbase = int($freqbase / $s) * $s; - } - } - else - { - $FreqScale = 1; - $FreqScaleInv = ""; - $freqbase = $m unless defined($freqbase); - if (($maxfreq - $minfreq) > $MinClip) - { - $f = (&abs($minfreq) < &abs($maxfreq)) - ? $FuzzLow : $FuzzBig; - $miny = (($freqbase - $minfreq) <= ($f * $i)) - ? ($minfreq-$freqbase) : (- $f * $i); - $f = ($f == $FuzzLow) ? $FuzzBig : $FuzzLow; - $maxy = (($maxfreq - $freqbase) <= ($f * $i)) - ? ($maxfreq-$freqbase) : ($f * $i); - } - else - { - $miny = $minfreq - $freqbase; - $maxy = $maxfreq - $freqbase; - } - ($maxy - $miny) == 0 && - (($maxy,$miny) = - (($maxfreq - $minfreq) > 0) - ? ($maxfreq-$freqbase,$minfreq-$freqbase) : (0.5,-0.5)); - - $maxy = $MaxY if defined($MaxY) && $MaxY < $maxy; - $miny = $MinY if defined($MinY) && $MinY > $miny; - - print("frequency min clipped from ",$minfreq-$freqbase, - " to $miny\n") - if $verbose > 2 && $miny != ($minfreq - $freqbase); - print("frequency max clipped from ",$maxfreq-$freqbase, - " to $maxy\n") - if $verbose > 2 && $maxy != ($maxfreq - $freqbase); - } - $LastFreqBaseString = - sprintf("%g",$freqbase >= 0 ? $freqbase : -$freqbase); - $LastFreqBase = $freqbase; - print "LastFreqBaseString now \"$LastFreqBaseString\"\n" - if $verbose > 5; - } - else - { - $FreqScale = 1; - $FreqScaleInv = ""; - $LastFreqBase = 0; - $LastFreqBaseString = ""; - } - - if ($showcmpl) - { - $mincmpl = &min(@cmpl); - $maxcmpl = &max(@cmpl); - - if (!defined($cmplscale)) - { - if (defined($maxy)) - { - local($cmp) - = (&abs($miny) > &abs($maxy)) ? &abs($miny) : $maxy; - $cmplscale = $cmp == $maxy ? 1 : -1; - - foreach (0.01, 0.02, 0.05, - 0.1, 0.2, 0.25, 0.4, 0.5, - 1, 2, 4, 5, - 10, 20, 25, 50, - 100, 200, 250, 500, 1000) - { - $cmplscale *= $_, last if $maxcmpl/$_ <= $cmp; - } - } - else - { - $cmplscale = 1; - $miny = $mincmpl ? 0 : -$MinClip; - $maxy = $maxcmpl+$MinClip; - } - } - $LastCmplScale = $cmplscale; - } - else - { - $LastCmplScale = 1; - } - - print "creating plot command input file\n" if $verbose > 2; - - - print OUT ("# preprocessed NTP statistics file for $STATHOST\n"); - print OUT ("# timebase is: ",&ctime($LastTimeBase)) - if defined($LastTimeBase); - print OUT ("# frequency is offset by ", - ($LastFreqBase >= 0 ? "+" : "-"), - "$LastFreqBaseString [${FreqScaleInv}ppm]\n"); - print OUT ("# compliance is scaled by $LastCmplScale\n"); - print OUT ("# time [h]\toffset [ms]\tfrequency [${FreqScaleInv}ppm]\tcompliance\n"); - - printf OUT ("%s%lf\t%lf\t%lf\t%lf\n", - (shift(@break) ? "\n" : ""), - (shift(@time) - $LastTimeBase)/3600, - shift(@offs), - shift(@freq) * $FreqScale - $LastFreqBase, - shift(@cmpl) / $LastCmplScale) - while(@time); - } - else - { - ;# prevent plotcmd from processing empty file - print "Creating plot command dummy...\n" if $verbose > 2; - print OUT "# dummy samples\n0 1 2 3\n1 1 2 3\n"; - &lr_sample(0,1,'offs'); - &lr_sample(1,1,'offs'); - &lr_sample(0,2,'freq'); - &lr_sample(1,2,'freq'); - @time = (0, 1); $maxtime = 1; $mintime = 0; - @offs = (1, 1); $maxoffs = 1; $minoffs = 1; - @freq = (2, 2); $maxfreq = 2; $minfreq = 2; - @cmpl = (3, 3); $maxcmpl = 3; $mincmpl = 3; - $LastCnt = 2; - $LastFreqBase = 0; - $LastCmplScale = 1; - $LastTimeBase = 0; - $miny = -$MinClip; - $maxy = 3 + $MinClip; - } - close(OUT); - - print "plot command input file created\n" - if $verbose > 2; - - - if (($fpos[$[] eq 'cnt' && scalar(@loffset) >= $cnt) || - ($fpos[$[] eq 'start' && $mintime <= $StartTime) || - ($fpos[$[] eq 'end')) - { - return ($fpos[$[],$filekey[$[],$loffset[$[]); - } - else # found to few lines - next time start search earlier in file - { - if ($fpos[$[] eq 'start') - { - ;# the timestamps we got for F_first and F_last guaranteed - ;# that no file is left out - ;# the only thing that could happen is: - ;# we guessed the starting point wrong - ;# compute a new guess from the first record found - ;# if this equals our last guess use data of first record - ;# otherwise try new guess - - if ($fpos[$[+1] eq $filekey[$[] && $loffset[$[] > $fpos[$[+2]) - { - local($noff); - $noff = $loffset[$[] - ($cnt - @loffset + 1) * $RecordSize; - $noff = 0 if $noff < 0; - - return (@fpos[$[,$[+1], ($noff == $fpos[$[+2]) ? $loffset[$[] : $noff); - } - return ($fpos[$[],$filekey[$[],$loffset[$[]); - } - elsif ($fpos[$[] eq 'end' || $fpos[$[] eq 'cnt') - { - ;# try to start earlier in file - ;# if we already started at the beginning - ;# try to use previous file - ;# this assumes distance to better starting point is at most one file - ;# the primary guess at top of genfile() should usually allow this - ;# assumption - ;# if the offset of the first sample used is within - ;# a different file than we guessed it must have occurred later - ;# in the sequence of files - ;# this only can happen if our starting file did not contain - ;# a valid sample from the starting point we guessed - ;# however this does not invalidate our assumption, no check needed - local($noff,$key); - if ($fpos[$[+2] > 0) - { - $noff = $fpos[$[+2] - $RecordSize * ($cnt - @loffset + 1); - $noff = 0 if $noff < 0; - return (@fpos[$[,$[+1],$noff); - } - else - { - if ($fpos[$[+1] eq $F_files[$[]) - { - ;# first file - and not enough samples - ;# use data of first sample - return ($fpos[$[], $filekey[$[], $loffset[$[]); - } - else - { - ;# search key of previous file - $key = $F_files[$[]; - @F = reverse(@F_files); - while ($_ = shift(@F)) - { - if ($_ eq $fpos[$[+1]) - { - $key = shift(@F) if @F; - last; - } - } - $noff = int($F_size{$key} / $RecordSize); - $noff -= $cnt - @loffset; - $noff = 0 if $noff < 0; - $noff *= $RecordSize; - return ($fpos[$[], $key, $noff); - } - } - } - else - { - return (); - } - - return 0 if @loffset <= 1 || ($loffset[$#loffset] - $loffset[$[]) <= 1; - - ;# EOF - 1.1 * avg(line) * $cnt - local($val) = $loffset[$#loffset] - - $cnt * 11 * (($loffset[$#loffset] - $loffset[$[]) / @loffset) / 10; - return ($val < 0) ? 0 : $val; - } -} - -$Ltime = -1 if ! defined($Ltime); -$LastFreqBase = 0; -$LastFreqBaseString = "??"; - -;# initial setup of plot -print "initialize plotting\n" if $verbose; -if (defined($PrintIt)) -{ - if ($PrintIt =~ m,/,) - { - print "Saving plot to file $PrintIt\n"; - print PLOT "set output '$PrintIt'\n"; - } - else - { - print "Printing plot on printer $PrintIt\n"; - print PLOT "set output '| lpr -P$PrintIt -h'\n"; - } - print PLOT "set terminal postscript landscape color solid 'Helvetica' 10\n"; -} -print PLOT "set grid\n"; -print PLOT "set tics out\n"; -print PLOT "set format y '%g '\n"; -printf PLOT "set time 47\n" unless defined($PrintIt); - -@filepos =(); -while(1) -{ - print &ctime(time) if $verbose; - - ;# update diplay characteristics - &read_config;# unless defined($PrintIt); - - unlink($tmpfile); - @filepos = &genfile($samples,$srcprefix,$tmpfile,@filepos); - - ;# make plotcmd display samples - &make_doplot; - print "Displaying plot...\n" if $verbose > 1; - print "command for plot sub process:\n$doplot----\n" if $verbose > 3; - print PLOT $doplot; -} -continue -{ - if (defined($PrintIt)) - { - delete $SIG{'CHLD'}; - print PLOT "quit\n"; - close(PLOT); - if ($PrintIt =~ m,/,) - { - print "Plot saved to file $PrintIt\n"; - } - else - { - print "Plot spooled to printer $PrintIt\n"; - } - unlink($tmpfile); - exit(0); - } - ;# wait $delay seconds - print "waiting $delay seconds ..." if $verbose > 2; - sleep($delay); - print " continuing\n" if $verbose > 2; - undef($LastFreqBaseString); -} - - -sub date_time_spec2seconds -{ - local($_) = @_; - ;# a date_time_spec consistes of: - ;# YYYY-MM-DD_HH:MM:SS.ms - ;# values can be omitted from the beginning and default than to - ;# values of current date - ;# values omitted from the end default to lowest possible values - - local($time) = time; - local($sec,$min,$hour,$mday,$mon,$year) - = localtime($time); - - local($last) = (); - - s/^\D*(.*\d)\D*/$1/; # strip off garbage - - PARSE: - { - if (s/^(\d{4})(-|$)//) - { - if ($1 < 1970) - { - warn("$0: can not handle years before 1970 - year $1 ignored\n"); - return undef; - } - elsif ( $1 >= 2070) - { - warn("$0: can not handle years past 2070 - year $1 ignored\n"); - return undef; - } - else - { - $year = $1 % 100; # 0<= $year < 100 - ;# - interpreted 70 .. 99,00 .. 69 - } - $last = $[ + 5; - last PARSE if $_ eq ''; - warn("$0: bad date_time_spec: \"$_\" found after YEAR\n"), - return(undef) - if $2 eq ''; - } - - if (s/^(\d{1,2})(-|$)//) - { - warn("$0: implausible month $1\n"),return(undef) - if $1 < 1 || $1 > 12; - $mon = $1 - 1; - $last = $[ + 4; - last PARSE if $_ eq ''; - warn("$0: bad date_time_spec: \"$_\" found after MONTH\n"), - return(undef) - if $2 eq ''; - } - else - { - warn("$0: bad date_time_spec \"$_\"\n"),return(undef) - if defined($last); - - } - - if (s/^(\d{1,2})([_ ]|$)//) - { - warn("$0: implausible month day $1 for month ".($mon+1)." (". - $MaxNumDaysPerMonth[$mon].")$mon\n"), - return(undef) - if $1 < 1 || $1 > $MaxNumDaysPerMonth[$mon]; - $mday = $1; - $last = $[ + 3; - last PARSE if $_ eq ''; - warn("$0: bad date_time_spec \"$_\" found after MDAY\n"), - return(undef) - if $2 eq ''; - } - else - { - warn("$0: bad date_time_spec \"$_\"\n"), return undef - if defined($last); - } - - ;# now we face a problem: - ;# if ! defined($last) a prefix of "07:" - ;# can be either 07:MM or 07:ss - ;# to get the second interpretation make the user add - ;# a msec fraction part and check for this special case - if (! defined($last) && s/^(\d{1,2}):(\d{1,2}\.\d+)//) - { - warn("$0: implausible minute $1\n"), return undef - if $1 < 0 || $1 >= 60; - warn("$0: implausible second $1\n"), return undef - if $2 < 0 || $2 >= 60; - $min = $1; - $sec = $2; - $last = $[ + 1; - last PARSE if $_ eq ''; - warn("$0: bad date_time_spec \"$_\" after SECONDS\n"); - return undef; - } - - if (s/^(\d{1,2})(:|$)//) - { - warn("$0: implausible hour $1\n"), return undef - if $1 < 0 || $1 > 24; - $hour = $1; - $last = $[ + 2; - last PARSE if $_ eq ''; - warn("$0: bad date_time_spec found \"$_\" after HOUR\n"), - return undef - if $2 eq ''; - } - else - { - warn("$0: bad date_time_spec \"$_\"\n"), return undef - if defined($last); - } - - if (s/^(\d{1,2})(:|$)//) - { - warn("$0: implausible minute $1\n"), return undef - if $1 < 0 || $1 >=60; - $min = $1; - $last = $[ + 1; - last PARSE if $_ eq ''; - warn("$0: bad date_time_spec found \"$_\" after MINUTE\n"), - return undef - if $2 eq ''; - } - else - { - warn("$0: bad date_time_spec \"$_\"\n"), return undef - if defined($last); - } - - if (s/^(\d{1,2}(\.\d+)?)//) - { - warn("$0: implausible second $1\n"), return undef - if $1 < 0 || $1 >=60; - $sec = $1; - $last = $[; - last PARSE if $_ eq ''; - warn("$0: bad date_time_spec found \"$_\" after SECOND\n"); - return undef; - } - } - - return $time unless defined($last); - - $sec = 0 if $last > $[; - $min = 0 if $last > $[ + 1; - $hour = 0 if $last > $[ + 2; - $mday = 1 if $last > $[ + 3; - $mon = 0 if $last > $[ + 4; - local($rtime) = &timelocal($sec,$min,$hour,$mday,$mon,$year, 0,0, 0); - - ;# $rtime may be off if daylight savings time is in effect at given date - return $rtime + ($sec - int($sec)) - if $hour == (localtime($rtime))[$[+2]; - return - &timelocal($sec,$min,$hour,$mday,$mon,$year, 0,0, 1) - + ($sec - int($sec)); -} - - -sub min -{ - local($m) = shift; - - grep((($m > $_) && ($m = $_),0),@_); - $m; -} - -sub max -{ - local($m) = shift; - - grep((($m < $_) && ($m = $_),0),@_); - $m; -} diff --git a/contrib/ntp/scripts/monitoring/ntptrap b/contrib/ntp/scripts/monitoring/ntptrap deleted file mode 100644 index 5a1bcb1..0000000 --- a/contrib/ntp/scripts/monitoring/ntptrap +++ /dev/null @@ -1,463 +0,0 @@ -#!/local/bin/perl --*-perl-*- -;# -;# ntptrap,v 3.1 1993/07/06 01:09:15 jbj Exp -;# -;# a client for the xntp mode 6 trap mechanism -;# -;# Copyright (c) 1992 -;# Rainer Pruy Friedrich-Alexander Universitaet Erlangen-Nuernberg -;# -;# -;############################################################# -$0 =~ s!^.*/([^/]+)$!$1!; # strip to filename -;# enforce STDOUT and STDERR to be line buffered -$| = 1; -select((select(STDERR),$|=1)[$[]); - -;####################################### -;# load utility routines and definitions -;# -require('ntp.pl'); # implementation of the NTP protocol -use Socket; - -#eval { require('sys/socket.ph'); require('netinet/in.ph') unless defined(&INADDR_ANY); } || -#do { - #die("$0: $@") unless $[ == index($@, "Can't locate "); - #warn "$0: $@"; - #warn "$0: supplying some default definitions\n"; - #eval 'sub INADDR_ANY { 0; } sub AF_INET {2;} sub SOCK_DGRAM {2;} 1;' || die "$0: $@"; -#}; -require('getopts.pl'); # option parsing -require('ctime.pl'); # date/time formatting - -;###################################### -;# define some global constants -;# -$BASE_TIMEOUT=10; -$FRAG_TIMEOUT=10; -$MAX_TRY = 5; -$REFRESH_TIME=60*15; # 15 minutes (server uses 1 hour) -$ntp'timeout = $FRAG_TIMEOUT; #'; -$ntp'timeout if 0; - -;###################################### -;# now process options -;# -sub usage -{ - die("usage: $0 [-n] [-p ] [-l ] [host] ...\n"); -} - -$opt_l = "/dev/null"; # where to write debug messages to -$opt_p = 0; # port to use locally - (0 does mean: will be choosen by kernel) - -&usage unless &Getopts('l:p:'); -&Getopts if 0; # make -w happy - -@Hosts = ($#ARGV < $[) ? ("localhost") : @ARGV; - -;# setup for debug output -$DEBUGFILE=$opt_l; -$DEBUGFILE="&STDERR" if $DEBUGFILE eq '-'; - -open(DEBUG,">>$DEBUGFILE") || die("Cannot open \"$DEBUGFILE\": $!\n"); -select((select(DEBUG),$|=1)[$[]); - -;# &log prints a single trap record (adding a (local) time stamp) -sub log -{ - chop($date=&ctime(time)); - print "$date ",@_,"\n"; -} - -sub debug -{ - print DEBUG @_,"\n"; -} -;# -$proto_udp = (getprotobyname('udp'))[$[+2] || - (warn("$0: Could not get protocoll number for 'udp' using 17"), 17); - -$ntp_port = (getservbyname('ntp','udp'))[$[+2] || - (warn("$0: Could not get port number for service ntp/udp using 123"), 123); - -;# -socket(S, &AF_INET, &SOCK_DGRAM, $proto_udp) || die("Cannot open socket: $!\n"); - -;# -bind(S, pack("S n a4 x8", &AF_INET, $opt_p, &INADDR_ANY)) || - die("Cannot bind: $!\n"); - -($my_port, $my_addr) = (unpack("S n a4 x8",getsockname(S)))[$[+1,$[+2]; -&log(sprintf("Listening at address %d.%d.%d.%d port %d", - unpack("C4",$my_addr), $my_port)); - -;# disregister with all servers in case of termination -sub cleanup -{ - &log("Aborted by signal \"$_[$[]\"") if defined($_[$[]); - - foreach (@Hosts) - { - if ( ! defined($Host{$_}) ) - { - print "no info for host '$_'\n"; - next; - } - &ntp'send(S,31,0,"",pack("Sna4x8",&AF_INET,$ntp_port,$Host{$_})); #'; - } - close(S); - exit(2); -} - -$SIG{'HUP'} = 'cleanup'; -$SIG{'INT'} = 'cleanup'; -$SIG{'QUIT'} = 'cleanup'; -$SIG{'TERM'} = 'cleanup'; - -0 && $a && $b; -sub timeouts # sort timeout id array -{ - $TIMEOUTS{$a} <=> $TIMEOUTS{$b}; -} - -;# a Request element looks like: pack("a4SC",addr,associd,op) -@Requests= (); - -;# compute requests for set trap control msgs to each host given -{ - local($name,$addr); - - foreach (@Hosts) - { - if (/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/) - { - ($name,$addr) = - (gethostbyaddr(pack("C4",$1,$2,$3,$4),&AF_INET))[$[,$[+4]; - unless (defined($name)) - { - $name = sprintf("[[%d.%d.%d.%d]]",$1,$2,$3,$4); - $addr = pack("C4",$1,$2,$3,$4); - } - } - else - { - ($name,$addr) = (gethostbyname($_))[$[,$[+4]; - unless (defined($name)) - { - warn "$0: unknown host \"$_\" - ignored\n"; - next; - } - } - next if defined($Host{$name}); - $Host{$name} = $addr; - $Host{$_} = $addr; - push(@Requests,pack("a4SC",$addr,0,6)); # schedule a set trap request for $name - } -} - -sub hostname -{ - local($addr) = @_; - return $HostName{$addr} if defined($HostName{$addr}); - local($name) = gethostbyaddr($addr,&AF_INET); - &debug(sprintf("hostname(%d.%d.%d.%d) = \"%s\"",unpack("C4",$addr),$name)) - if defined($name); - defined($name) && ($HostName{$addr} = $name) && (return $name); - &debug(sprintf("Failed to get name for %d.%d.%d.%d",unpack("C4",$addr))); - return sprintf("[%d.%d.%d.%d]",unpack("C4",$addr)); -} - -;# when no hosts were given on the commandline no requests have been scheduled -&usage unless (@Requests); - -&debug(sprintf("%d request(s) scheduled",scalar(@Requests))); -grep(&debug(" - ".$_),keys(%Host)); - -;# allocate variables; -$addr=""; -$assoc=0; -$op = 0; -$timeout = 0; -$ret=""; -%TIMEOUTS = (); -%TIMEOUT_PROCS = (); -@TIMEOUTS = (); - -$len = 512; -$buf = " " x $len; - -while (1) -{ - if (@Requests || @TIMEOUTS) # if there is some work pending - { - if (@Requests) - { - ($addr,$assoc,$op) = unpack("a4SC",($req = shift(@Requests))); - &debug(sprintf("Request: %s: %s(%d)",&hostname($addr), &ntp'cntrlop_name($op), $assoc)); #';)) - $ret = &ntp'send(S,$op,$assoc,"", #'( - pack("Sna4x8",&AF_INET,$ntp_port,$addr)); - &set_timeout("retry-".unpack("H*",$req),time+$BASE_TIMEOUT, - sprintf("&retry(\"%s\");",unpack("H*",$req))); - - last unless (defined($ret)); # warn called by ntp'send(); - - ;# if there are more requests just have a quick look for new messages - ;# otherwise grant server time for a response - $timeout = @Requests ? 0 : $BASE_TIMEOUT; - } - if ($timeout && @TIMEOUTS) - { - ;# ensure not to miss a timeout - if ($timeout + time > $TIMEOUTS{$TIMEOUTS[$[]}) - { - $timeout = $TIMEOUTS{$TIMEOUTS[$[]} - time; - $timeout = 0 if $timeout < 0; - } - } - } - else - { - ;# no work yet - wait for some messages dropping in - ;# usually this will not hapen as the refresh semantic will - ;# always have a pending timeout - undef($timeout); - } - - vec($mask="",fileno(S),1) = 1; - $ret = select($mask,undef,undef,$timeout); - - warn("$0: select: $!\n"),last if $ret < 0; # give up on error return from select - - if ($ret == 0) - { - ;# timeout - if (@TIMEOUTS && time > $TIMEOUTS{$TIMEOUTS[$[]}) - { - ;# handle timeout - $timeout_proc = - (delete $TIMEOUT_PROCS{$TIMEOUTS[$[]}, - delete $TIMEOUTS{shift(@TIMEOUTS)})[$[]; - eval $timeout_proc; - die "timeout eval (\"$timeout_proc\"): $@\n" if $@; - } - ;# else: there may be something to be sent - } - else - { - ;# data avail - $from = recv(S,$buf,$len,0); - ;# give up on error return from recv - warn("$0: recv: $!\n"), last unless (defined($from)); - - $from = (unpack("Sna4",$from))[$[+2]; # keep host addr only - ;# could check for ntp_port - but who cares - &debug("-Packet from ",&hostname($from)); - - ;# stuff packet into ntp mode 6 receive machinery - ($ret,$data,$status,$associd,$op,$seq,$auth_keyid) = - &ntp'handle_packet($buf,$from); # '; - &debug(sprintf("%s uses auth_keyid %d",&hostname($from),$auth_keyid)) if defined($auth_keyid); - next unless defined($ret); - - if ($ret eq "") - { - ;# handle packet - ;# simple trap response messages have neither timeout nor retries - &clear_timeout("retry-".unpack("H*",pack("a4SC",$from,$associd,$op))) unless $op == 7; - delete $RETRY{pack("a4SC",$from,$associd,$op)} unless $op == 7; - - &process_response($from,$ret,$data,$status,$associd,$op,$seq,$auth_keyid); - } - else - { - ;# some kind of error - &log(sprintf("%50s: %s: %s",(gethostbyaddr($from,&AF_INET))[$[],$ret,$data)); - if ($ret ne "TIMEOUT" && $ret ne "ERROR") - { - &clear_timeout("retry-".unpack("H*",pack("a4SC",$from,$associd,$op))); - } - } - } - -} - -warn("$0: terminating\n"); -&cleanup; -exit 0; - -;################################################## -;# timeout support -;# -sub set_timeout -{ - local($id,$time,$proc) = @_; - - $TIMEOUTS{$id} = $time; - $TIMEOUT_PROCS{$id} = $proc; - @TIMEOUTS = sort timeouts keys(%TIMEOUTS); - chop($date=&ctime($time)); - &debug(sprintf("Schedule timeout \"%s\" for %s", $id, $date)); -} - -sub clear_timeout -{ - local($id) = @_; - delete $TIMEOUTS{$id}; - delete $TIMEOUT_PROCS{$id}; - @TIMEOUTS = sort timeouts keys(%TIMEOUTS); - &debug("Clear timeout \"$id\""); -} - -0 && &refresh; -sub refresh -{ - local($addr) = @_[$[]; - $addr = pack("H*",$addr); - &debug(sprintf("Refreshing trap for %s", &hostname($addr))); - push(@Requests,pack("a4SC",$addr,0,6)); -} - -0 && &retry; -sub retry -{ - local($tag) = @_; - $tag = pack("H*",$tag); - $RETRY{$tag} = 0 if (!defined($RETRY{$tag})); - - if (++$RETRY{$tag} > $MAX_TRY) - { - &debug(sprintf("Retry failed: %s assoc %5d op %d", - &hostname(substr($tag,$[,4)), - unpack("x4SC",$tag))); - return; - } - &debug(sprintf("Retrying: %s assoc %5d op %d", - &hostname(substr($tag,$[,4)), - unpack("x4SC",$tag))); - push(@Requests,$tag); -} - -sub process_response -{ - local($from,$ret,$data,$status,$associd,$op,$seq,$auth_keyid) = @_; - - $msg=""; - if ($op == 7) # trap response - { - $msg .= sprintf("%40s trap#%-5d", - &hostname($from),$seq); - &debug (sprintf("\nTrap %d associd %d:\n%s\n===============\n",$seq,$associd,$data)); - if ($associd == 0) # system event - { - $msg .= " SYSTEM "; - $evnt = &ntp'SystemEvent($status); #'; - $msg .= "$evnt "; - ;# for special cases add additional info - ($stratum) = ($data =~ /stratum=(\d+)/); - ($refid) = ($data =~ /refid=([\w\.]+)/); - $msg .= "stratum=$stratum refid=$refid"; - if ($refid =~ /\[?(\d+)\.(\d+)\.(\d+)\.(\d+)/) - { - local($x) = (gethostbyaddr(pack("C4",$1,$2,$3,$4),&AF_INET)); - $msg .= " " . $x if defined($x) - } - if ($evnt eq "event_sync_chg") - { - $msg .= sprintf("%s %s ", - &ntp'LI($status), #', - &ntp'ClockSource($status) #' - ); - } - elsif ($evnt eq "event_sync/strat_chg") - { - ($peer) = ($data =~ /peer=([0-9]+)/); - $msg .= " peer=$peer"; - } - elsif ($evnt eq "event_clock_excptn") - { - if (($device) = ($data =~ /device=\"([^\"]+)\"/)) - { - ($cstatus) = ($data =~ /refclockstatus=0?x?([\da-fA-F]+)/); - $Cstatus = hex($cstatus); - $msg .= sprintf("- %-32s",&ntp'clock_status($Cstatus)); #'); - ($timecode) = ($data =~ /timecode=\"([^\"]+)\"/); - $msg .= " \"$device\" \"$timecode\""; - } - else - { - push(@Requests,pack("a4SC",$from, $associd, 4)); - } - } - } - else # peer event - { - $msg .= sprintf("peer %5d ",$associd); - ($srcadr) = ($data =~ /srcadr=\[?([\d\.]+)/); - $msg .= sprintf("%-18s %40s ", "[$srcadr]", - &hostname(pack("C4",split(/\./,$srcadr)))); - $evnt = &ntp'PeerEvent($status); #'; - $msg .= "$evnt "; - ;# for special cases include additional info - if ($evnt eq "event_clock_excptn") - { - if (($device) = ($data =~ /device=\"([^\"]+)\"/)) - { - ;#&debug("----\n$data\n====\n"); - ($cstatus) = ($data =~ /refclockstatus=0?x?([\da-fA-F]+)/); - $Cstatus = hex($cstatus); - $msg .= sprintf("- %-32s",&ntp'clock_status($Cstatus)); #'); - ($timecode) = ($data =~ /timecode=\"([^\"]+)\"/); - $msg .= " \"$device\" \"$timecode\""; - } - else - { - ;# no clockvars included - post a cv request - push(@Requests,pack("a4SC",$from, $associd, 4)); - } - } - elsif ($evnt eq "event_stratum_chg") - { - ($stratum) = ($data =~ /stratum=(\d+)/); - $msg .= "new stratum $stratum"; - } - } - } - elsif ($op == 6) # set trap resonse - { - &debug("Set trap ok from ",&hostname($from)); - &set_timeout("refresh-".unpack("H*",$from),time+$REFRESH_TIME, - sprintf("&refresh(\"%s\");",unpack("H*",$from))); - return; - } - elsif ($op == 4) # read clock variables response - { - ;# status of clock - $msg .= sprintf(" %40s ", &hostname($from)); - if ($associd == 0) - { - $msg .= "system clock status: "; - } - else - { - $msg .= sprintf("peer %5d clock",$associd); - } - $msg .= sprintf("%-32s",&ntp'clock_status($status)); #'); - ($device) = ($data =~ /device=\"([^\"]+)\"/); - ($timecode) = ($data =~ /timecode=\"([^\"]+)\"/); - $msg .= " \"$device\" \"$timecode\""; - } - elsif ($op == 31) # unset trap response (UNOFFICIAL op) - { - ;# clear timeout - &debug("Clear Trap ok from ",&hostname($from)); - &clear_timeout("refresh-".unpack("H*",$from)); - return; - } - else # unexpected response - { - $msg .= "unexpected response to op $op assoc=$associd"; - $msg .= sprintf(" status=%04x",$status); - } - &log($msg); -} diff --git a/contrib/ntp/scripts/monitoring/timelocal.pl b/contrib/ntp/scripts/monitoring/timelocal.pl deleted file mode 100644 index d0f73a2..0000000 --- a/contrib/ntp/scripts/monitoring/timelocal.pl +++ /dev/null @@ -1,77 +0,0 @@ -;# timelocal.pl -;# -;# Usage: -;# $time = timelocal($sec,$min,$hours,$mday,$mon,$year,$junk,$junk,$isdst); -;# $time = timegm($sec,$min,$hours,$mday,$mon,$year); - -;# These routines are quite efficient and yet are always guaranteed to agree -;# with localtime() and gmtime(). We manage this by caching the start times -;# of any months we've seen before. If we know the start time of the month, -;# we can always calculate any time within the month. The start times -;# themselves are guessed by successive approximation starting at the -;# current time, since most dates seen in practice are close to the -;# current date. Unlike algorithms that do a binary search (calling gmtime -;# once for each bit of the time value, resulting in 32 calls), this algorithm -;# calls it at most 6 times, and usually only once or twice. If you hit -;# the month cache, of course, it doesn't call it at all. - -;# timelocal is implemented using the same cache. We just assume that we're -;# translating a GMT time, and then fudge it when we're done for the timezone -;# and daylight savings arguments. The timezone is determined by examining -;# the result of localtime(0) when the package is initialized. The daylight -;# savings offset is currently assumed to be one hour. - -CONFIG: { - package timelocal; - - @epoch = localtime(0); - $tzmin = $epoch[2] * 60 + $epoch[1]; # minutes east of GMT - if ($tzmin > 0) { - $tzmin = 24 * 60 - $tzmin; # minutes west of GMT - $tzmin -= 24 * 60 if $epoch[5] == 70; # account for the date line - } - - $SEC = 1; - $MIN = 60 * $SEC; - $HR = 60 * $MIN; - $DAYS = 24 * $HR; - $YearFix = ((gmtime(946684800))[5] == 100) ? 100 : 0; -} - -sub timegm { - package timelocal; - - $ym = pack(C2, @_[5,4]); - $cheat = $cheat{$ym} || &cheat; - $cheat + $_[0] * $SEC + $_[1] * $MIN + $_[2] * $HR + ($_[3]-1) * $DAYS; -} - -sub timelocal { - package timelocal; - - $ym = pack(C2, @_[5,4]); - $cheat = $cheat{$ym} || &cheat; - $cheat + $_[0] * $SEC + $_[1] * $MIN + $_[2] * $HR + ($_[3]-1) * $DAYS - + $tzmin * $MIN - 60 * 60 * ($_[8] != 0); -} - -package timelocal; - -sub cheat { - $year = $_[5]; - $month = $_[4]; - $guess = $^T; - @g = gmtime($guess); - $year += $YearFix if $year < $epoch[5]; - while ($diff = $year - $g[5]) { - $guess += $diff * (364 * $DAYS); - @g = gmtime($guess); - } - while ($diff = $month - $g[4]) { - $guess += $diff * (28 * $DAYS); - @g = gmtime($guess); - } - $g[3]--; - $guess -= $g[0] * $SEC + $g[1] * $MIN + $g[2] * $HR + $g[3] * $DAYS; - $cheat{$ym} = $guess; -} diff --git a/contrib/ntp/scripts/ntp-close b/contrib/ntp/scripts/ntp-close deleted file mode 100755 index b5077e6..0000000 --- a/contrib/ntp/scripts/ntp-close +++ /dev/null @@ -1,8 +0,0 @@ -#! /bin/sh - -lynx -source http://www.eecis.udel.edu/~mills/ntp/clock2.htm | - sed -n -e 's,).*,,' -e' /([0-9.]*$/s/.*(//p' | - xargs ntpdate -q | - sort -n +7 > /tmp/ntp-close - -# From: Neal McBurnett diff --git a/contrib/ntp/scripts/ntp-groper b/contrib/ntp/scripts/ntp-groper deleted file mode 100755 index 1fd0cfe..0000000 --- a/contrib/ntp/scripts/ntp-groper +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -# -# ntpgroper host ... -# -# This script checks each hostname given as an argument to see if -# it is running NTP. It reports one of the following messages (assume -# the host is named "dumbo.hp.com": -# -# dumbo.hp.com not registered in DNS -# dumbo.hp.com not responding to ping -# dumbo.hp.com refused ntpq connection -# dumbo.hp.com not responding to NTP -# dumbo.hp.com answers NTP version 2, stratum: 3, ref: telford.nsa.hp.com -# dumbo.hp.com answers NTP version 3, stratum: 3, ref: telford.nsa.hp.com -# -# It ain't pretty, but it is kinda useful. -# -# Walter Underwood, 11 Feb 1993, wunder@hpl.hp.com -# -# converted to /bin/sh from /bin/ksh by scott@ee.udel.edu 24 Mar 1993 - -PATH="/usr/local/etc:$PATH" export PATH - -verbose=1 -logfile=/tmp/cntp-log$$ -ntpqlog=/tmp/cntp-ntpq$$ - -# I wrap the whole thing in parens so that it is possible to redirect -# all the output somewhere, if desired. -( -for host in $* -do - # echo "Trying $host." - - gethost $host > /dev/null 2>&1 - if [ $? -ne 0 ] - then - echo "$host not registered in DNS" - continue - fi - - ping $host 64 1 > /dev/null 2>&1 - if [ $? -ne 0 ] - then - echo "$host not responding to ping" - continue - fi - - # Attempt to contact with version 3 ntp, then try version 2. - for version in 3 2 - do - - ntpq -c "ntpversion $version" -p $host > $ntpqlog 2>&1 - - if fgrep -s 'Connection refused' $ntpqlog - then - echo "$host refused ntpq connection" - break - fi - - responding=1 - fgrep -s 'timed out, nothing received' $ntpqlog > /dev/null && responding=0 - - if [ $responding -eq 1 ] - then - ntpq -c "ntpversion $version" -c rl $host > $ntpqlog - - # First we extract the reference ID (usually a host or a clock) - synchost=`fgrep "refid=" $ntpqlog` - #synchost=${synchost##*refid=} # strip off the beginning of the line - #synchost=${synchost%%,*} # strip off the end - synchost=`expr "$synchost" : '.*refid=\([^,]*\),.*'` - - # Next, we get the stratum - stratum=`fgrep "stratum=" $ntpqlog` - #stratum=${stratum##*stratum=} - #stratum=${stratum%%,*} - stratum=`expr "$stratum" : '.*stratum=\([^,]*\),.*'` - - echo "$host answers NTP version $version, stratum: $stratum, ref: $synchost" - break; - fi - - if [ $version -eq 2 -a $responding -eq 0 ] - then - echo "$host not responding to NTP" - fi - done -done -) -# ) >> $logfile - -if [ -f $ntpqlog ]; then - rm $ntpqlog -fi diff --git a/contrib/ntp/scripts/ntp-restart b/contrib/ntp/scripts/ntp-restart deleted file mode 100755 index 0a1d58a..0000000 --- a/contrib/ntp/scripts/ntp-restart +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# -# This script can be used to kill and restart the NTP daemon. Edit the -# /usr/local/bin/ntpd line to fit. -# -kill -INT `ps -ax | egrep "ntpd" | egrep -v "egrep" | sed 's/^\([ 0-9]*\) .*/\1'/` -sleep 10 -/usr/local/bin/ntpd -g -/usr/local/bin/ntp-wait -exit 0 diff --git a/contrib/ntp/scripts/ntp-status b/contrib/ntp/scripts/ntp-status deleted file mode 100755 index 4109124..0000000 --- a/contrib/ntp/scripts/ntp-status +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh - -# From: Marc Brett - -# Here's a quick hack which can give you the stratum, delay, offset -# for any number of ntp servers. - -NTPDATE=/usr/local/bin/ntpdate -NSLOOKUP=/usr/sbin/nslookup -EGREP=/bin/egrep -AWK=/bin/awk -RM=/bin/rm -FILE=/tmp/ntp.$$ - -USAGE="Usage: $0 hostname [hostname ...]" - -if [ $# -le 0 ] -then - echo $USAGE 2>&1 - exit 1 -fi - -trap '$RM -f $FILE; exit' 1 2 3 4 13 15 - -for HOST in $* -do - HOSTNAME=`$NSLOOKUP $HOST | $EGREP "Name:" | $AWK '{print $2}'` - if [ -n "$HOSTNAME" ] - then - $NTPDATE -d $HOST 2>/dev/null | $EGREP '^stratum|^delay|^offset|^originate' > $FILE - STRATUM=`$EGREP '^stratum' $FILE | $AWK '{print $2}'` - OFFSET=`$EGREP '^offset' $FILE | $AWK '{print $2}'` - DELAY=`$EGREP '^delay' $FILE | $AWK '{print $2}'` - TIMESTAMP=`$EGREP '^originate' $FILE | $AWK '{print $4 " " $5 " " $6 " " $7 " " $8}'` - if [ "$STRATUM" -ne 0 ] - then - echo "$HOSTNAME: stratum:$STRATUM delay:$DELAY offset:$OFFSET $TIMESTAMP" - else - echo $HOSTNAME: Not running NTP - fi - fi - -done - -$RM -f $FILE diff --git a/contrib/ntp/scripts/ntp-wait.in b/contrib/ntp/scripts/ntp-wait.in deleted file mode 100644 index a26630b..0000000 --- a/contrib/ntp/scripts/ntp-wait.in +++ /dev/null @@ -1,42 +0,0 @@ -#! @PATH_PERL@ -w - -die "perl5 needed\n" unless ($] > 5); - -use Getopt::Std; - -$opt_f = 0; # 'Hard' failure if 'state' is unknown -$opt_n = 1000; # How many tries before we give up? (10 min+) -$opt_s = 6; # Seconds to sleep between tries (6s = 10/min) -$opt_v = 0; # Be verbose? - -getopts('fn:s:v'); - -$cmd = 'ntpq -c "rv 0 state"'; - -$| = 1; # Autoflush output. - -print "Waiting for ntpd to synchronize... " if ($opt_v); -for ($i = 0; $i < $opt_n; ++$i) { - open(Q, $cmd." 2>&1 |") || die "Can't start ntpq: $!"; - while() { - if (/^state=4/) { - print "\bOK!\n" if ($opt_v); - exit 0; - } - - if (/request variable was unknown/) { - print "\bCan't tell!\nPerhaps you are running an old version of ntpd.\n" if ($opt_v); - exit $opt_f; - } - - if (/Connection refused/) { - print "\bntpd is not running!\n" if ($opt_v); - exit 1; - } - } - close(Q); - print "\b".substr("*+:.", $i % 4, 1) if ($opt_v); - sleep($opt_s); -} -print "\bNo!\nntpd did not synchronize.\n" if ($opt_v); -exit 1; diff --git a/contrib/ntp/scripts/ntpsweep.in b/contrib/ntp/scripts/ntpsweep.in deleted file mode 100644 index 156fb45..0000000 --- a/contrib/ntp/scripts/ntpsweep.in +++ /dev/null @@ -1,301 +0,0 @@ -#! @PATH_PERL@ -w -# -# $Id$ -# -# DISCLAIMER -# -# Copyright (C) 1999,2000 Hans Lambermont and Origin B.V. -# -# Permission to use, copy, modify and distribute this software and its -# documentation for any purpose and without fee is hereby granted, -# provided that the above copyright notice appears in all copies and -# that both the copyright notice and this permission notice appear in -# supporting documentation. This software is supported as is and without -# any express or implied warranties, including, without limitation, the -# implied warranties of merchantability and fitness for a particular -# purpose. The name Origin B.V. must not be used to endorse or promote -# products derived from this software without prior written permission. -# -# Hans Lambermont / -# 14 Jan 2000 - -require 5.0; # But actually tested on 5.004 ;) -use Getopt::Long; # GetOptions() -use strict; - -my $version = 1.3; -(my $program = $0) =~ s%.*/(.+?)(.pl)?$%$1%; - -# Hardcoded paths/program names -my $ntpdate = "ntpdate"; -my $ntpq = "ntpq"; - -# no STDOUT buffering -$| = 1; - -my ($help, $single_host, $showpeers, $maxlevel, $strip, $askversion); -my $res = GetOptions("help!" => \$help, - "host=s" => \$single_host, - "peers!" => \$showpeers, - "maxlevel=s" => \$maxlevel, - "strip=s" => \$strip, - "version!" => \$askversion); - -if ($askversion) { - print("$version\n"); - exit 0; -} - -if ($help || ((@ARGV != 1) && !$single_host)) { - warn <|--maxlevel |--version] \\ - |[--host ] - -Description: - $program prints per host given in the NTP stratum level, the - clock offset in seconds, the daemon version, the operating system and - the processor. Optionally recursing through all peers. - -Options: ---help - Print this short help text and exit. ---version - Print version ($version) and exit. - - Specify hosts file. File format is one hostname or ip number per line. - Lines beginning with # are considered as comment. ---host - Speficy a single host, bypassing the need for a hosts file. ---peers - Recursively list all peers a host synchronizes to. - An '= ' before a peer means a loop. Recursion stops here. ---maxlevel - Traverse peers up to this level (4 is a reasonable number). ---strip - Strip from hostnames. - -Examples: - $program myhosts.txt --strip .foo.com - $program --host some.host --peers --maxlevel 4 -EOF - exit 1; -} - -my $hostsfile = shift; -my (@hosts, @known_hosts); -my (%known_host_info, %known_host_peers); - -sub read_hosts() -{ - local *HOSTS; - open (HOSTS, $hostsfile) || - die "$program: FATAL: unable to read $hostsfile: $!\n"; - while () { - next if /^\s*(#|$)/; # comment/empty - chomp; - push(@hosts, $_); - } - close(HOSTS); -} - -# translate IP to hostname if possible -sub ip2name { - my($ip) = @_; - my($addr, $name, $aliases, $addrtype, $length, @addrs); - $addr = pack('C4', split(/\./, $ip)); - ($name, $aliases, $addrtype, $length, @addrs) = gethostbyaddr($addr, 2); - if ($name) { - # return lower case name - return("\L$name"); - } else { - return($ip); - } -} - -# item_in_list($item, @list): returns 1 if $item is in @list, 0 if not -sub item_in_list { - my($item, @list) = @_; - my($i); - foreach $i (@list) { - return 1 if ($item eq $i); - } - return 0; -} - -sub scan_host($;$;$) { - my($host, $level, @trace) = @_; - my $stratum = 0; - my $offset = 0; - my $daemonversion = ""; - my $system = ""; - my $processor = ""; - my @peers; - my $known_host = 0; - - if (&item_in_list($host, @known_hosts)) { - $known_host = 1; - } else { - # ntpdate part - open(NTPDATE, "$ntpdate -bd $host 2>/dev/null |") || - die "Cannot open ntpdate pipe: $!\n"; - while () { - /^stratum\s+(\d+).*$/ && do { - $stratum = $1; - }; - /^offset\s+([0-9.-]+)$/ && do { - $offset = $1; - }; - } - close(NTPDATE); - - # got answers ? If so, go on. - if ($stratum) { - # ntpq part - my $ntpqparams = "-c 'rv 0 processor,system,daemon_version'"; - open(NTPQ, "$ntpq $ntpqparams $host 2>/dev/null |") || - die "Cannot open ntpq pipe: $!\n"; - while () { - /daemon_version="(.*)"/ && do { - $daemonversion = $1; - }; - /system="([^"]*)"/ && do { - $system = $1; - }; - /processor="([^"]*)"/ && do { - $processor = $1; - }; - } - close(NTPQ); - - # Shorten daemon_version string. - $daemonversion =~ s/(;|Mon|Tue|Wed|Thu|Fri|Sat|Sun).*$//; - $daemonversion =~ s/version=//; - $daemonversion =~ s/(x|)ntpd //; - $daemonversion =~ s/(\(|\))//g; - $daemonversion =~ s/beta/b/; - $daemonversion =~ s/multicast/mc/; - - # Shorten system string - $system =~ s/UNIX\///; - $system =~ s/RELEASE/r/; - $system =~ s/CURRENT/c/; - - # Shorten processor string - $processor =~ s/unknown//; - } - - # got answers ? If so, go on. - if ($daemonversion) { - # ntpq again, find out the peers this time - if ($showpeers) { - my $ntpqparams = "-pn"; - open(NTPQ, "$ntpq $ntpqparams $host 2>/dev/null |") || - die "Cannot open ntpq pipe: $!\n"; - while () { - /^No association ID's returned$/ && do { - last; - }; - /^ remote/ && do { - next; - }; - /^==/ && do { - next; - }; - /^( |x|\.|-|\+|#|\*|o)([^ ]+)/ && do { - push(@peers, ip2name($2)); - next; - }; - print "ERROR: $_"; - } - close(NTPQ); - } - } - - # Add scanned host to known_hosts array - push(@known_hosts, $host); - if ($stratum) { - $known_host_info{$host} = sprintf("%2d %9.3f %-11s %-12s %s", - $stratum, $offset, substr($daemonversion,0,11), - substr($system,0,12), substr($processor,0,9)); - } else { - # Stratum level 0 is consider invalid - $known_host_info{$host} = sprintf(" ?"); - } - $known_host_peers{$host} = [@peers]; - } - - if ($stratum || $known_host) { # Valid or known host - my $printhost = ' ' x $level . $host; - # Shorten host string - if ($strip) { - $printhost =~ s/$strip//; - } - # append number of peers in brackets if requested and valid - if ($showpeers && ($known_host_info{$host} ne " ?")) { - $printhost .= " (" . @{$known_host_peers{$host}} . ")"; - } - # Finally print complete host line - printf("%-32s %s\n", - substr($printhost,0,32), $known_host_info{$host}); - if ($showpeers && (eval($maxlevel ? $level < $maxlevel : 1))) { - my $peer; - push(@trace, $host); - # Loop through peers - foreach $peer (@{$known_host_peers{$host}}) { - if (&item_in_list($peer, @trace)) { - # we've detected a loop ! - $printhost = ' ' x ($level + 1) . "= " . $peer; - # Shorten host string - if ($strip) { - $printhost =~ s/$strip//; - } - printf("%-32s %s\n", - substr($printhost,0,32)); - } else { - if (substr($peer,0,3) ne "127") { - &scan_host($peer, $level + 1, @trace); - } - } - } - } - } else { # We did not get answers from this host - my $printhost = ' ' x $level . $host; - # Shorten host string - if ($strip) { - $printhost =~ s/$strip//; - } - printf("%-32s ?\n", substr($printhost,0,32)); - } -} - -sub scan_hosts() -{ - my $host; - for $host (@hosts) { - my @trace; - push(@trace, $host); - scan_host($host, 0, @trace); - } -} - -# Main program - -if ($single_host) { - push(@hosts, $single_host); -} else { - &read_hosts($hostsfile); -} - -# Print header -print <) { - $stratum = $1 if (/stratum=(\d+)/); - $peer = $1 if (/peer=(\d+)/); - # Very old servers report phase and not offset. - $offset = $1 if (/(?:offset|phase)=([^\s,]+)/); - $rootdelay = $1 if (/rootdelay=([^\s,]+)/); - $refid = $1 if (/refid=([^\s,]+)/); - } - close(PH) || die "$cmd failed"; - last if ($stratum == 255); - $offset /= 1000; - $rootdelay /= 1000; - $dhost = $host; - # Only do lookups of IPv4 addresses. The standard lookup functions - # of perl only do IPv4 and I don't know if we should require extras. - if ($dodns && $host =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/) { - $iaddr = inet_aton($host); - $name = (gethostbyaddr($iaddr, AF_INET))[0]; - $dhost = $name if (defined($name)); - } - printf("%s: stratum %d, offset %f, root distance %f", - $dhost, $stratum, $offset, $rootdelay); - printf(", refid '%s'", $refid) if ($stratum == 1); - printf("\n"); - last if ($stratum == 0 || $stratum == 1 || $stratum == 16); - last if ($refid =~ /^127\.127\.\d{1,3}\.\d{1,3}$/); - - $cmd = "$ntpq -n -c \"pstat $peer\" $host"; - open(PH, $cmd . "|") || die "failed to start command $cmd: $!"; - $thost = ""; - while () { - $thost = $1, last if (/srcadr=(\S+),/); - } - close(PH) || die "$cmd failed"; - last if ($thost eq ""); - $host = $thost; -} - diff --git a/contrib/ntp/scripts/ntpver.in b/contrib/ntp/scripts/ntpver.in deleted file mode 100644 index be36897..0000000 --- a/contrib/ntp/scripts/ntpver.in +++ /dev/null @@ -1,7 +0,0 @@ -#!@PATH_SH@ -# print version string of NTP daemon -# Copyright (c) 1997 by Ulrich Windl -# Modified 970318: Harlan Stenn: rewritten... -# usage: ntpver hostname - -ntpq -c "rv 0 daemon_version" $* | awk '/daemon_version/ { print $2 }' diff --git a/contrib/ntp/scripts/plot_summary.in b/contrib/ntp/scripts/plot_summary.in deleted file mode 100644 index 3b46a04..0000000 --- a/contrib/ntp/scripts/plot_summary.in +++ /dev/null @@ -1,337 +0,0 @@ -#! @PATH_PERL@ -w -# $Id$ -# -# Use Gnuplot to display data in summary files produced by summary.pl. -# This script requires GNUPLOT 3.7! -# -# Copyright (c) 1997, 1999 by Ulrich Windl -# -# 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 2 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, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -require 5.003; # "never tested with any other version of Perl" -use strict; - -use Time::Local; -use Getopt::Long; - -# parse command line -my $summary_dir = "/tmp"; -my $identifier = "host " . `hostname`; # origin of these data -chomp $identifier; # remove newline -my $offset_limit = 0.128; # limit of absolute offset -my $output_file = ""; # output file defaults to stdout -my $output_file_number = 1; # numbering of output files -my $gnuplot_terminal = $ENV{DISPLAY} ? "x11" : "dumb"; -my $wait_after_plot = 1; -my @peer_list = (); - -my %options = ("directory|input-directory=s" => \$summary_dir, - "identifier=s" => \$identifier, - "offset-limit=f" => \$offset_limit, - "output-file=s" => \$output_file, - "peer=s@" => \@peer_list, - "plot-term|gnuplot-term=s" => \$gnuplot_terminal, - "wait-after-plot!" => \$wait_after_plot, - ); - -if ( !GetOptions(%options) ) -{ - print STDERR "valid options for $0 are:\n"; - my $opt; - foreach $opt (sort(keys %options)) { - print STDERR "\t--$opt\t(default is "; - if ( ref($options{$opt}) eq "ARRAY" ) { - print STDERR join(", ", map { "'$_'" } @{$options{$opt}}); - } else { - print STDERR "'${$options{$opt}}'"; - } - print STDERR ")\n"; - } - print STDERR "\n"; - die; -} - -chomp $identifier; -die "illegal offset-limit: $offset_limit" unless $offset_limit > 0.0; -$offset_limit *= 1e6; # scale to microseconds - -# return the smallest value in the given list -sub min -{ - my ($result, @rest) = @_; - map { $result = $_ if ($_ < $result) } @rest; - return($result); -} - -# return the largest value in the given list -sub max -{ - my ($result, @rest) = @_; - map { $result = $_ if ($_ > $result) } @rest; - return($result); -} - -# maybe open alternate output file -sub open_output -{ - my $file; - if ($output_file) { - while ( -r ($file = "$output_file$output_file_number") ) { - ++$output_file_number; - } - open TOUCH, ">$file" and close TOUCH or die "$file: $!"; - print "set output \"$file\"\n"; - } -} - -# make Gnuplot wait -sub maybe_add_pause -{ - print "pause -1 \"Press key to continue...\"\n" if $wait_after_plot; -} - -# plot data from loop summary -sub do_loop -{ - my $fname = shift; - my $line; - my $out_file = "/tmp/tempdata$$"; - my $cmd_file = "/tmp/tempcmd$$"; - my ($first_day, $day_out) = ("", 0); - my ($lower_bound, $upper_bound, $rms); - my ($min_offs, $max_offs) = (1e9, -1e9); - my ($min_rms, $max_rms) = (1e9, -1e9); - open INPUT, "$fname" or die "$fname: $!"; - open OUTPUT, ">$out_file" or die "$out_file: $!"; - my @Fld; - while () { - chop; # strip record separator - @Fld = split; - if ($#Fld == 0) { -# loops.19960405 - $_ = $Fld[0]; s/.*([12]\d{3}[01]\d[0-3]\d)$/$1/; - m/(\d{4})(\d{2})(\d{2})/; - $line = timegm(59, 59, 23, $3, $2 - 1, $1 - 1900, 0, 0, 0); - $line = int $line / 86400; # days relative to 1970 - $first_day = "$1-$2-$3 ($line)" unless $day_out; - next; - } - if ($#Fld != 8) { - warn "Illegal number of fields in file $fname, line $."; - next; - } -# loop 216, 856106+/-874041.5, rms 117239.8, freq 67.52+/-10.335, var 4.850 - $_ = $Fld[1]; s/,/ /; $line .= " $_"; - $_ = $Fld[2]; m:(.+?)\+/-(.+),:; - $lower_bound = $1 - $2; - $upper_bound = $1 + $2; - $line .= "$1 $lower_bound $upper_bound"; - $min_offs = min($min_offs, $lower_bound); - $max_offs = max($max_offs, $upper_bound); - $_ = $Fld[4]; s/,/ /; $rms = $_; - $min_rms = min($min_rms, $rms); - $max_rms = max($max_rms, $rms); - $line .= " $rms"; - $_ = $Fld[6]; m:(.+?)\+/-(.+),:; - $line .= " $1 " . ($1-$2) . " " . ($1+$2); - $line .= " $Fld[8]"; - print OUTPUT "$line\n"; - $day_out = 1; -# 9621 216 856106 -17935.5 1730147.5 117239.8 67.52 57.185 77.855 4.850 - } - close INPUT; - close OUTPUT or die "close failed on $out_file: $!"; - my $ylimit = "["; - if ($min_offs < -$offset_limit) { - $ylimit .= "-$offset_limit"; - } - $ylimit .= ":"; - if ($max_offs > $offset_limit) { - $ylimit .= "$offset_limit"; - } - if ( $ylimit eq "[:" ) { - $ylimit = ""; - } else { - $ylimit = "[] $ylimit]"; - } -# build command file for GNUplot - open OUTPUT, "> $cmd_file" or die "$cmd_file: $!"; - my $oldfh = select OUTPUT; - print "set term $gnuplot_terminal\n"; - open_output; - print "set grid\n"; - print "set title \"Loop Summary for $identifier: " . - "Daily mean values since $first_day\\n" . - "(Offset limit is $offset_limit microseconds)\"\n"; - print "set ylabel \"[us]\"\n"; - print "set data style yerrorbars\n"; - print "set multiplot\n"; - print "set size 1, 0.5\n"; - print "set lmargin 8\n"; - print "set origin 0, 0.5\n"; - print "plot $ylimit \"$out_file\"" . - " using 1:3:4:5 title \"mean offset\", "; - print "\"$out_file\" using 1:(\$3-\$6/2) " . - "title \"(sigma low)\" with lines, "; - print "\"$out_file\" using 1:3 smooth bezier " . - "title \"(Bezier med)\" with lines, "; - print "\"$out_file\" using 1:(\$3+\$6/2) " . - "title \"(sigma high)\" with lines\n"; - print "set ylabel \"[ppm]\"\n"; - print "set origin 0, 0.0\n"; - print "set title\n"; - print "set xlabel \"Days relative to 1970\"\n"; - print "plot \"$out_file\" using 1:7:8:9 title \"mean frequency\", "; - print "\"$out_file\" using 1:(\$7-\$10/2) " . - "title \"(sigma low)\" with lines, "; - print "\"$out_file\" using 1:7 smooth bezier " . - "title \"(Bezier med)\" with lines, "; - print "\"$out_file\" using 1:(\$7+\$10/2) " . - "title \"(sigma high)\" with lines\n"; - print "set nomultiplot\n"; - maybe_add_pause; - - $ylimit = "["; - if ($min_rms < -$offset_limit) { - $ylimit .= "-$offset_limit"; - } - $ylimit .= ":"; - if ($max_rms > $offset_limit) { - $ylimit .= "$offset_limit"; - } - if ( $ylimit eq "[:" ) { - $ylimit =""; - } else { - $ylimit = "[] $ylimit]"; - } - - open_output; - print "set title \"Loop Summary for $identifier: " . - "Standard deviation since $first_day\\n" . - "(Offset limit is $offset_limit microseconds)\"\n"; - print "set xlabel\n"; - print "set ylabel \"[us]\"\n"; - print "set origin 0, 0.5\n"; - print "set data style linespoints\n"; - print "set multiplot\n"; - print "plot $ylimit \"$out_file\" using 1:6 title \"Offset\", "; - print "\"$out_file\" using 1:6 smooth bezier " . - "title \"(Bezier)\" with lines\n"; - print "set title\n"; - print "set origin 0, 0.0\n"; - print "set xlabel \"Days relative to 1970\"\n"; - print "set ylabel \"[ppm]\"\n"; - print "plot \"$out_file\" using 1:10 title \"Frequency\", "; - print "\"$out_file\" using 1:10 smooth bezier " . - "title \"(Bezier)\" with lines\n"; - print "set nomultiplot\n"; - maybe_add_pause; - - close OUTPUT or die "close failed on $cmd_file: $!"; - select $oldfh; - print `gnuplot $cmd_file`; - unlink $cmd_file; - unlink $out_file; -} - -# plot data form peer summary -sub do_peer -{ - my $fname = shift; - my $peer = shift; - my $out_file = "/tmp/tempdata$$"; - my $cmd_file = "/tmp/tempcmd$$"; - my $line; - my ($first_day, $day_out) = ("", 0); - open INPUT, "$fname" or die "$fname: $!"; - open OUTPUT, ">$out_file" or die "$out_file: $!"; - my @Fld; - while () { - chop; # strip record separator - @Fld = split; - if ($#Fld == 0) { -# peers.19960405 - $_ = $Fld[0]; s/.*([12]\d{3}[01]\d[0-3]\d)$/$1/; - m/(\d{4})(\d{2})(\d{2})/ or next; - $line = timegm(59, 59, 23, $3, $2 - 1, $1 - 1900, 0, 0, 0); - $line = int $line / 86400; # days relative to 1970 - $first_day = "$1-$2-$3 ($line)" unless $day_out; - next; - } - if ($#Fld != 7) { - warn "Illegal number of fields in file $fname, line $."; - next; - } - next if ($Fld[0] ne $peer); -# ident cnt mean rms max delay dist disp -# 127.127.8.1 38 30.972 189.867 1154.607 0.000 879.760 111.037 - $Fld[0] = $line; - print OUTPUT join(' ', @Fld) . "\n"; -# 9969 38 30.972 189.867 1154.607 0.000 879.760 111.037 - $day_out = 1; - } - close INPUT; - close OUTPUT or die "close failed on $out_file: $!"; - die "no data found for peer $peer" if !$day_out; - open OUTPUT, "> $cmd_file" or die "$cmd_file: $!"; - my $oldfh = select OUTPUT; - print "set term $gnuplot_terminal\n"; - open_output; - print "set grid\n"; - print "set multiplot\n"; - print "set lmargin 8\n"; - print "set size 1, 0.34\n"; - print "set origin 0, 0.66\n"; - print "set title " . - "\"Peer Summary for $peer on $identifier since $first_day\"\n"; - print "set data style linespoints\n"; - print "set ylabel \"[us]\"\n"; - print "plot \"$out_file\" using 1:3 title \"mean offset\", "; - print "\"$out_file\" using 1:3 smooth bezier " . - "title \"(Bezier)\" with lines, "; - print "\"$out_file\" using 1:(\$3-\$7/2) " . - "title \"(sigma low)\" with lines, "; - print "\"$out_file\" using 1:(\$3+\$7/2) " . - "title \"(sigma high)\" with lines\n"; - print "set title\n"; - print "set origin 0, 0.34\n"; - print "set size 1, 0.32\n"; - print "set ylabel\n"; - print "plot \"$out_file\" using 1:7 title \"dist\", "; - print "\"$out_file\" using 1:7 smooth bezier " . - "title \"(Bezier)\" with lines\n"; - print "set origin 0, 0.00\n"; - print "set size 1, 0.35\n"; - print "set xlabel \"Days relative to 1970\"\n"; - print "plot \"$out_file\" using 1:8 title \"disp\", "; - print "\"$out_file\" using 1:8 smooth bezier " . - "title \"(Bezier)\" with lines\n"; - print "set nomultiplot\n"; - maybe_add_pause; - - select $oldfh; - close OUTPUT or die "close failed on $cmd_file: $!"; - print `gnuplot $cmd_file`; - unlink $cmd_file; - unlink $out_file; -} - - -my $loop_summary ="$summary_dir/loop_summary"; -my $peer_summary ="$summary_dir/peer_summary"; -my $clock_summary="$summary_dir/clock_summary"; - -do_loop $loop_summary; -map { do_peer $peer_summary, $_ } @peer_list; diff --git a/contrib/ntp/scripts/rc1/postinstall b/contrib/ntp/scripts/rc1/postinstall deleted file mode 100644 index d84b8c5..0000000 --- a/contrib/ntp/scripts/rc1/postinstall +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -/etc/init.d/xntp start diff --git a/contrib/ntp/scripts/rc1/preinstall b/contrib/ntp/scripts/rc1/preinstall deleted file mode 100644 index aa18639..0000000 --- a/contrib/ntp/scripts/rc1/preinstall +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -if [ -x /etc/init.d/xntp ] -then - /etc/init.d/xntp stop -fi -exit 0 diff --git a/contrib/ntp/scripts/rc1/preremove b/contrib/ntp/scripts/rc1/preremove deleted file mode 100644 index b870151..0000000 --- a/contrib/ntp/scripts/rc1/preremove +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -/etc/init.d/xntp stop - -exit 0 diff --git a/contrib/ntp/scripts/rc1/prototype b/contrib/ntp/scripts/rc1/prototype deleted file mode 100644 index 3de20b0..0000000 --- a/contrib/ntp/scripts/rc1/prototype +++ /dev/null @@ -1,19 +0,0 @@ -!default 755 root bin -i pkginfo -i preinstall -i postinstall -i preremove -f none /etc/init.d/xntp=xntp 0755 root other -l none /etc/rc2.d/S79xntp=/etc/init.d/xntp -l none /etc/rc1.d/K79xntp=/etc/init.d/xntp -l none /etc/rc0.d/K79xntp=/etc/init.d/xntp -f none /usr/sbin/xntpd=xntpd/xntpd 0555 root other -f none /usr/sbin/xntpdc=xntpdc/xntpdc 0555 root other -f none /usr/sbin/ntpq=ntpq/ntpq 0555 root other -f none /usr/sbin/ntptrace=ntptrace/ntptrace 0555 root other -f none /usr/sbin/ntpdate=ntpdate/ntpdate 0555 root other -f none /usr/share/man/man1m/xntpd.1m=doc/xntpd.8 0444 root other -f none /usr/share/man/man1m/xntpdc.1m=doc/xntpdc.8 0444 root other -f none /usr/share/man/man1m/ntpdate.1m=doc/ntpdate.8 0444 root other -f none /usr/share/man/man1m/ntpq.1m=doc/ntpq.8 0444 root other -f none /usr/share/man/man1m/ntptrace.1m=doc/ntptrace.8 0444 root other diff --git a/contrib/ntp/scripts/rc1/xntp b/contrib/ntp/scripts/rc1/xntp deleted file mode 100644 index 227b943..0000000 --- a/contrib/ntp/scripts/rc1/xntp +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -killproc() { # kill named processes - pid=`/usr/bin/ps -e | - /usr/bin/grep $1 | - /usr/bin/sed -e 's/^ *//' -e 's/ .*//'` - [ "$pid" != "" ] && kill $pid -} - -case "$1" in -'start') - ps -e | grep xntpd > /dev/null 2>&1 - if [ $? -eq 0 ] - then - echo "ntp daemon already running. ntp start aborted" - exit 0 - fi - if [ -f /etc/inet/ntp.conf -a -x /usr/sbin/xntpd ] - then - /usr/sbin/xntpd -c /etc/inet/ntp.conf - fi - ;; -'stop') - killproc xntpd - ;; -*) - echo "Usage: /etc/init.d/xntp { start | stop }" - ;; -esac diff --git a/contrib/ntp/scripts/rc2/local.ntpd b/contrib/ntp/scripts/rc2/local.ntpd deleted file mode 100644 index ba53e05..0000000 --- a/contrib/ntp/scripts/rc2/local.ntpd +++ /dev/null @@ -1,64 +0,0 @@ -#! /usr/bin/perl -w -# 980904 Harlan Stenn - created - -# vvv CHANGE THESE vvv - -$ps = "/bin/ps x |"; - -$ntp_conf = "/etc/ntp.conf"; -$ntpd = "/usr/local/bin/xntpd"; -$ntpdate = "/usr/local/bin/ntpdate -b -s 10.0.0.1 10.0.0.2"; - -# ^^^ CHANGE THESE ^^^ - -{ - if (0) - { - } - elsif ($ARGV[0] eq "start") - { - @pidlist = pidlist($ntpd); - if (defined(@pidlist)) - { - warn "NTP is already running\n"; - } - else - { - if ( -f $ntp_conf && -x $ntpd ) - { - system ($ntpdate); - system ($ntpd." -c ".$ntp_conf); - } - } - } - elsif ($ARGV[0] eq "stop") - { - @pidlist = pidlist($ntpd); - kill 'TERM', @pidlist if (scalar(@pidlist) > 0); - } - else - { - die "Usage: $0 {start,stop}\n"; - } -} - -sub pidlist ($) - { - my ($target) = @_; - my ($qt) = quotemeta($target); - my @pids; - - open(PS, $ps) || die "Can't run ps: $!\n"; - while () - { - chomp; - next unless (/$qt/); - print "Got <$_>\n"; - if (/^\s*(\d+)\s+/) - { - push @pids, $1; - } - } - close(PS); - return @pids; - } diff --git a/contrib/ntp/scripts/stats/README b/contrib/ntp/scripts/stats/README deleted file mode 100644 index 6808963..0000000 --- a/contrib/ntp/scripts/stats/README +++ /dev/null @@ -1,39 +0,0 @@ -Statistics processing scripts (README) - -This directory contains a number of scripts for use with the filegen -facility. Those files ending in .awk are for the Unix awk utility, while -those ending in .sh are for the csh utility. Normally, the summary.sh -script is called from a cron job once per day. This script processes the -daily loopstats, peerstats and clockstats files produced by the daemon, -updates the loop_summary, peer_summary and clock_summary archive files, -and deletes the daily files. - -In the case of the Austron 2201A GPS receiver, the clockstats file -contains a wealth of additional monitoring data. These data are summarized -and writted to the clock_summary file, then a series of special files are -constructed for later processing by the S utility. - -The summary.sh script invokes a number of awk scripts to actually produce -the data. This may result in multiple scans of the same input file. -The input file is deleted after processing. In fact, the shell scripts will -process all input files found of the correct type in chronological order, -deleting each one as it is scanned, except the current day file. - -The summary.sh script can produce input files for the S utility, if it -is found on the search path. This utility makes PostScript graphs of the -loopstats data for each day, as well as various statistics produced by -the Austorn 220aA GPS receiver. The S utility is automatically run -as a background job. Its control files have the .S extension. - -The psummary.awk script can be used to scan the peer_summary file and -construct an historical reprise of the daily summaries. - -The file formats are documented in the README.stats file and in the -scripts themselves. Further detail on the radio clock ASCII timecode -formats and related data are in the README.timecode file. - -David L. Mills -University of Delaware -mills@udel.edu -1 November 1993 -Revised 12 April 1994 diff --git a/contrib/ntp/scripts/stats/README.stats b/contrib/ntp/scripts/stats/README.stats deleted file mode 100644 index aa8e77f..0000000 --- a/contrib/ntp/scripts/stats/README.stats +++ /dev/null @@ -1,246 +0,0 @@ -Statistics file formats (README.stats) - -The xntp3 daemon can produce a variety of statistics files which are -useful for maintenance, evaluation and retrospective calibration -purposes. See the xntpd.8 man page for instructions on how to configure -this feature. Since these files can become rather large and cumbersome, -they are ordinarily reduced to summary form by running the summary.sh -shell script once per day, week or month, as appropriate. There are -three file collections presently defined: peerstats, loopstats and -clockstats, each of which is described in this note. - -peerstats - -The following data are collected in the peerstats files. The files are -reduced to summary data using the peer.sh shell script. See the peer.awk -script for further information. A line in the file is produced upon -reception of each valid update from a configured peer. - - 49236 30.756 140.173.96.1 9474 0.000603 0.37532 - - 49236 modified Julian day number - 30.756 time of day (s) past midnight UTC - 140.173.96.1 peer identifier (IP address or receiver identifier) - 9474 peer status word (hex) (see NTP specification) - 0.000603 offset (s) - 0.08929 delay (s) - 0.37532 dispersion (s) - -loopstats - -The following data are collected in the loopstats files. The files are -reduced to summary data using the loop.sh shell script. See the loop.awk -script for further information. A line in the file is produced at each -valid update of the local clock. - - 49236 11.897 -0.000004 -35.9384 0 - - 49236 modified Julian day number - 11.897 time of day (s) past midnight UTC - -0.000004 time offset (s) - -35.9384 frequency offset (ppm) - 0 phase-lock loop time constant - -clockstats - -The following data are collected in the clockstats files. The files are -reduced to summary data using the clock.sh shell script, which also -updates the ensemble, etf, itf and tdata data files as well. See the -clock.awk, ensemble.awk, etf.awk, itf.awk and tdta.awk scripts for -further information. A line in the file is produced at each valid update -received from a configured radio clock. Data are at present recorded for -several radios. The first part of each data line is similar for all -radios, e.g.: - - 49234 60517.826 127.127.4.1 93 247 16:48:21.814 - - 49234 modified Julian day number - 60517.826 time of day (s) past midnight UTC - 127.127.4.1 receiver identifier (Spectracom 8170/Netclock-2) - 93 247 16:48:21.814 timecode (format varies) - -In the case of the Austron GPS receiver, a good deal of additional -information is extracted from the radio, as described below. The formats -shown consist of one line with all the fields shown in order. The -timecode formats specific to each radio follow. See the file -README.timecodes for detailed information on the timecode formats used -by these radios. - -Spectracom 8170/Netclock-2 WWVB receiver - - 49234 60517.826 127.127.4.1 ?A93 247 16:48:21.814 - - The '?' and 'A' characters are present only when the receiver is - unsynchronized; otherwise, they are replaced by space ' ' characters. - -IRIG audio decoder - - 49234 60517.826 127.127.6.0 247 16:48:21? - - The '?' character is present only when the receiver is unsynchronized. - -Austron 2200A/2201A GPS receiver - - 49234 60580.843 127.127.10.1 93:247:16:49:24.814? - - The '?' character is present only when the receiver is unsynchronized. - -Depending on the installed options, the Austron 2200A/2201A recognizes a -number of special commands that report various data items. See the -refclock_as2201.c source module for a list of the commands used. These -data are collected only if the following line is included in the -configuration file ntp.conf: - - fudge 127.127.10.1 flag4 1 # enable extended statistics collection - -The format of each data line returned is summarized in the following -list. - -External time/frequency data (requires input buffer option IN) - -These data determine the deviations of external time/frequency inputs -relative to receiver oscillator time. The following data are typical -using an external cesium oscillator PPS and 5-MHz outputs. - - 49234 60580.843 127.127.10.1 93:247:16:49:24.814 ETF - - -85.9 time interval (ns) - -89.0 average time interval (ns) - 4.0 time interval sigma (ns) - +1.510E-11 time interval rate - -4.500E-11 deltaf/f - +1.592E-11 average deltaf/f - 5.297E-13 sigma deltaf/f - 500 number of samples - -Model and option identifiers - -These data show the receiver model number and option configuration. - - 49234 60708.848 127.127.10.1 93:247:16:51:32.817 ID;OPT;VER - - GPS 2201A model ident (must be "GPS 2200A" or "GPS 2201A") - TTY1 rs232 option present (required) - TC1 IRIG option present (optional) - LORAN LORAN assist option present (optional) - IN input buffer option present (optional) - OUT1 output buffer option present (required) - B.00 data processor software version ("B.00" or later) - B.00 signal processor software version ("B.00" or later) - 28-Apr-93 software version date ("28-Apr-93" or later) - -Internal time/frequency data - -These data determine the deviations of the receiver oscillator with -respect to satellite time. - - 49234 60564.846 127.127.10.1 93:247:16:49:08.816 ITF - - COCO current mode (must be "COCO") - 0 code coast mode (must be zero) - +6.6152E-08 code sigma (s) - -3.5053E-08 code delta t (s) - -4.0361E-11 deltat/t - -6.4746E-11 oscillator ageing rate - 500.00 loop time constant - 4.984072 electrical tuning (V) - -GPS/LORAN ensemble data (requires LORAN assist option LORAN) - -These data determine the deviations and weights to calculate ensemble -time from GPS and LORAN data. - - 49234 60596.852 127.127.10.1 93:247:16:49:40.812 LORAN ENSEMBLE - - +9.06E-08 GPS t (s) - +3.53E-08 GPS sigma (s) - .532 GPS weight - +3.71E-08 LORAN t (s) - +3.76E-08 LORAN sigma (s) - .468 LORAN weight - +6.56E-08 ensemble t - +6.94E-08 ensemble sigma (s) - -LORAN stationkeeping data (requires LORAN assist option LORAN) - -These data determine which stations of the LORAN chain are being -tracked, together with individual signal/noise ratios, deviations and -weights. - - 49234 60532.850 127.127.10.1 93:247:16:48:36.820 LORAN TDATA - - M station identifier; data follows - OK status (must be "OK" for tracking) - 0 cw flag - 0 sw flag - 1162.17 time of arrival - -4.6 snr (-30.0 if not "OK" status) - 1.67E-07 2-sample phase-time deviation - .507 weight (included only if "OK" status) - W AQ 0 0 3387.80 -31.0 station identifier and data - X OK 0 0 1740.27 -11.2 2.20E-07 .294 station identifier and data - Y OK 0 0 2180.71 -4.6 2.68E-07 .198 station identifier and data - Z CV 0 0 3392.94 -30.0 station identifier and data - -Oscillator status and environment - -These data determine the receiver oscillator type, mode, status and -environment. Nominal operating conditions are shown below. - - 49234 60628.847 127.127.10.1 93:247:16:50:12.817 OSC;ET;TEMP - - 1121 Software Control oscillator model and mode (must be - "Software Control") - Locked status (must be "Locked") - 4.979905 electrical tuning (V) - 44.81 oscillator cavity temperature - -Receiver position, status and offsets - -These data determine the receiver position and elevation, together with -programmable delay corrections for the antenna cable and receiver. - - 49234 60788.847 127.127.10.1 93:247:16:52:52.817 POS;PPS;PPSOFF - - +39:40:48.425 receiver latitude (N) - -075:45:02.392 receiver longitude (E) - +74.09 receiver elevation (m) - Stored position status (must be "Stored") - UTC PPS/PPM alignment (must be "UTC") - 0 receiver delay (ns) (should be zero for calibrated - receiver) - 200 cable delay (ns) - 0 user time bias (ns) (must be zero) - -Satellite tracking status - -These data determine how many satellites are being tracked. At the -present state of constellation development, there should be at least -three visible satellites in view. Much of the time the maximum of -seven are being tracked; rarely this number drops to two. - - 49234 60612.850 127.127.10.1 93:247:16:49:56.820 TRSTAT - - 24 T satellite prn and status (T = track, A = acquire) - 16 A 13 T 20 T 18 T 07 T 12 T list continued - -UTC leap-second information - -These data determine when the next leap second is to occur. The exact -method to use is obscure. - - 49234 60548.847 127.127.10.1 93:247:16:48:52.818 UTC - - -1.2107E-08 A0 term (s) - -1.2790E-13 A1 term (s) - +9.0000E+00 current leap seconds (s) - +2.0480E+05 time for leap seconds (s) - +2.0100E+02 week number for delta leap (weeks) - +1.9100E+02 week number for future leap (weeks) - +4.0000E+00 day number for future leap (days) - +9.0000E+00 future leap seconds (s) - -David L. Mills -University of Delaware -mills@udel.edu -23 October 1993 diff --git a/contrib/ntp/scripts/stats/README.timecodes b/contrib/ntp/scripts/stats/README.timecodes deleted file mode 100644 index 00b5ba5..0000000 --- a/contrib/ntp/scripts/stats/README.timecodes +++ /dev/null @@ -1,149 +0,0 @@ -Radio Timecode Formats (README.timecodes) - -Following are examples of the serial timecode formats used by various -timecode receivers as given in the instruction manuals. These examples -are intended only for illustration and not as the basis of system -design. The following symbols are used to identify the timecode -character that begins a subfield. The values given after this symbol -represent the character offset from the beginning of the timecode string -as edited to remove control characters. - -C on-time character (start bit) -Y year of century -T time of day -D day of year or month/day -A alarm indicator (format specific) -Q quality indicator (format specific) - ASCII line feed (hex 0a) - ASCII carriage return (hex 0d) - ASCII space (hex 20) - -In order to promote uniform behavior in the various implementations, it -is useful to have a common interpretation of alarm conditions and signal -quality. When the alarm indicator it on, the receiver is not operating -correctly or has never synchronized to the broadcast signal. When the -alarm indicator is off and the quality indicator is on, the receiver has -synchronized to the broadcast signal, then lost the signal and is -coasting on its internal oscillator. - -In the following uppercase letters, punctuation marks and spaces -stand for themselves; lowercase letters stand for fields as described. -Special characters other than , and are preceded by ^. - -Spectracom 8170 and Netclock/2 WWV Synchonized Clock (format 0) - -"i ddd hh:mm:ss TZ=zz" - C A D T - - poll: ?; offsets: Y = none, D = 3, T = 7, A = 0, Q = none - i = synchronization flag ( = in synch, ? = out synch) - ddd = day of year - hh:mm:ss = hours, minutes, seconds - zz = timezone offset (hours from UTC) - - Note: alarm condition is indicated by other than at A, which - occurs during initial synchronization and when received signal has - been lost for about ten hours - - example: " 216 15:36:43 TZ=0" - A D T - -Netclock/2 WWV Synchonized Clock (format 2) - -"iqyy ddd hh:mm:ss.fff ld" - C AQY D T - - poll: ?; offsets: Y = 2, D = 5, T = 9, A = 0, Q = 1 - i = synchronization flag ( = in synch, ? = out synch) - q = quality indicator ( < 1ms, A < 10 ms, B < 100 ms, C < 500 - ms, D > 500 ms) - yy = year (as broadcast) - ddd = day of year - hh:mm:ss.fff = hours, minutes, seconds, milliseconds of day - l = leap-second warning (L indicates leap at end of month) - d = standard/daylight time indicator ( standard, D daylight) - - Note: alarm condition is indicated by other than at A, which - occurs during initial synchronization and when received signal has - been lost for about ten hours; unlock condition is indicated by - other than at Q, with time since last lock indicated by the - letter code A < 13 min, B < 1.5 hr, C < 7 hr, D > 7 hr. - - example: " 92 216 15:36:43.640 D" - AQ D T - -TrueTime 468-DC Satellite Synchronized Clock (and other TrueTime -receivers) - -"<^A>ddd:hh:mm:ssq" - D T QC - - poll: none; offsets: Y = none, D = 0, T = 4, A = 12, Q = 12 - hh:mm:ss = hours, minutes, seconds - q = quality/alarm indicator ( = locked, ? = alarm) - - Note: alarm condition is indicated by ? at A, which occurs during - initial synchronization and when received signal is lost for an - extended period; unlock condition is indicated by other than - at Q - - example: "216:15:36:43 " - D T Q - -Heath GC-1000 Most Accurate Clock (WWV/H) - -"hh:mm:ss.f dd/mm/yy" - C T A D - - poll: none; offsets: Y = none, D = 15, T = 0, A = 9, Q = none - hh:mm:ss = hours, minutes, seconds - f = deciseconds (? when out of spec) - dd/mm = day, month - yy = year of century (from DIPswitches) - - Note: 0?:??:??.? is displayed before synch is first established and - hh:mm:ss.? once synch is established and then lost again for about - a day. - - example: "15:36:43.6 04/08/91" - T A D Y - -PST/Traconex 1020 Time Source (WWV/H) (firmware revision V4.01) - -"frdzycchhSSFTttttuuxx" "ahh:mm:ss.fffs" "yy/dd/mm/ddd" - A Q T Y D - - poll: "QMQDQT"; offsets: Y = 0, D = 3 T = 1,, A = 11, Q = 13 - f = frequency enable (O = all frequencies enabled) - r = baud rate (3 = 1200, 6 = 9600) - d = features indicator (@ = month/day display enabled) - z = time zone (0 = UTC) - y = year (5 = 1991) - cc = WWV propagation delay (52 = 22 ms) - hh = WWVH propagation delay (81 = 33 ms) - SS = status (80 or 82 = operating correctly) - F = current receive frequency (1-5 = 2.5, 5, 10, 15, 20 MHz) - T = transmitter (C = WWV, H = WWVH) - tttt = time since last update (minutes) - uu = flush character (03 = ^C) - xx = 94 (unknown) (firmware revision X4.01.999 only) - - a = AM/PM indicator (A = AM, P = PM, - 24-hour format) - hh:mm:ss.fff = hours, minutes, seconds, milliseconds of day - s = daylight-saving indicator ( standard, D daylight) - - yy = year of century (from DIPswitches) - dd/mm/ddd = day of month, month of year, day of year - - Note: The alarm condition is indicated by other than ? at A, which - occurs during initial synchronization and when received signal is - lost for an extended period. A receiver unlock condition is - indicated by other than "0000" in the tttt subfield at Q. - - example: "O3@055281824C00000394 91/08/04/216 15:36:43.640" - T Y D T - -David L. Mills -University of Delaware -mills@udel.edu -23 October 1993 diff --git a/contrib/ntp/scripts/stats/clock.awk b/contrib/ntp/scripts/stats/clock.awk deleted file mode 100755 index ef62da9..0000000 --- a/contrib/ntp/scripts/stats/clock.awk +++ /dev/null @@ -1,431 +0,0 @@ -# awk program to scan clockstat files and report errors/statistics -# -# usage: awk -f check.awk clockstats -# -# This program works for the following radios: -# PST/Traconex 1020 WWV reciever -# Arbiter 1088 GPS receiver -# Spectracom 8170/Netclock-2 WWVB receiver -# IRIG audio decoder -# Austron 2200A/2201A GPS receiver (see README.austron file) -# -BEGIN { - etf_min = osc_vmin = osc_tmin = 1e9 - etf_max = osc_vmax = osc_tmax = -1e9 -} -# -# scan all records in file -# -{ - # - # select PST/Traconex WWV records - # 00:00:37.234 96/07/08/190 O6@0:5281825C07510394 - # - if (NF >= 4 && $3 == "127.127.3.1") { - if (substr($6, 14, 4) > "0010") - wwv_sync++ - if (substr($6, 13, 1) == "C") - wwv_wwv++ - if (substr($6, 13, 1) == "H") - wwv_wwvh++ - x = substr($6, 12, 1) - if (x == "1") - wwv_2.5++ - else if (x == "2") - wwv_5++ - else if (x == "3") - wwv_10++ - else if (x == "4") - wwv_15++ - else if (x == "5") - wwv_20++ - continue - } - # - # select Arbiter GPS records - # 96 190 00:00:37.000 0 V=08 S=44 T=3 P=10.6 E=00 - # N39:42:00.951 W075:46:54.880 210.55 2.50 0.00 - # - if (NF >= 4 && $3 == "127.127.11.1") { - if (NF > 8) { - arb_count++ - if ($7 != 0) - arb_sync++ - x = substr($10, 3, 1) - if (x == "0") - arb_0++ - else if (x == "1") - arb_1++ - else if (x == "2") - arb_2++ - else if (x == "3") - arb_3++ - else if (x == "4") - arb_4++ - else if (x == "5") - arb_5++ - else if (x == "6") - arb_6++ - } else if (NF == 8) { - arbn++ - arb_mean += $7 - arb_rms += $7 * $7 - if (arbn > 0) { - x = $7 - arb_val - arb_var += x * x - } - arb_val = $7 - } - continue - } - # - # select Spectracom WWVB records - # see summary for decode - # 96 189 23:59:32.248 D - # - if (NF >= 4 && $3 == "127.127.4.1") { - if ($4 == "SIGNAL" || NF > 7) - printf "%s\n", $0 - else { - wwvb_count++ - if ($4 ~ /\?/) - wwvb_x++ - else if ($4 ~ /A/) - wwvb_a++ - else if ($4 ~ /B/) - wwvb_b++ - else if ($4 ~ /C/) - wwvb_c++ - else if ($4 ~ /D/) - wwvb_d++ - } - continue - } - # - # select IRIG audio decoder records - # see summary for decode - # - if (NF >= 4 && $3 == "127.127.6.0") { - irig_count++ - if ($5 ~ /\?/) - irig_error++ - continue - } - # - # select Austron GPS LORAN ENSEMBLE records - # see summary for decode - # - else if (NF >= 13 && $6 == "ENSEMBLE") { - ensemble_count++ - if ($9 <= 0) - ensemble_badgps++ - else if ($12 <= 0) - ensemble_badloran++ - else { - if ($13 > 200e-9 || $13 < -200e-9) - ensemble_200++ - else if ($13 > 100e-9 || $13 < -100e-9) - ensemble_100++ - ensemble_mean += $13 - ensemble_rms += $13 * $13 - } - continue - } - # - # select Austron LORAN TDATA records - # see summary for decode; note that signal quality log is simply - # copied to output - # - else if (NF >= 7 && $6 == "TDATA") { - tdata_count++ - for (i = 7; i < NF; i++) { - if ($i == "M" && $(i+1) == "OK") { - i += 5 - m += $i - tdata_m++ - } - else if ($i == "W" && $(i+1) == "OK") { - i += 5 - w += $i - tdata_w++ - } - else if ($i == "X" && $(i+1) == "OK") { - i += 5 - x += $i - tdata_x++ - } - else if ($i == "Y" && $(i+1) == "OK") { - i += 5 - y += $i - tdata_y++ - } - else if ($i == "Z" && $(i+1) == "OK") { - i += 5 - z += $i - tdata_z++ - } - } - continue - } - # - # select Austron ITF records - # see summary for decode - # - else if (NF >= 13 && $5 == "ITF" && $12 >= 100) { - itf_count++ - if ($9 > 200e-9 || $9 < -200e-9) - itf_200++ - else if ($9 > 100e-9 || $9 < -100e-9) - itf_100++ - itf_mean += $9 - itf_rms += $9 * $9 - itf_var += $10 * $10 - continue - } - # - # select Austron ETF records - # see summary for decode - # - else if (NF >= 13 && $5 == "ETF" && $13 >= 100) { - etf_count++ - if ($6 > etf_max) - etf_max = $6 - else if ($6 < etf_min) - etf_min = $6 - etf_mean += $6 - etf_rms += $6 * $6 - etf_var += $9 * $9 - continue - } - # - # select Austron TRSTAT records - # see summary for decode - # - else if (NF >= 5 && $5 == "TRSTAT") { - trstat_count++ - j = 0 - for (i = 6; i <= NF; i++) - if ($i == "T") - j++ - trstat_sat[j]++ - continue - } - # - # select Austron ID;OPT;VER records - # - # config GPS 2201A TTY1 TC1 LORAN IN OUT1 B.00 B.00 28-Apr-93 - # - # GPS 2201A receiver model - # TTY1 rs232 moduel - # TC1 IRIG module - # LORAN LORAN assist module - # IN input module - # OUT1 output module - # B.00 B.00 firmware revision - # 28-Apr-9 firmware date3 - # - else if (NF >= 5 && $5 == "ID;OPT;VER") { - id_count++ - id_temp = "" - for (i = 6; i <= NF; i++) - id_temp = id_temp " " $i - if (id_string != id_temp) - printf "config%s\n", id_temp - id_string = id_temp - continue - } - # - # select Austron POS;PPS;PPSOFF records - # - # position +39:40:48.425 -075:45:02.392 +74.09 Stored UTC 0 200 0 - # - # +39:40:48.425 position north latitude - # -075:45:02.392 position east longitude - # +74.09 elevation (meters) - # Stored position is stored - # UTC time is relative to UTC - # 0 200 0 PPS offsets - # - else if (NF >= 5 && $5 == "POS;PPS;PPSOFF") { - pos_count++ - pos_temp = "" - for (i = 6; i <= NF; i++) - pos_temp = pos_temp " " $i - if (pos_string != pos_temp) - printf "position%s\n", pos_temp - pos_string = pos_temp - continue - } - # - # select Austron OSC;ET;TEMP records - # - # loop 1121 Software Control Locked - # - # 1121 oscillator type - # Software Control loop is under software control - # Locked loop is locked - # - else if (NF >= 5 && $5 == "OSC;ET;TEMP") { - osc_count++ - osc_temp = $6 " " $7 " " $8 " " $9 - if (osc_status != osc_temp) - printf "loop %s\n", osc_temp - osc_status = osc_temp - if ($10 > osc_vmax) - osc_vmax = $10 - if ($10 < osc_vmin) - osc_vmin = $10 - if ($11 > osc_tmax) - osc_tmax = $11 - if ($11 < osc_tmin) - osc_tmin = $11 - continue - } - # - # select Austron UTC records - # these ain't ready yet - # - else if (NF >= 5 && $5 == "UTC") { - utc_count++ - utc_temp = "" - for (i = 6; i <= NF; i++) - utc_temp = utc_temp " " $i - if (utc_string != utc_temp) -# printf "utc%s\n", utc_temp - utc_string = utc_temp - continue - } -} END { -# -# PST/Traconex WWV summary data -# - if (wwv_wwv + wwv_wwvh > 0) - printf "wwv %d, wwvh %d, err %d, MHz (2.5) %d, (5) %d, (10) %d, (15) %d, (20) %d\n", wwv_wwv, wwv_wwvh, wwv_sync, wwv_2.5, wwv_5, wwv_10, wwv_15, wwv_20 -# -# Arbiter 1088 summary data -# -# gps record count -# err error count -# sats(0-6) satellites tracked -# mean 1 PPS mean (us) -# rms 1 PPS rms error (us) -# var 1 PPS Allan variance -# - if (arb_count > 0) { - printf "gps %d, err %d, sats(0-6) %d %d %d %d %d %d %d", arb_count, arb_sync, arb_0, arb_1, arb_2, arb_3, arb_4, arb_5, arb_6 - if (arbn > 1) { - arb_mean /= arbn - arb_rms = sqrt(arb_rms / arbn - arb_mean * arb_mean) - arb_var = sqrt(arb_var / (2 * (arbn - 1))) - printf ", mean %.2f, rms %.2f, var %.2e\n", arb_mean, arb_rms, arb_var * 1e-6 - } else { - printf "\n" - } - } -# -# ensemble summary data -# -# ensemble record count -# badgps gps data unavailable -# badloran loran data unavailable -# rms ensemble rms error (ns) -# >200 ensemble error >200 ns -# >100 100 ns < ensemble error < 200 ns -# - if (ensemble_count > 0) { - ensemble_mean /= ensemble_count - ensemble_rms = sqrt(ensemble_rms / ensemble_count - ensemble_mean * ensemble_mean) * 1e9 - printf "ensemble %d, badgps %d, badloran %d, rms %.1f, >200 %d, >100 %d\n", ensemble_count, ensemble_badgps, ensemble_badloran, ensemble_rms, ensemble_200, ensemble_100 - } -# -# wwvb summary data -# -# wwvb record count -# ? unsynchronized -# >1 error > 1 ms -# >10 error > 10 ms -# >100 error > 100 ms -# >500 error > 500 ms -# - if (wwvb_count > 0) - printf "wwvb %d, ? %d, >1 %d, >10 %d, >100 %d, >500 %d\n", wwvb_count, wwvb_x, wwvb_a, wwvb_b, wwvb_c, wwvb_d -# -# irig summary data -# -# irig record count -# err error count -# - if (irig_count > 0) - printf "irig %d, err %d\n", irig_count, irig_error -# -# tdata summary data -# -# tdata record count -# m M master OK-count, mean level (dB) -# w W slave OK-count, mean level (dB) -# x X slave OK-count, mean level (dB) -# y Y slave OK-count, mean level (dB) -# z Z slave OK-count, mean level (dB) -# - if (tdata_count > 0 ) { - if (tdata_m > 0) - m /= tdata_count - if (tdata_x > 0) - w /= tdata_count - if (tdata_x > 0) - x /= tdata_count - if (tdata_y > 0) - y /= tdata_count - if (tdata_z > 0) - z /= tdata_count - printf "tdata %d, m %d %.1f, w %d %.1f, x %d %.1f, y %d %.1f, z %d %.1f\n", tdata_count, tdata_m, m, tdata_w, w, tdata_x, x, tdata_y, y, tdata_z, z - } -# -# itf summary data -# -# itf record count -# rms itf rms error (ns) -# >200 itf error > 200 ns -# >100 itf error > 100 ns -# var Allan variance -# - if (itf_count > 1) { - itf_mean /= itf_count - itf_rms = sqrt(itf_rms / itf_count - itf_mean * itf_mean) * 1e9 - itf_var = sqrt(itf_var / (2 * (itf_count - 1))) - printf "itf %d, rms %.1f, >200 %d, >100 %d, var %.2e\n", itf_count, itf_rms, itf_200, itf_100, itf_var - } -# -# etf summary data -# -# etf record count -# mean etf mean (ns) -# rms etf rms error (ns) -# max etf maximum (ns) -# min etf minimum (ns) -# var Allan variance -# - if (etf_count > 0) { - etf_mean /= etf_count - etf_rms = sqrt(etf_rms / etf_count - etf_mean * etf_mean) - etf_var = sqrt(etf_var / (2 * (etf_count - 1))) - printf "etf %d, mean %.1f, rms %.1f, max %d, min %d, var %.2e\n", etf_count, etf_mean, etf_rms, etf_max, etf_min, etf_var - } -# -# trstat summary data -# -# trstat record count -# sat histogram of tracked satellites (0 - 7) -# - if (trstat_count > 0) - printf "trstat %d, sat %d %d %d %d %d %d %d %d\n", trstat_count, trstat_sat[0], trstat_sat[1], trstat_sat[2], trstat_sat[2], trstat_sat[3], trstat_sat[4], trstat_sat[5], trstat_sat[6], trstat_sat[7] -# -# osc summary data -# -# osc record count -# control control midrange (V) +/- deviation (mV) -# temp oven temperature midrange +/- deviation (deg C) -# - if (osc_count > 0) - printf "osc %d, control %.3f+/-%.3f, temp %.1f+/-%.2f\n", osc_count, (osc_vmax + osc_vmin) / 2, (osc_vmax - osc_vmin) / 2 * 1e3, (osc_tmax + osc_tmin) / 2, (osc_tmax - osc_tmin) / 2 -} diff --git a/contrib/ntp/scripts/stats/dupe.awk b/contrib/ntp/scripts/stats/dupe.awk deleted file mode 100755 index 317c2a4..0000000 --- a/contrib/ntp/scripts/stats/dupe.awk +++ /dev/null @@ -1,8 +0,0 @@ -# -# delete duplicate lines -# -{ - if (old != $0) - printf "%s\n", $0 - old = $0 -} diff --git a/contrib/ntp/scripts/stats/ensemble.S b/contrib/ntp/scripts/stats/ensemble.S deleted file mode 100755 index 32a4dba..0000000 --- a/contrib/ntp/scripts/stats/ensemble.S +++ /dev/null @@ -1,5 +0,0 @@ -ensemble <- scan(file1, list(day=0, sec=0, gps=0, gpsw=0, loran=0, loranw=0, ensemble=0, std=0)) -str <- paste("eps/", file1, ".eps", sep="") -postscript(str, , , , 5, pointsize=18) -par(mgp=c(1, 0, 0), tck = 0.03, mar = c(2, 2, 1, 1)) -plot(ensemble$sec, ensemble$ensemble, type="l", xlab=paste("MJD", ensemble$day, "Time (s)"), ylab="Ensemble Offset (ns)", ylim=c(-400, 400)) diff --git a/contrib/ntp/scripts/stats/ensemble.awk b/contrib/ntp/scripts/stats/ensemble.awk deleted file mode 100755 index 136b33d..0000000 --- a/contrib/ntp/scripts/stats/ensemble.awk +++ /dev/null @@ -1,17 +0,0 @@ -# program to produce loran ensemble statistics from clockstats files -# -# usage: awk -f ensemble.awk clockstats -# -# format of input record (time values in seconds) -# 49165 8.628 127.127.10.1 93:178:00:00:07.241 LORAN ENSEMBLE -# -6.43E-08 +5.02E-08 .091 +5.98E-08 +1.59E-08 .909 +4.85E-08 +3.52E-08 -# -# format of output record (time values in nanoseconds) -# MJD sec GPS wgt LORAN wgt avg sigma -# 49165 8.628 -64.3 0.091 59.8 0.909 48.5 35.2 -# -# select LORAN ENSEMBLE records with valid format and weights -{ - if (NF >= 14 && $6 == "ENSEMBLE" && $9 > 0 && $12 > 0) - printf "%5s %9.3f %7.1f %6.3f %7.1f %6.3f %7.1f %7.1f\n", $1, $2, $7*1e9, $9, $10*1e9, $12, $13*1e9, $14*1e9 -} diff --git a/contrib/ntp/scripts/stats/etf.S b/contrib/ntp/scripts/stats/etf.S deleted file mode 100755 index 9b9c68b..0000000 --- a/contrib/ntp/scripts/stats/etf.S +++ /dev/null @@ -1,15 +0,0 @@ -options(digits=4) -file2 <- "etf_summary" -etf <- scan(file1, list(day=0, sec=0, offset=0, stab=0)) -r <- lsfit(etf$sec, etf$offset) -count<-length(etf$sec) -mean<-r$coef[[1]] -std<-sqrt(var(r$residuals)) -slope<-r$coef[[2]] * 1000 -cat("\n", file=file2 , append=TRUE, fill=FALSE, sep="") -cat(file1, "\n", file=file2, append=TRUE, fill=FALSE, sep="") -cat("etf1 ", count, ", T ", mean, " ns, R ", slope, " ps/s, std ", std, " us\n", file=file2, append=TRUE, fill=FALSE, sep="") -str <- paste("eps/", file1, ".eps", sep="") -postscript(str, , , , 5, pointsize=18) -par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1)) -plot(etf$sec, etf$offset, type="l", xlab=paste("MJD", etf$day, "Time (s)"), ylab="External Offset (ns)", ylim=c(-400, 400)) diff --git a/contrib/ntp/scripts/stats/etf.awk b/contrib/ntp/scripts/stats/etf.awk deleted file mode 100755 index 8e6e334..0000000 --- a/contrib/ntp/scripts/stats/etf.awk +++ /dev/null @@ -1,19 +0,0 @@ -# program to produce external time/frequence statistics from clockstats files -# -# usage: awk -f etf.awk clockstats -# -# format of input record -# 49165 40.473 127.127.10.1 93:178:00:00:39.238 ETF -# +175.0 +176.8 2.0 +3.729E-11 +1.000E-10 +3.511E-11 4.005E-13 500 -# -# format of output record (time values in nanoseconds) -# MJD sec time freq -# 49165 40.473 175.0 3.729e-11 -# -# select ETF records with valid format -{ - if (NF >= 9 && $5 == "ETF") { - printf "%5s %9.3f %7.1f %10.3e\n", $1, $2, $6, $9 - } -} - diff --git a/contrib/ntp/scripts/stats/itf.S b/contrib/ntp/scripts/stats/itf.S deleted file mode 100755 index 56c8c8d..0000000 --- a/contrib/ntp/scripts/stats/itf.S +++ /dev/null @@ -1,5 +0,0 @@ -itf <- scan(file1, list(day=0, sec=0, offset=0, stab=0)) -str <- paste("eps/", file1, ".eps", sep="") -postscript(str, , , , 5, pointsize=18) -par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1)) -plot(itf$sec, itf$offset, type="l", xlab=paste("MJD", itf$day, "Time (s)"), ylab="Internal Offset (ns)", ylim=c(-400, 400)) diff --git a/contrib/ntp/scripts/stats/itf.awk b/contrib/ntp/scripts/stats/itf.awk deleted file mode 100755 index 2b21c5b..0000000 --- a/contrib/ntp/scripts/stats/itf.awk +++ /dev/null @@ -1,19 +0,0 @@ -# program to produce intewrnal time/frequence statistics from clockstats files -# -# usage: awk -f itf.awk clockstats -# -# format of input record -# 49227 67.846 127.127.10.1 93:240:00:00:51.816 ITF -# COCO 0 +2.0579E-07 -3.1037E-08 -7.7723E-11 +6.5455E-10 500.00 4.962819 -# -# format of output record (time values in nanoseconds) -# MJD sec time freq -# 49227 67.846 +2.0579E-07 -7.7723E-11 -# -# select ITF records with valid format -{ - if (NF >= 10 && $5 == "ITF") { - printf "%5s %9.3f %7.1f %10.3e\n", $1, $2, $8 * 1e9, $10 - } -} - diff --git a/contrib/ntp/scripts/stats/loop.S b/contrib/ntp/scripts/stats/loop.S deleted file mode 100755 index 8e564b6..0000000 --- a/contrib/ntp/scripts/stats/loop.S +++ /dev/null @@ -1,7 +0,0 @@ -options(digits=4) -loop <- scan(file1, list(day=0, sec=0, offset=0, freq=0, tc=0)) -loop$offset <- loop$offset * 1e6 -str <- paste("eps/", file1, ".eps", sep="") -postscript(str, , , , 5, pointsize=18) -par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1)) -plot(loop$sec, loop$offset, type="l", xlab=paste("MJD", loop$day, "Time (s)"), ylab="PLL Offset (us)", ylim=c(-400, 400)) diff --git a/contrib/ntp/scripts/stats/loop.awk b/contrib/ntp/scripts/stats/loop.awk deleted file mode 100755 index bac90db..0000000 --- a/contrib/ntp/scripts/stats/loop.awk +++ /dev/null @@ -1,45 +0,0 @@ -# awk program to scan loopstats files and report errors/statistics -# -# usage: awk -f loop.awk loopstats -# -# format of loopstats record -# MJD sec time (s) freq (ppm) poll -# 49235 3.943 0.000016 22.4716 6 -# -# format of output dataset (time values in milliseconds, freq in ppm) -# loopstats.19960706 -# loop 1180, 0+/-11.0, rms 2.3, freq -24.45+/-0.045, var 0.019 -# -BEGIN { - loop_tmax = loop_fmax = -1e9 - loop_tmin = loop_fmin = 1e9 -} -# -# scan all records in file -# -{ - if (NF >= 5) { - loop_count++ - if ($3 > loop_tmax) - loop_tmax = $3 - if ($3 < loop_tmin) - loop_tmin = $3 - if ($4 > loop_fmax) - loop_fmax = $4 - if ($4 < loop_fmin) - loop_fmin = $4 - loop_time += $3 - loop_time_rms += $3 * $3 - loop_freq += $4 - loop_freq_rms += $4 * $4 - } -} END { - if (loop_count > 0) { - loop_time /= loop_count - loop_time_rms = sqrt(loop_time_rms / loop_count - loop_time * loop_time) - loop_freq /= loop_count - loop_freq_rms = sqrt(loop_freq_rms / loop_count - loop_freq * loop_freq) - printf "loop %d, %.0f+/-%.1f, rms %.1f, freq %.2f+/-%0.3f, var %.3f\n", loop_count, (loop_tmax + loop_tmin) / 2 * 1e6, (loop_tmax - loop_tmin) / 2 * 1e6, loop_time_rms * 1e6, (loop_fmax + loop_fmin) / 2, (loop_fmax - loop_fmin) / 2, loop_freq_rms - } -} - diff --git a/contrib/ntp/scripts/stats/loop_summary b/contrib/ntp/scripts/stats/loop_summary deleted file mode 100755 index 35479ec..0000000 --- a/contrib/ntp/scripts/stats/loop_summary +++ /dev/null @@ -1,2 +0,0 @@ - -loopstats.[1-9] diff --git a/contrib/ntp/scripts/stats/peer.awk b/contrib/ntp/scripts/stats/peer.awk deleted file mode 100755 index 5fe260e..0000000 --- a/contrib/ntp/scripts/stats/peer.awk +++ /dev/null @@ -1,68 +0,0 @@ -# awk program to scan peerstats files and report errors/statistics -# -# usage: awk -f peer.awk peerstats -# -# format of peerstats record -# MJD sec ident stat offset (s) delay (s) disp (s) -# 49235 11.632 128.4.2.7 f414 -0.000041 0.21910 0.00084 -# -# format of output dataset (time values in milliseconds) -# peerstats.19960706 -# ident cnt mean rms max delay dist disp -# ========================================================================== -# 140.173.112.2 85 -0.509 1.345 4.606 80.417 49.260 1.092 -# 128.4.1.20 1364 0.058 0.364 4.465 3.712 10.540 1.101 -# 140.173.16.1 1415 -0.172 0.185 1.736 3.145 5.020 0.312 -#... -# -BEGIN { - n = 0 - MAXDISTANCE = 1.0 -} -# -# scan all records in file -# -# we toss out all distances greater than one second on the assumption the -# peer is in initial acquisition -# -{ - if (NF >= 7 && ($7 + $6 / 2) < MAXDISTANCE) { - i = n - for (j = 0; j < n; j++) { - if ($3 == peer_ident[j]) - i = j - } - if (i == n) { - peer_ident[i] = $3 - peer_tmax[i] = peer_dist[i] = -1e9 - peer_tmin[i] = 1e9 - n++ - } - peer_count[i]++ - if ($5 > peer_tmax[i]) - peer_tmax[i] = $5 - if ($5 < peer_tmin[i]) - peer_tmin[i] = $5 - dist = $7 + $6 / 2 - if (dist > peer_dist[i]) - peer_dist[i] = dist - peer_time[i] += $5 - peer_time_rms[i] += $5 * $5 - peer_delay[i] += $6 - peer_disp[i] += $7 - } -} END { - printf " ident cnt mean rms max delay dist disp\n" - printf "==========================================================================\n" - for (i = 0; i < n; i++) { - peer_time[i] /= peer_count[i] - peer_time_rms[i] = sqrt(peer_time_rms[i] / peer_count[i] - peer_time[i] * peer_time[i]) - peer_delay[i] /= peer_count[i] - peer_disp[i] /= peer_count[i] - peer_tmax[i] = peer_tmax[i] - peer_time[i] - peer_tmin[i] = peer_time[i] - peer_tmin[i] - if (peer_tmin[i] > peer_tmax[i]) - peer_tmax[i] = peer_tmin[i] - printf "%-15s%5d%9.3f%9.3f%9.3f%9.3f%9.3f%9.3f\n", peer_ident[i], peer_count[i], peer_time[i] * 1e3, peer_time_rms[i] * 1e3, peer_tmax[i] * 1e3, peer_delay[i] * 1e3, peer_dist[i] * 1e3, peer_disp[i] * 1e3 - } -} diff --git a/contrib/ntp/scripts/stats/psummary.awk b/contrib/ntp/scripts/stats/psummary.awk deleted file mode 100755 index ec06b0c..0000000 --- a/contrib/ntp/scripts/stats/psummary.awk +++ /dev/null @@ -1,82 +0,0 @@ -# program to scan peer_summary file and produce summary of daily summaries -# -# usage: awk -f psummary.awk peer_summary -# -# format of input records -# peerstats.19960706 -# ident cnt mean rms max delay dist disp -# ========================================================================== -# 140.173.112.2 85 -0.509 1.345 4.606 80.417 49.260 1.092 -# 128.4.1.20 1364 0.058 0.364 4.465 3.712 10.540 1.101 -# ... -# -# format of output records (actual data from rackety.udel.edu) -# host days mean rms max >1 >5 >10 >50 -# ================================================================== -# 127.127.22.1 1090 0.001 0.401 99.800 19 14 13 10 -# 127.0.0.1 1188 0.060 1.622 105.004 78 65 51 32 -# 127.127.4.1 586 0.000 0.000 0.000 0 0 0 0 -# 140.173.64.1 975 -0.010 2.552 257.595 399 192 114 8 -# 128.175.1.3 1121 0.447 8.637 204.123 479 460 397 147 -# 140.173.16.1 1106 0.027 1.014 267.857 242 38 31 23 -# 128.4.1.4 1119 0.023 1.037 267.748 223 41 34 23 -# 128.4.1.2 850 1.202 1.654 267.704 196 53 45 34 -# 128.4.1.20 1101 0.088 1.139 268.322 430 111 83 16 -# 140.173.32.1 979 -0.949 2.344 257.671 396 217 136 7 -# 140.173.112.2 1066 0.040 2.111 152.969 442 315 152 16 -# 140.173.80.1 1059 0.019 1.858 87.690 438 348 150 9 -# 140.173.96.1 1015 0.110 2.007 266.744 399 314 170 17 -# 140.173.128.1 1103 -0.002 2.600 257.672 465 262 132 13 -# 140.222.135.1 347 -4.626 8.804 196.394 135 135 134 95 -# 140.173.128.2 1081 -0.046 2.967 261.448 463 342 172 17 -# 140.222.141.1 354 0.820 8.809 195.333 142 141 139 100 -# 140.173.144.2 1058 -0.107 2.805 270.498 448 341 163 17 -# 140.222.134.1 354 -0.056 8.479 172.458 142 141 141 100 -# 140.222.144.1 415 -1.456 9.964 191.684 161 161 161 123 -# 140.222.136.1 234 0.902 7.707 182.431 62 62 62 48 -# 128.175.1.1 774 0.890 4.838 266.799 358 291 200 83 -# 127.127.10.1 1086 -0.002 1.462 231.128 240 239 60 57 -# 140.173.48.2 576 0.016 4.092 350.512 213 126 88 16 -# 128.4.1.11 3 0.000 0.000 0.000 0 0 0 0 -# 128.4.1.26 386 -1.363 20.251 341.284 164 164 161 132 -# -# select table beginning with "ident" -{ - if (NF < 8 || $1 == "ident") - continue - i = n - for (j = 0; j < n; j++) { - if ($1 == peer_ident[j]) - i = j - } - if (i == n) { - peer_ident[i] = $1 - n++ - } - peer_count[i]++ - if (($7 - $6 / 2) < 400) { - peer_count[i]++ - peer_mean[i] += $3 - peer_var[i] += $4 * $4 - if ($5 > peer_max[i]) - peer_max[i] = $5 - if ($5 > 1) - peer_1[i]++ - if ($5 > 5) - peer_2[i]++ - if ($5 > 10) - peer_3[i]++ - if ($5 > 50) - peer_4[i]++ - } -} END { - printf " host days mean rms max >1 >5 >10 >50\n" - printf "==================================================================\n" - for (i = 0; i < n; i++) { - if (peer_count[i] <= 0) - continue - peer_mean[i] /= peer_count[i] - peer_var[i] = sqrt(peer_var[i] / peer_count[i]) - printf "%-15s%4d%10.3f%10.3f%10.3f%4d%4d%4d%4d\n", peer_ident[i], peer_count[i], peer_mean[i], peer_var[i], peer_max[i], peer_1[i], peer_2[i], peer_3[i], peer_4[i] - } -} diff --git a/contrib/ntp/scripts/stats/summary.sh b/contrib/ntp/scripts/stats/summary.sh deleted file mode 100755 index dffdb0b..0000000 --- a/contrib/ntp/scripts/stats/summary.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/sh -# -# Script to summarize ipeerstats, loopstats and clockstats files -# -# This script can be run from a cron job once per day, week or month. It -# runs the file-specific summary script and appends the summary data to -# designated files. -# -DATE=`date +20%y%m%d` -S=/usr/local/bin/S -SIN=S.in -SOUT=S.out -LOOP=loop_summary -PEER=peer_summary -CLOCK=clock_summary - -rm -f $SIN $SOUT - -# -# Summarize loopstats files -# -for f in loopstats.[12][0-9][0-9][0-9][0-1][0-9][0-3][0-9]; do - d=`echo $f | cut -f2 -d.` - if [ -f $f ] && [ $DATE != $d ]; then - echo " " >>$LOOP - echo $f >>$LOOP - awk -f loop.awk $f >>$LOOP - if [ -f $S ]; then - echo "file1<-"\"${f}\" >>$SIN - echo "source("\""loop.S"\"")" >>$SIN - echo "unix("\""rm ${f}"\"")" >>$SIN - else - rm -f $f - fi - fi -done - -# -# Summarize peerstats files -# -for f in peerstats.199[4-9][0-1][0-9][0-3][0-9]; do - d=`echo $f | cut -f2 -d.` - if [ -f $f ] && [ $DATE != $d ]; then - echo " " >>$PEER - echo $f >>$PEER - awk -f peer.awk $f >>$PEER - rm -f $f - fi -done - -# -# Summarize clockstats files -# -for f in clockstats.199[4-9][0-1][0-9][0-3][0-9]; do - d=`echo $f | cut -f2 -d.` - if [ -f $f ] && [ $DATE != $d ]; then - echo " " >>$CLOCK - echo $f >>$CLOCK - awk -f clock.awk $f >>$CLOCK - if [ -f /dev/gps[0-9] ]; then - awk -f itf.awk $f >itf.$d - awk -f etf.awk $f >etf.$d - awk -f ensemble.awk $f >ensemble.$d - awk -f tdata.awk $f >tdata.$d - fi - rm -f $f - fi -done - -# -# Process clockstat files with S and generate PostScript plots -# -for f in itf etf ensemble tdata; do - for d in ${f}.199[4-9][0-1][0-9][0-3][0-9]; do - if [ -f $d ]; then - if [ -f $S ]; then - echo "file1<-"\"${d}\" >>$SIN - echo "source("\"${f}.S\"")" >>$SIN - echo "unix("\""rm ${d}"\"")" >>$SIN - else - rm -f $d - fi - fi - done -done -if [ -f $SIN ]; then - $S BATCH $SIN $SOUT -fi diff --git a/contrib/ntp/scripts/stats/tdata.S b/contrib/ntp/scripts/stats/tdata.S deleted file mode 100755 index f360a24..0000000 --- a/contrib/ntp/scripts/stats/tdata.S +++ /dev/null @@ -1,5 +0,0 @@ -tdata <- scan(file1, list(day=0, sec=0, m=0, w=0, x=0, y=0, z=0)) -str <- paste("eps/", file1, ".eps", sep="") -postscript(str, , , , 5, pointsize=18) -par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1)) -plot(tdata$sec, tdata$m, type="l", xlab=paste("MJD", tdata$day, "Time (s)"), ylab="LORAN-M SNR (dB)") diff --git a/contrib/ntp/scripts/stats/tdata.awk b/contrib/ntp/scripts/stats/tdata.awk deleted file mode 100755 index 5be9c04..0000000 --- a/contrib/ntp/scripts/stats/tdata.awk +++ /dev/null @@ -1,45 +0,0 @@ -# program to produce loran tdata statistics from clockstats files -# -# usage: awk -f tdata.awk clockstats -# -# format of input record (missing replaced by -40.0) -# 49228 36.852 127.127.10.1 93:241:00:00:20.812 LORAN TDATA -# M OK 0 0 1169.14 -7.4 3.16E-07 .424 -# W CV 0 0 3329.30 -16.4 1.81E-06 -# X OK 0 0 1737.19 -10.5 3.44E-07 .358 -# Y OK 0 0 2182.07 -9.0 4.41E-07 .218 -# -# format of output record (time in nanoseconds, signal values in dB) -# MJD sec time M W X Y Z -# 49228 36.852 175.0 -7.4 -16.4 -10.5 -9.0 -# -# select LORAN TDATA records with valid format -{ - if (NF >= 7 && $6 == "TDATA") { - m = w = x = y = z = -40.0 - for (i = 7; i < NF - 5; i++) { - if ($i == "M" && $(i+1) == "OK") { - i += 5 - m = $i - } - else if ($i == "W" && $(i+1) == "OK") { - i += 5 - w = $i - } - else if ($i == "X" && $(i+1) == "OK") { - i += 5 - x = $i - } - else if ($i == "Y" && $(i+1) == "OK") { - i += 5 - y = $i - } - else if ($i == "Z" && $(i+1) == "OK") { - i += 5 - z = $i - } - } - printf "%5s %9.3f %6.1f %6.1f %6.1f %6.1f %6.1f\n", $1, $2, m, w, x, y, z - } -} - diff --git a/contrib/ntp/scripts/summary.in b/contrib/ntp/scripts/summary.in deleted file mode 100644 index 515dfc6..0000000 --- a/contrib/ntp/scripts/summary.in +++ /dev/null @@ -1,373 +0,0 @@ -#! @PATH_PERL@ -w -# $Id$ -# Perl version of (summary.sh, loop.awk, peer.awk): -# Create summaries from xntpd's loop and peer statistics. -# -# Copyright (c) 1997, 1999 by Ulrich Windl -# -# 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 2 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, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -require 5.003; # "never tested with any other version of Perl" -use strict; - -use Getopt::Long; - -my $log_date_pattern = '[12]\d{3}[01]\d[0-3]\d'; -my $statsdir = "/var/log/ntp"; # directory with input files -my $outputdir = "/tmp"; # directory for output files -my $skip_time_steps = 3600.0; # ignore time offsets larger that this -my $startdate = "19700101"; # first data file to use (YYYYMMDD) -my $enddate=`date -u +%Y%m%d`; chomp $enddate; --$enddate; -my $peer_dist_limit = 400.0; - -my %options = ("directory|input-directory=s" => \$statsdir, - "output-directory=s" => \$outputdir, - "skip-time-steps:f" => \$skip_time_steps, - "start-date=s" => \$startdate, - "end-date=s" => \$enddate, - "peer-dist-limit=f" => \$peer_dist_limit); - -if ( !GetOptions(%options) ) -{ - print STDERR "valid options for $0 are:\n"; - my $opt; - foreach $opt (sort(keys %options)) { - print STDERR "\t--$opt\t(default is "; - if ( ref($options{$opt}) eq "ARRAY" ) { - print STDERR join(", ", map { "'$_'" } @{$options{$opt}}); - } else { - print STDERR "'${$options{$opt}}'"; - } - print STDERR ")\n"; - } - print STDERR "\n"; - die; -} - -# check possibly current values of options -die "$statsdir: no such directory" unless (-d $statsdir); -die "$outputdir: no such directory" unless (-d $outputdir); -die "$skip_time_steps: skip-time-steps must be positive" - unless ($skip_time_steps >= 0.0); -die "$startdate: invalid start date|$`|$&|$'" - unless ($startdate =~ m/.*$log_date_pattern$/); -die "$enddate: invalid end date" - unless ($enddate =~ m/.*$log_date_pattern$/); - -$skip_time_steps = 0.128 if ($skip_time_steps == 0); - -sub min -{ - my ($result, @rest) = @_; - map { $result = $_ if ($_ < $result) } @rest; - return($result); -} - -sub max -{ - my ($result, @rest) = @_; - map { $result = $_ if ($_ > $result) } @rest; - return($result); -} - -# calculate mean, range, and standard deviation for offset and frequency -sub do_loop -{ - my ($directory, $fname, $out_file) = @_; - print "$directory/$fname\n"; - open INPUT, "$directory/$fname" or warn "can't open $directory/$fname: $!"; - open OUTPUT, ">>$out_file" or die "can't open $out_file: $!"; - print OUTPUT "$fname\n"; - my ($loop_tmax, $loop_fmax) = (-1e9, -1e9); - my ($loop_tmin, $loop_fmin) = (1e9, 1e9); - my ($loop_time_rms, $loop_freq_rms) = (0, 0); - my $loop_count = 0; - my $loop_time = 0; - my $loop_freq = 0; - my ($freq, $offs); - my @Fld; - while () { - chop; # strip record separator - @Fld = split; - next if ($#Fld < 4); -#NTPv3: 50529 74356.259 -0.000112 16.1230 8 -#NTPv3: day, sec.msec, offset, drift_comp, sys_poll -#NTPv4: 51333 54734.582 0.000001648 16.981964 0.000001094 0.020938 6 -#NTPv4: day, sec.msec, offset, drift_comp, sys_error, clock_stabil, sys_poll - if ($Fld[2] > $skip_time_steps || $Fld[2] < -$skip_time_steps) { - warn "ignoring loop offset $Fld[2] (file $fname, line $.)\n"; - next - } - $loop_count++; - ($offs, $freq) = ($Fld[2], $Fld[3]); - $loop_tmax = max($loop_tmax, $offs); - $loop_tmin = min($loop_tmin, $offs); - $loop_fmax = max($loop_fmax, $freq); - $loop_fmin = min($loop_fmin, $freq); - $loop_time += $offs; - $loop_time_rms += $offs * $offs; - $loop_freq += $freq; - $loop_freq_rms += $freq * $freq; - } - close INPUT; - if ($loop_count > 1) { - $loop_time /= $loop_count; - $loop_time_rms = $loop_time_rms / $loop_count - $loop_time * $loop_time; - if ($loop_time_rms < 0) { - warn "loop_time_rms: $loop_time_rms < 0"; - $loop_time_rms = 0; - } - $loop_time_rms = sqrt($loop_time_rms); - $loop_freq /= $loop_count; - $loop_freq_rms = $loop_freq_rms / $loop_count - $loop_freq * $loop_freq; - if ($loop_freq_rms < 0) { - warn "loop_freq_rms: $loop_freq_rms < 0"; - $loop_freq_rms = 0; - } - $loop_freq_rms = sqrt($loop_freq_rms); - printf OUTPUT - ("loop %d, %.0f+/-%.1f, rms %.1f, freq %.2f+/-%0.3f, var %.3f\n", - $loop_count, ($loop_tmax + $loop_tmin) / 2 * 1e6, - ($loop_tmax - $loop_tmin) / 2 * 1e6, $loop_time_rms * 1e6, - ($loop_fmax + $loop_fmin) / 2, ($loop_fmax - $loop_fmin) / 2, - $loop_freq_rms); - } - else { - warn "no valid lines in $directory/$fname"; - } - close OUTPUT -} - -# calculate mean, standard deviation, maximum offset, mean dispersion, -# and maximum distance for each peer -sub do_peer -{ - my ($directory, $fname, $out_file) = @_; - print "$directory/$fname\n"; - open INPUT, "$directory/$fname" or warn "can't open $directory/$fname: $!"; - open OUTPUT, ">>$out_file" or die "can't open $out_file: $!"; - print OUTPUT "$fname\n"; -# we toss out all distances greater than one second on the assumption the -# peer is in initial acquisition - my ($n, $MAXDISTANCE) = (0, 1.0); - my %peer_time; - my %peer_time_rms; - my %peer_count; - my %peer_delay; - my %peer_disp; - my %peer_dist; - my %peer_ident; - my %peer_tmin; - my %peer_tmax; - my @Fld; - my ($i, $j); - my ($dist, $offs); - while () { - chop; # strip record separator - @Fld = split; - next if ($#Fld < 6); -#NTPv3: 50529 83316.249 127.127.8.1 9674 0.008628 0.00000 0.00700 -#NTPv3: day, sec.msec, addr, status, offset, delay, dispersion -#NTPv4: 51333 56042.037 127.127.8.1 94f5 -0.000014657 0.000000000 0.000000000 0.000013214 -#NTPv4: day, sec.msec, addr, status, offset, delay, dispersion, skew - - $dist = $Fld[6] + $Fld[5] / 2; - next if ($dist > $MAXDISTANCE); - $offs = $Fld[4]; - if ($offs > $skip_time_steps || $offs < -$skip_time_steps) { - warn "ignoring peer offset $offs (file $fname, line $.)\n"; - next - } - $i = $n; - for ($j = 0; $j < $n; $j++) { - if ($Fld[2] eq $peer_ident{$j}) { - $i = $j; # peer found - last; - } - } - if ($i == $n) { # add new peer - $peer_ident{$i} = $Fld[2]; - $peer_tmax{$i} = $peer_dist{$i} = -1e9; - $peer_tmin{$i} = 1e9; - $peer_time{$i} = $peer_time_rms{$i} = 0; - $peer_delay{$i} = $peer_disp{$i} = 0; - $peer_count{$i} = 0; - $n++; - } - $peer_count{$i}++; - $peer_tmax{$i} = max($peer_tmax{$i}, $offs); - $peer_tmin{$i} = min($peer_tmin{$i}, $offs); - $peer_dist{$i} = max($peer_dist{$i}, $dist); - $peer_time{$i} += $offs; - $peer_time_rms{$i} += $offs * $offs; - $peer_delay{$i} += $Fld[5]; - $peer_disp{$i} += $Fld[6]; - } - close INPUT; - print OUTPUT -" ident cnt mean rms max delay dist disp\n"; - print OUTPUT -"==========================================================================\n"; - my @lines = (); - for ($i = 0; $i < $n; $i++) { - next if $peer_count{$i} < 2; - $peer_time{$i} /= $peer_count{$i}; - eval { $peer_time_rms{$i} = sqrt($peer_time_rms{$i} / $peer_count{$i} - - $peer_time{$i} * $peer_time{$i}); }; - $peer_time_rms{$i} = 0, warn $@ if $@; - $peer_delay{$i} /= $peer_count{$i}; - $peer_disp{$i} /= $peer_count{$i}; - $peer_tmax{$i} = $peer_tmax{$i} - $peer_time{$i}; - $peer_tmin{$i} = $peer_time{$i} - $peer_tmin{$i}; - if ($peer_tmin{$i} > $peer_tmax{$i}) { # can this happen at all? - $peer_tmax{$i} = $peer_tmin{$i}; - } - push @lines, sprintf - "%-15s %4d %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n", - $peer_ident{$i}, $peer_count{$i}, $peer_time{$i} * 1e3, - $peer_time_rms{$i} * 1e3, $peer_tmax{$i} * 1e3, - $peer_delay{$i} * 1e3, $peer_dist{$i} * 1e3, $peer_disp{$i} * 1e3; - } - print OUTPUT sort @lines; - close OUTPUT; -} - -sub do_clock -{ - my ($directory, $fname, $out_file) = @_; - print "$directory/$fname\n"; - open INPUT, "$directory/$fname"; - open OUTPUT, ">>$out_file" or die "can't open $out_file: $!"; - print OUTPUT "$fname\n"; - close INPUT; - close OUTPUT; -} - -sub peer_summary -{ - my $in_file = shift; - my ($i, $j, $n); - my (%peer_ident, %peer_count, %peer_mean, %peer_var, %peer_max); - my (%peer_1, %peer_2, %peer_3, %peer_4); - my $dist; - my $max; - open INPUT, "<$in_file" or die "can't open $in_file: $!"; - my @Fld; - $n = 0; - while () { - chop; # strip record separator - @Fld = split; - next if ($#Fld < 7 || $Fld[0] eq 'ident'); - $i = $n; - for ($j = 0; $j < $n; $j++) { - if ($Fld[0] eq $peer_ident{$j}) { - $i = $j; - last; # peer found - } - } - if ($i == $n) { # add new peer - $peer_count{$i} = $peer_mean{$i} = $peer_var{$i} = 0; - $peer_max{$i} = 0; - $peer_1{$i} = $peer_2{$i} = $peer_3{$i} = $peer_4{$i} = 0; - $peer_ident{$i} = $Fld[0]; - ++$n; - } - $dist = $Fld[6] - $Fld[5] / 2; - if ($dist < $peer_dist_limit) { - $peer_count{$i}++; - $peer_mean{$i} += $Fld[2]; - $peer_var{$i} += $Fld[3] * $Fld[3]; - $max = $Fld[4]; - $peer_max{$i} = max($peer_max{$i}, $max); - if ($max > 1) { - $peer_1{$i}++; - if ($max > 5) { - $peer_2{$i}++; - if ($max > 10) { - $peer_3{$i}++; - if ($max > 50) { - $peer_4{$i}++; - } - } - } - } - } - else { - warn "dist exceeds limit: $dist (file $in_file, line $.)\n"; - } - } - close INPUT; - my @lines = (); - print - " host days mean rms max >1 >5 >10 >50\n"; - print - "==================================================================\n"; - for ($i = 0; $i < $n; $i++) { - next if ($peer_count{$i} < 2); - $peer_mean{$i} /= $peer_count{$i}; - eval { $peer_var{$i} = sqrt($peer_var{$i} / $peer_count{$i} - - $peer_mean{$i} * $peer_mean{$i}); }; - $peer_var{$i} = 0, warn $@ if $@; - push @lines, sprintf - "%-15s %3d %9.3f% 9.3f %9.3f %3d %3d %3d %3d\n", - $peer_ident{$i}, $peer_count{$i}, $peer_mean{$i}, $peer_var{$i}, - $peer_max{$i}, $peer_1{$i}, $peer_2{$i}, $peer_3{$i}, $peer_4{$i}; - } - print sort @lines; -} - -my $loop_summary="$outputdir/loop_summary"; -my $peer_summary="$outputdir/peer_summary"; -my $clock_summary="$outputdir/clock_summary"; -my (@loopfiles, @peerfiles, @clockfiles); - -print STDERR "Creating summaries from $statsdir ($startdate to $enddate)\n"; - -opendir SDIR, $statsdir or die "directory ${statsdir}: $!"; -rewinddir SDIR; -@loopfiles=sort grep /loop.*$log_date_pattern/, readdir SDIR; -rewinddir SDIR; -@peerfiles=sort grep /peer.*$log_date_pattern/, readdir SDIR; -rewinddir SDIR; -@clockfiles=sort grep /clock.*$log_date_pattern/, readdir SDIR; -closedir SDIR; - -# remove old summary files -map { unlink $_ if -f $_ } ($loop_summary, $peer_summary, $clock_summary); - -my $date; -map { - $date = $_; $date =~ s/.*($log_date_pattern)$/$1/; - if ($date ge $startdate && $date le $enddate) { - do_loop $statsdir, $_, $loop_summary; - } -} @loopfiles; - -map { - $date = $_; $date =~ s/.*($log_date_pattern)$/$1/; - if ($date ge $startdate && $date le $enddate) { - do_peer $statsdir, $_, $peer_summary; - } -} @peerfiles; - -map { - $date = $_; $date =~ s/.*($log_date_pattern)$/$1/; - if ($date ge $startdate && $date le $enddate) { - do_clock $statsdir, $_, $clock_summary; - } -} @clockfiles; - -print STDERR "Creating peer summary with limit $peer_dist_limit\n"; -peer_summary $peer_summary if (-f $peer_summary); diff --git a/contrib/ntp/scripts/support/README b/contrib/ntp/scripts/support/README deleted file mode 100644 index 812965b..0000000 --- a/contrib/ntp/scripts/support/README +++ /dev/null @@ -1,73 +0,0 @@ -The bin and etc directories contain several scripts (sh and perl) that -should ease startup and configuration of NTP sites. - - bin/monl is a monitoring script that prints out new, current and - old customers of an NTP timeserver when monitoring is - in effect. - monl has following options: - -i (regular expression matchin IP addres to be ignored - -d where the current state is kept (default /tmp) - -v debug output - -n do not translate IP addresses into hostnames - host to be analyzed - - monl uses xntpdc for information gathering and is thus - limited to the NTP version xntpdc is compiled for. - - bin/mvstats moves compresses and removes statistics files (useful mainly - for reference servers - - etc/install creates the locally needed directories for NTP (if not residung in /etc) - - etc/rc starts up daemon with configuration file and key file - etc/cron cron called monitor statistic (uses bin/monl) - etc/crontab crontab prototype for reference time servers - etc/setup sh script sourced by the other scripts for variable setup - -YOU MUST EDIT THESE FILES TO REFLECT YOUR LOCAL SETUP ! - -READ THIS BEFORE USING THE STARTUP SCRIPTS - -The startupscript etc/rc has been written for Suns and HPs. They are not -guaranteed to work elsewhere. Following assumptions have been made: - - All NTP related files reside in ONE directory having following structure: - - bin/* - all executables (daemon, control, date, scripts) - etc/* - startup scripts and cron scripts - conf/* - NTP configuration files - -The variable NTPROOT (etc/rc, etc/install) must be edited to reflect -the NTP directory (e.g. /usr/local/NTP) - -NTP config files are located via Suns arch command and have the name -conf/`arch`.`arch -k`. -These are the default configurations (usually clients). If a file with the name -conf/`arch`.`arch -k`.`hostname` is present this file will be preferred (Reference host, -gateway). If the arch command is not available no-arch is used. The arch command -is usually a shell script which echoes a string unique the the current machine -architecture. - -The tickadj command has its own conf/tickconf file which is used to set host -specific tickadj values. The line with DEFAULT specifies the default tickadj -parameters, all other lines consists of -. These lines need only be entered if the specified host -needs parameters different from the default parameters. - -Reference clock support is provided for DCF77. If you need to initialize -certain things for reference clock support (e.g. loading STREAMS modules), -you need to edit etc/rc. - -The current config files of Erlangen are included in the conf directory. -They are just for reference, but might help you a bit in setting up a -synchronisation network. - -The advantage of keeping all config files centralized is the easier -administration. - -We replicate the NTP directory via NFS and rdist. - -When you have set up the local config files (YOUR OWN!) you can call -/etc/rc for daemon startup. - -For more information: time@informatik.uni-erlangen.de diff --git a/contrib/ntp/scripts/support/bin/monl b/contrib/ntp/scripts/support/bin/monl deleted file mode 100644 index f0c48db..0000000 --- a/contrib/ntp/scripts/support/bin/monl +++ /dev/null @@ -1,213 +0,0 @@ -#!/local/bin/perl - -%service = ( 0, "unspec", - 1, "Active", - 2, "Passive", - 3, "Client", - 4, "Server", - 5, "Broadcast", - 6, "Control", - 7, "Private" ); -%nc = (); -@ignpat = (); -$noname = 0; -$verbose = 0; -$retries = 5; -$lastkey = 0; - -sub timedelta { - local($tm, $days, $h, $m, $s); - - $tm = @_[$[]; - $days = 0; - $days = sprintf("%dd+", $days) if $days = int($tm / (60*60*24)); - $days = "" unless $days; - $tm = $tm % (60*60*24); - $h = int($tm / (60*60)); - $tm = $tm % (60*60); - $m = int($tm / 60); - $s = $tm % 60; - - return sprintf("%s%02d:%02d:%02d", $days, $h, $m, $s); -} - -sub listentry { - local($host, $mode) = split("$;" , @_[$[]); - local($count, $version, $firsttime) = split("$;" , $_[$[+1]); - local($name); - - if (grep($host =~ m/$_/, @ignpat)) - { - print "ignored $host ...\n" if $verbose; - return; - } - - return if ! $count; - - if (defined($nc{$host})) - { - $name = $nc{$host}; - } - else - { - if ($noname) - { - $nc{$host} = $name = $host; - } - else - { - $name = (gethostbyaddr(pack("C4", split(/\./, $host)), 2))[$[]; - $nc{$host} = $name = $host if ! defined($name); - } - } - - printf ($fmt, ($lastkey eq $host) ? "" : $name, $service{$mode}, $count, $version, &timedelta($firsttime), $firsttime / $count); - - if (@_[$[+2]) - { - $hostcnt++ if $lastkey ne $host; - $packcnt += $count; - $maxtime = $firsttime if $firsttime > $maxtime; - } - - $lastkey = $host; -} - -while ($ARGV[$[] =~ /^-[nvid]$/) - { - if ($ARGV[$[] eq "-i") - { - shift; - push(@ignpat, shift) unless ! defined($ARGV[$[]); - } - elsif ($ARGV[$[] eq "-d") - { - shift; - $dir = shift unless ! defined($ARGV[$[]); - } - elsif ($ARGV[$[] eq "-n") - { - shift; - $noname = 1; - } - elsif ($ARGV[$[] eq "-v") - { - shift; - $verbose = 1; - } - } - -$dir = "/tmp" unless defined($dir); -$gone = 60*60*48; -$fmt = "%48s %10s %7d %7d %13s %14.3f\n"; -$sfmt = "%48s %10s %7s %7s %13s %14s\n"; -@lbl = ("Host", "Mode", "Count", "Version", "Time active", "Packetinterval"); - -if (!defined($ARGV[$[])) - { - $hostname = `hostname`; - chop($hostname); - unshift(@ARGV, $hostname); - } - -foreach $hostname (@ARGV) - { - $dbmfile = $dir . "/monlstats-" . $hostname; - $monl = "xntpdc -c 'hostnames no' -c monl $hostname | tail +3 |"; - $hostcnt = 0; - $packcnt = 0; - $maxtime = 0; - %Seen = (); - %New = (); - %Old = (); - - print "Monitor Status of $hostname\n\n"; - - $cnt = $retries; - do - { - open(MONL, $monl) || die("$monl failed $!"); - @monlout = ; - close(MONL); - } while (! @monlout && $cnt--); - - if (! @monlout) - { - print "not available.\n"; - next; - } - - dbmopen(Clients, $dbmfile, 0644) || die("dbmopen(.., $dbmfile, ...): $!"); - - foreach (@monlout) - { - chop; - split; - ($host, $count, $mode, $version, $lasttime, $firsttime) = - (@_[$[, $[+2 .. $[+4, $#_-1,$#_]); - - $Seen{$host, $mode} = 1; - - if (!defined($Clients{$host, $mode})) - { - if ($lasttime <= $gone) - { - ## got a new one - $Clients{$host, $mode} = $New{$host, $mode} = join("$;", $count, $version, $firsttime, $lasttime); - } - } - else - { - ## throw out the old ones - if ($lasttime > $gone) - { - $Old{$host, $mode} = $Clients{$host, $mode}; - delete $Clients{$host, $mode}; - } - else - { - $Clients{$host, $mode} = join("$;", $count, $version, $firsttime, $lasttime); - } - } - } - - grep(($Seen{$_} || ($Old{$_} = delete $Clients{$_})), keys(%Clients)); - - if (grep(($tmp = $_ , !grep($tmp =~ m/$_/, @ignpat)), keys(%New))) - { - print "New customers\n"; - print "-------------\n"; - printf $sfmt, @lbl; - grep( &listentry($_, $New{$_}, 1), sort(keys(%New)) ); - print "\n"; - } - - - if (grep((!defined($New{$_}) && ($tmp = $_, !grep($tmp =~ m/$_/, @ignpat))), keys(%Clients))) - { - print "Current customers\n"; - print "-----------------\n"; - printf $sfmt, @lbl; - grep( defined($New{$_}) || &listentry($_, $Clients{$_}, 1) , sort(keys(%Clients)) ); - print "\n"; - } - - if (grep(($tmp = $_, !grep($tmp =~ m/$_/, @ignpat)), keys(%Old))) - { - print "Discarded customers\n"; - print "-------------------\n"; - printf $sfmt, @lbl; - grep( &listentry($_, $Old{$_}, 0) , sort(keys(%Old)) ); - print "\n"; - } - - dbmclose(Clients); - - print "\nSummary:\n"; - print "--------\n"; - printf("Elapsed time: %13s\n", &timedelta($maxtime)); - printf(" Hosts: %13d\n", $hostcnt); - printf(" Packets: %13d\n", $packcnt); - printf(" Rate: %13.2f\n", $packcnt / $maxtime) if $maxtime; - print "\n"; - } diff --git a/contrib/ntp/scripts/support/bin/mvstats b/contrib/ntp/scripts/support/bin/mvstats deleted file mode 100644 index e33dc792..0000000 --- a/contrib/ntp/scripts/support/bin/mvstats +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# -# mvstats,v 3.1 1993/07/06 01:10:24 jbj Exp -# -# mvstats is called by cron for keeping the log files together -# usually only used on reference hosts -# -# Files reside in /var/NTP -# Files older than 2 days will be compressed, -# Files older than 64 days will be removed. -# -# mvstats,v -# Revision 3.1 1993/07/06 01:10:24 jbj -# XNTP release 3.1 -# -# -# Revision 1.1 1992/12/10 12:58:24 kardel -# Prerelease NTP V3 / DCF -# -# -cd /var/NTP -find . ! -name '*.Z' -mtime +2 -exec compress -f {} \; -find . -mtime +64 -exec rm -f {} \; diff --git a/contrib/ntp/scripts/support/conf/hp300.hp300 b/contrib/ntp/scripts/support/conf/hp300.hp300 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/hp700.hp700 b/contrib/ntp/scripts/support/conf/hp700.hp700 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/hp700.hp700.faui47 b/contrib/ntp/scripts/support/conf/hp700.hp700.faui47 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/hp800.hp800 b/contrib/ntp/scripts/support/conf/hp800.hp800 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/ntp.conf b/contrib/ntp/scripts/support/conf/ntp.conf deleted file mode 100644 index 2d6bb85..0000000 --- a/contrib/ntp/scripts/support/conf/ntp.conf +++ /dev/null @@ -1,3 +0,0 @@ -# -# put your default configuration (e.g. broadcastclient) in here -# diff --git a/contrib/ntp/scripts/support/conf/sun3.sun3 b/contrib/ntp/scripts/support/conf/sun3.sun3 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4.faui01 b/contrib/ntp/scripts/support/conf/sun4.sun4.faui01 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4.faui10 b/contrib/ntp/scripts/support/conf/sun4.sun4.faui10 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4.faui45 b/contrib/ntp/scripts/support/conf/sun4.sun4.faui45 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4c b/contrib/ntp/scripts/support/conf/sun4.sun4c deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4c.Lucifer b/contrib/ntp/scripts/support/conf/sun4.sun4c.Lucifer deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4m b/contrib/ntp/scripts/support/conf/sun4.sun4m deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4m.faui42 b/contrib/ntp/scripts/support/conf/sun4.sun4m.faui42 deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/sun4.sun4m.faui45m b/contrib/ntp/scripts/support/conf/sun4.sun4m.faui45m deleted file mode 100644 index e69de29..0000000 diff --git a/contrib/ntp/scripts/support/conf/tickconf b/contrib/ntp/scripts/support/conf/tickconf deleted file mode 100644 index b17dbe8..0000000 --- a/contrib/ntp/scripts/support/conf/tickconf +++ /dev/null @@ -1,19 +0,0 @@ -DEFAULT -A -p -s -q -Lucifer 55406cfa -a 1 -p -s -q -t 10001 -faui45 24000f9b -a 1 -p -s -q -faui10 2440213c -a 1 -p -s -q -faui1b 54001418 -A -p -s -q -t 10001 -faui4p 5100344d -A -p -s -q -t 9999 -faui02g 1200be20 -A -p -s -q -t 9999 -faui02e 1200bbab -A -p -s -q -t 9999 -faui02f 1200bedb -A -p -s -q -t 9999 -faui03b 1200b92b -A -p -s -q -t 9999 -faui45m 726001ac -A -p -s -q -t 10001 -faui45o 72600272 -A -p -s -q -t 10001 -faui45p 7260028f -A -p -s -q -t 10001 -faui45r 72400cc7 -A -p -s -q -t 10001 -faui45s 726045be -A -p -s -q -t 10001 -faui45v 72604487 -A -p -s -q -t 10001 -faui45x 726044eb -A -p -s -q -t 10001 -faui45y 7260476d -A -p -s -q -t 10001 -faui45z 726045a1 -A -p -s -q -t 10001 diff --git a/contrib/ntp/scripts/support/etc/cron b/contrib/ntp/scripts/support/etc/cron deleted file mode 100644 index 07ed189..0000000 --- a/contrib/ntp/scripts/support/etc/cron +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -# -# cron,v 3.1 1993/07/06 01:10:50 jbj Exp -# -# called by cron for statistics gathering -# -# cron,v -# Revision 3.1 1993/07/06 01:10:50 jbj -# XNTP release 3.1 -# -# -# Revision 1.1 1992/12/10 12:59:18 kardel -# Prerelease NTP V3 / DCF -# -# -PATH="${PATH}:/local/NTP/bin" -export PATH -monl -d /local/NTP/monitor -i '127\.0\.0\.1' faui10 faui45 lucifer rackety.udel.edu diff --git a/contrib/ntp/scripts/support/etc/crontab b/contrib/ntp/scripts/support/etc/crontab deleted file mode 100644 index 2b2d19c..0000000 --- a/contrib/ntp/scripts/support/etc/crontab +++ /dev/null @@ -1,8 +0,0 @@ -# -# NTP statistics periodic cleanup - REFERENCE SERVER ONLY -# -#55 23 * * * sh /local/NTP/etc/mvstats -# -# gather NTP client statistics - REFERENCE SERVER ONLY -# -0 8,18 * * * /local/NTP/etc/cron 2>/dev/null | /usr/ucb/mail -s "NTP statistics" time@informatik.uni-erlangen.de diff --git a/contrib/ntp/scripts/support/etc/install b/contrib/ntp/scripts/support/etc/install deleted file mode 100644 index 169a7e5..0000000 --- a/contrib/ntp/scripts/support/etc/install +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# -# install,v 3.1 1993/07/06 01:10:53 jbj Exp -# -# install,v -# Revision 3.1 1993/07/06 01:10:53 jbj -# XNTP release 3.1 -# -# -# Revision 1.1 1992/12/10 12:59:21 kardel -# Prerelease NTP V3 / DCF -# -# Revision 1.1 1992/06/18 14:50:08 kardel -# Initial revision -# -# -NTPROOT=/local/NTP # SITE SPECIFIC: where NTP resides -# -# where the local NTP state files reside (xntp.drift) ussualle /etc -# this directory must not be shared as machine dependent data ist stored there -# -NTPDIR="/+private/local/NTP" -# -# get the initial setup -# -if [ ! -r $NTPROOT/etc/setup ]; then - echo "ERROR: $NTPROOT/etc/setup missing - incorrect installation." - exit 1 -else - . $NTPROOT/etc/setup -fi - -umask 022 # SITE SPECIFIC: local policy - watch out for NFS and "root" rights - -Mkdir() { - p="" - IFS="/" - set -- $@ - IFS=' -' - for pnc do - if [ ! -d "$p/$pnc" ]; then - ECHO -n "creating directory $p/$pnc" - if mkdir "$p/$pnc"; then - ECHO "" - else - ECHO " - FAILED" - break; - fi - fi - p="$p/$pnc" - done -} - -if [ ! -d "$NTPDIR" ]; then - ECHO "installing NTP private data area ($NTPDIR)" - if Mkdir "$NTPDIR"; then - chmod 755 "$NTPDIR" - ECHO "$NTPDIR created." - fi -else - ECHO "NTP already installed." - if [ -f "$NTPDIR/xntp.drift" ]; then - ECHO "currently saved drift value:" `cat "$NTPDIR/xntp.drift"` - fi -fi - diff --git a/contrib/ntp/scripts/support/etc/rc b/contrib/ntp/scripts/support/etc/rc deleted file mode 100644 index ef8834a..0000000 --- a/contrib/ntp/scripts/support/etc/rc +++ /dev/null @@ -1,198 +0,0 @@ -#!/bin/sh -# NTP time synchronisation -# -# /src/NTP/REPOSITORY/v3/supportscripts/etc/rc,v 1.11 1993/07/09 13:17:00 kardel Exp -# -# rc,v -# Revision 1.11 1993/07/09 13:17:00 kardel -# local NTPROOT -# -# Revision 1.10 1993/07/09 11:37:29 kardel -# Initial restructured version + GPS support -# -# Revision 1.9 1993/06/23 14:10:36 kardel -# June 21st reconcilation -# -# Revision 1.7 1993/06/02 12:04:43 kardel -# May 28th reconcilation & clenaup -# -# -# non reference clock hosts will try to do an ntpdate on NTPSERVERS -# -NTPSERVERS="ntps1-0 ntps1-1 ntps2-0 ntps2-1" -NTPROOT=/local/NTP - -# -# get the initial setup -# -if [ ! -r $NTPROOT/etc/setup ]; then - echo "ERROR: $NTPROOT/etc/setup missing - incorrect installation." - exit 1 -else - . $NTPROOT/etc/setup -fi - -umask 022 # SITE SPECIFIC: local policy - watch out for NFS and "root" rights - -msg="" -# -# default configuration files are named $NTPROOT/conf/. -# -CF=$NTPROOT/conf/$ARCH.$KARCH # default configuration file -# -# Host specific config file (reference clocks) have the hostname tagged on -# -CFH="$CF"."$HOSTNAME" # specific configuration file -# -# where to find the tickadj command -# -KFIX=$NTPROOT/bin/tickadj # kernel variable fix -# -# where to find special tickadj parameters -# -TC=$NTPROOT/conf/tickconf # special tickadj parameters -# -# where to find the keys file (if not found $KEY.dumb will be used) -# -KEY=$NTPROOT/conf/ntp.keys # private key file -# -# the daemon -# -XD=$NTPROOT/bin/xntpd # NTP daemon -# -# HP adjtimed -# -ADJTIMED=$NTPROOT/bin/adjtimed # HP special (adjtime() emulation) -# -# ntpdate command -# -NTPDATE=$NTPROOT/bin/ntpdate - -# -# secondary timed support -# The word "TIMED" must be in the config file for timed to start -# Note that this times is a special version which does not ever set or -# adjust the time. Ask time@informatik.uni-erlangen.de for patches -# -TIMED=$NTPROOT/bin/timed # timed (Berkeley) secondary time service - # here used in a *HARMLESS* version - # to provide time to "inferior" systems -# -# ISREFHOST is a command that returns exit status 0 for a reference host -# Site specific: sample for dcf77 is given -# -ISREFHOST="[ -f $NTPROOT/.karch.$KARCH/sys/OBJ/parsestreams.o -a -f /dev/refclock-0 ]" -# -# SETUP_REFCLOCK -# -# what to do in order to set up a local reference clock -# usually this will load a STREAMS module or initialize other things -# needed -# -SETUP_REFCLOCK() { - if modstat | grep -s 'PARSE'; then - ECHO "loadable PARSER STREAMS module already loaded." - else - ECHO "attempting to load PARSER STREAMS module..." - MDLFILE="/tmp/mdl.$$" - if modload $NTPROOT/.karch.$KARCH/sys/OBJ/parsestreams.o -o $MDLFILE 2>&1; then - modstat - else - echo WARNING: load FAILED - fi | LOG - rm -f $MDLFILE - unset MDLFILE - fi -} - -kargs() { - MATCH=NO - HOSTID="`(hostid) 2>/dev/null || echo 000000`" - if [ -r "$TC" ]; then - exec 0< "$TC" - while [ "$MATCH" != "YES" ] && read HOST ID PARAM; do - if [ "$HOST" = "DEFAULT" ]; then - DEFAULT="$ID $PARAM" - else - if [ "$ID" = "$HOSTID" -o "$HOST" = "$HOSTNAME" ]; then - echo "$PARAM" - MATCH=YES - fi - fi - done - if [ "$MATCH" != "YES" ]; then - if [ -z "$DEFAULT" ]; then - echo "-A -p -s -q"; - else - echo "$DEFAULT"; - fi - fi - else - echo "-A -p -s -q"; - fi -} - -if [ -x $XD ]; then - if [ -x "$ADJTIMED" ]; then - $ADJTIMED && ECHO "adjusttimesupport: adjtimed." - fi - # - # WARNING: check ps command first, or you might kill things you don't want to - # - PID="`(ps -efa 2>/dev/null || ps auxww 2>/dev/null || echo "") | grep xntp | grep -v grep | awk '{ print $2 }'`" - - if [ ! -z "$PID" ]; then - ECHO "killing old NTP daemon (PID=$PID)" - # - # enable this after checking for correctness - # kill $PID - ECHO "should do a kill $PID, if this is the right PID - check rc script" - fi - # - # try an ntpdate when timeservers are configured - # - if [ ! -z "$NTPSERVERS" -a -x $NTPDATE ]; then - ECHO "NTP initial time setting" - $NTPDATE -v $NTPSERVERS | LOG - fi - # - # look for reference clock equipment - # - if $ISREFHOST; then - ECHO "REFERENCE CLOCK SUPPORT (initializing...)" - SETUP_REFCLOCK - fi - - if [ -r "$CFH" ]; then - CF="$CFH" - else - if [ ! -r "$KEY" ]; then - KEY="$KEY.dumb" - fi - fi - - ECHO "NTP configuration file: $CF" - ECHO -n "time daemon startup:" - - if [ -r "$CF" ]; then - if [ -x "$KFIX" ]; then - KARGS="`kargs`" - if [ ! -z "$KARGS" ]; then - $KFIX $KARGS && ECHO -n "tickadj $KARGS" - fi - fi - $XD -c "$CF" -k "$KEY" && ECHO -n ' xntpd' - if [ -x "$TIMED" ] && grep -s TIMED "$CF"; then - $TIMED -M -N && ECHO -n ' timed' - fi - else - msg="configuration file ($CF) not present." - fi -else - msg="daemon binary ($XD) not present." -fi -ECHO "." - -if [ "$msg" ]; then - NLECHO "WARNING: NO NTP time sychronisation: $msg" -fi diff --git a/contrib/ntp/scripts/support/etc/setup b/contrib/ntp/scripts/support/etc/setup deleted file mode 100644 index d4ea75e..0000000 --- a/contrib/ntp/scripts/support/etc/setup +++ /dev/null @@ -1,72 +0,0 @@ -# -# setup,v 3.1 1993/07/06 01:10:55 jbj Exp -# -# /bin/sh sourced file for environment setup -# expects NTPROOT variable initialized -# -# if not set it will be initialized to /usr/local/NTP -# -# setup,v -# Revision 3.1 1993/07/06 01:10:55 jbj -# XNTP release 3.1 -# -# -# Revision 1.1 1992/12/10 12:59:25 kardel -# Prerelease NTP V3 / DCF -# -# Revision 1.1 1992/12/10 10:14:46 kardel -# Initial revision -# -# -NTPROOT=${NTPROOT-/usr/local/NTP} - -# -# we so use our own echos, as we somes want to substitute them with a -# file logging version durin the /etc/rc.local phase -# -set `type ECHO` - -PATH="${PATH}:$NTPROOT/bin" -export PATH - -if [ "$2" = "is" ]; then - : -else - # - # find out the way echos work (Rest of rc thinks BSD echo) - # - ECHOREP="`echo -n x`" - if [ "$ECHOREP" = "-n x" ]; then - ECHO () { - if [ "$1" = "-n" ]; then - shift - echo "$@\c" - else - echo "$@" - fi - } - #ECHO "System V style echo" - else - ECHO () { - echo "$@" - } - #ECHO "BSD style echo" - fi - - NLECHO () { - echo "$@" - } - - LOG () { - while read _line; do - ECHO "$_line" - done - } - # - # carefully find out some configuration Variables - # - ARCH="`(arch) 2>/dev/null || ((uname) > /dev/null && uname -a | awk '{ print $6; }') 2>/dev/null || echo 'no-arch'`" - KARCH="`(arch -k) 2>/dev/null || ((uname) > /dev/null && uname -a | awk '{ print $5 }') || echo 'no-arch'`" - HOSTNAME="`(hostname) 2>/dev/null || uname -n`" -fi - -- cgit v1.1