Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package chrony for openSUSE:Factory checked in at 2021-06-05 23:31:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/chrony (Old) and /work/SRC/openSUSE:Factory/.chrony.new.1898 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chrony" Sat Jun 5 23:31:06 2021 rev:28 rq:896714 version:4.1 Changes: -------- --- /work/SRC/openSUSE:Factory/chrony/chrony.changes 2020-11-02 09:40:50.681635909 +0100 +++ /work/SRC/openSUSE:Factory/.chrony.new.1898/chrony.changes 2021-06-05 23:31:35.480444147 +0200 @@ -1,0 +2,107 @@ +Tue Jun 1 12:53:23 UTC 2021 - Reinhard Max <m...@suse.com> + +- Update to 4.1 + * Add support for NTS servers specified by IP address (matching + Subject Alternative Name in server certificate) + * Add source-specific configuration of trusted certificates + * Allow multiple files and directories with trusted certificates + * Allow multiple pairs of server keys and certificates + * Add copy option to server/pool directive + * Increase PPS lock limit to 40% of pulse interval + * Perform source selection immediately after loading dump files + * Reload dump files for addresses negotiated by NTS-KE server + * Update seccomp filter and add less restrictive level + * Restart ongoing name resolution on online command + * Fix dump files to not include uncorrected offset + * Fix initstepslew to accept time from own NTP clients + * Reset NTP address and port when no longer negotiated by NTS-KE + server +- Update clknetsim to snapshot f89702d. +- Refresh chrony.keyring from + https://chrony.tuxfamily.org/gpgkey-8F375C7E8D0EE125A3D3BD51537E2B76F7680DAC.asc +- Ensure the correct pool packages are installed for openSUSE + and SLE (bsc#1180689). + +------------------------------------------------------------------- +Fri Feb 5 09:38:02 UTC 2021 - Reinhard Max <m...@suse.com> + +- Enable syscallfilter unconditionally [boo#1181826]. + +------------------------------------------------------------------- +Mon Dec 7 09:53:22 UTC 2020 - Marcus Rueckert <mrueck...@suse.de> + +- drop buildrequires on NSS. We need gnutls for NTS anyway and we + can do all the other required crypto via nettle+gnutls. no need + for another crypto library. + +------------------------------------------------------------------- +Sun Nov 1 22:26:48 UTC 2020 - Marcus Rueckert <mrueck...@suse.de> + +- Update to 4.0 + - Enhancements + - Add support for Network Time Security (NTS) authentication + - Add support for AES-CMAC keys (AES128, AES256) with Nettle + - Add authselectmode directive to control selection of + unauthenticated sources + - Add binddevice, bindacqdevice, bindcmddevice directives + - Add confdir directive to better support fragmented + configuration + - Add sourcedir directive and "reload sources" command to + support dynamic NTP sources specified in files + - Add clockprecision directive + - Add dscp directive to set Differentiated Services Code Point + (DSCP) + - Add -L option to limit log messages by severity + - Add -p option to print whole configuration with included + files + - Add -U option to allow start under non-root user + - Allow maxsamples to be set to 1 for faster update with -q/-Q + option + - Avoid replacing NTP sources with sources that have + unreachable address + - Improve pools to repeat name resolution to get "maxsources" + sources + - Improve source selection with trusted sources + - Improve NTP loop test to prevent synchronisation to itself + - Repeat iburst when NTP source is switched from offline state + to online + - Update clock synchronisation status and leap status more + frequently + - Update seccomp filter + - Add "add pool" command + - Add "reset sources" command to drop all measurements + - Add authdata command to print details about NTP + authentication + - Add selectdata command to print details about source + selection + - Add -N option and sourcename command to print original names + of sources + - Add -a option to some commands to print also unresolved + sources + - Add -k, -p, -r options to clients command to select, limit, + reset data + - Bug fixes + - Don???t set interface for NTP responses to allow asymmetric + routing + - Handle RTCs that don???t support interrupts + - Respond to command requests with correct address on + multihomed hosts + - Removed features + - Drop support for RIPEMD keys (RMD128, RMD160, RMD256, RMD320) + - Drop support for long (non-standard) MACs in NTPv4 packets + (chrony 2.x clients using non-MD5/SHA1 keys need to use + option "version 3") + - Drop support for line editing with GNU Readline +- add BuildRequires for gnutls-devel (which also pulls nettle to + enable the new features) +- drop patches which are included in the update: + chrony-test-update-processing-of-packet-log.patch + chrony-test-fix-util-unit-test-for-NTP-era-split.patch +- refreshed chrony-config.patch +- track series file for easier quilt setup +- added option to turn off testsuite with + osc build --without=testsuite + + testsuite still runs by default + +------------------------------------------------------------------- Old: ---- chrony-3.5.1.tar.gz chrony-3.5.1.tar.gz.sig chrony-test-fix-util-unit-test-for-NTP-era-split.patch chrony-test-update-processing-of-packet-log.patch clknetsim-79ffe44.tar.gz New: ---- chrony-4.1.tar.gz chrony-4.1.tar.gz.sig clknetsim-f89702d.tar.gz series ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ chrony.spec ++++++ --- /var/tmp/diff_new_pack.pDuLsh/_old 2021-06-05 23:31:36.376445705 +0200 +++ /var/tmp/diff_new_pack.pDuLsh/_new 2021-06-05 23:31:36.380445712 +0200 @@ -1,7 +1,7 @@ # # spec file for package chrony # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,14 +16,17 @@ # +%bcond_without testsuite + %define _systemdutildir %(pkg-config --variable systemdutildir systemd) -%global clknetsim_ver 79ffe44 +#global clknetsim_ver 79ffe44 +%global clknetsim_ver f89702d #Compat macro for new _fillupdir macro introduced in Nov 2017 %if ! %{defined _fillupdir} %define _fillupdir %{_localstatedir}/adm/fillup-templates %endif Name: chrony -Version: 3.5.1 +Version: 4.1 Release: 0 Summary: System Clock Synchronization Client and Server License: GPL-2.0-only @@ -42,20 +45,19 @@ Source11: chrony-tmpfiles Source12: pool.conf.suse Source13: pool.conf.opensuse +Source99: series # PATCH-MISSING-TAG -- See http://wiki.opensuse.org/openSUSE:Packaging_Patches_guidelines Patch0: chrony-config.patch # Add NTP servers from DHCP when starting service Patch1: chrony-service-helper.patch Patch2: chrony-logrotate.patch Patch3: chrony-service-ordering.patch -Patch4: chrony-test-fix-util-unit-test-for-NTP-era-split.patch -Patch5: chrony-test-update-processing-of-packet-log.patch BuildRequires: NetworkManager-devel BuildRequires: bison BuildRequires: gcc-c++ +BuildRequires: gnutls-devel BuildRequires: libcap-devel BuildRequires: libedit-devel -BuildRequires: mozilla-nss-devel BuildRequires: pkgconfig BuildRequires: pps-tools-devel # The timezone package is needed for the "make check" tests. It can be @@ -120,6 +122,7 @@ Conflicts: otherproviders(%name-pool) Requires: %name = %version BuildArch: noarch +Supplements: (chrony and branding-openSUSE) RemovePathPostfixes: .opensuse %description pool-openSUSE @@ -133,6 +136,7 @@ Conflicts: otherproviders(%name-pool) Requires: %name = %version BuildArch: noarch +Supplements: (chrony and branding-SLE) RemovePathPostfixes: .empty %description pool-empty @@ -147,8 +151,6 @@ %patch1 -p1 %patch2 -p1 %patch3 -%patch4 -p1 -%patch5 -p1 # Remove pool statements from the default /etc/chrony.conf. They will # be provided by branding packages in /etc/chrony.d/pool.conf . @@ -175,9 +177,7 @@ export LDFLAGS="-pie -Wl,-z,relro,-z,now" %configure \ --docdir="%{_docdir}/%{name}" \ - %if %{with syscallfilter} --enable-scfilter \ - %endif --with-user=chrony \ --with-hwclockfile=%{_sysconfdir}/adjtime \ --with-sendmail=%{_sbindir}/sendmail \ @@ -191,7 +191,7 @@ mkdir %{buildroot}%{_sysconfdir}/chrony.d install -Dpm 0640 examples/chrony.keys.example \ %{buildroot}%{_sysconfdir}/chrony.keys -install -Dpm 0755 examples/chrony.nm-dispatcher \ +install -Dpm 0755 examples/chrony.nm-dispatcher.onoffline \ %{buildroot}%{_sysconfdir}/NetworkManager/dispatcher.d/20-chrony install -Dpm 0755 %{SOURCE3} \ %{buildroot}%{_sysconfdir}/dhcp/dhclient.d/chrony.sh @@ -229,6 +229,7 @@ install -Dpm 644 %{SOURCE12} %{SOURCE13} %{buildroot}/etc/chrony.d touch %{buildroot}/etc/chrony.d/pool.conf.empty +%if %{with testsuite} %ifnarch %ix86 %check # Set random seed to get deterministic results @@ -237,6 +238,7 @@ make %{?_smp_mflags} -C test/simulation/clknetsim make %{?_smp_mflags} check %endif +%endif %pre getent group %{name} >/dev/null || groupadd -r %{name} ++++++ chrony-3.5.1.tar.gz -> chrony-4.1.tar.gz ++++++ ++++ 40928 lines of diff (skipped) ++++++ chrony-config.patch ++++++ --- /var/tmp/diff_new_pack.pDuLsh/_old 2021-06-05 23:31:36.632446150 +0200 +++ /var/tmp/diff_new_pack.pDuLsh/_new 2021-06-05 23:31:36.636446157 +0200 @@ -1,7 +1,7 @@ -Index: chrony-3.2/examples/chrony.conf.example3 +Index: chrony-4.0/examples/chrony.conf.example3 =================================================================== ---- chrony-3.2.orig/examples/chrony.conf.example3 -+++ chrony-3.2/examples/chrony.conf.example3 +--- chrony-4.0.orig/examples/chrony.conf.example3 ++++ chrony-4.0/examples/chrony.conf.example3 @@ -27,12 +27,38 @@ # you can access at http://support.ntp.org/bin/view/Servers/WebHome or # you can use servers from the pool.ntp.org project. @@ -45,7 +45,7 @@ ####################################################################### ### AVOIDING POTENTIALLY BOGUS CHANGES TO YOUR CLOCK # -@@ -65,7 +91,7 @@ +@@ -79,7 +105,7 @@ # immediately so that it doesn't gain or lose any more time. You # generally want this, so it is uncommented. @@ -54,7 +54,7 @@ # If you want to enable NTP authentication with symmetric keys, you will need # to uncomment the following line and edit the file to set up the keys. -@@ -124,8 +150,8 @@ driftfile /var/lib/chrony/drift +@@ -165,8 +191,8 @@ ntsdumpdir /var/lib/chrony # produce some graphs of your system's timekeeping performance, or you # need help in debugging a problem. ++++++ chrony.keyring ++++++ --- /var/tmp/diff_new_pack.pDuLsh/_old 2021-06-05 23:31:36.700446269 +0200 +++ /var/tmp/diff_new_pack.pDuLsh/_new 2021-06-05 23:31:36.700446269 +0200 @@ -1,116 +1,54 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -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 -y2z7tjnVpw== -=EQrk +mQINBGCc9dwBEADLydyZIqgarshQeCtIlWAgP3coy0mdJwxet1CvXwF1xpq18Qi1 +Tt9RZL64SkbQ8sKryBqnPjKZdOfVT5FwUucjp9L+/j7Bhk0tqv30EIQ57rnDLJ9T +c4LG1leO+Tc5Ym/0tvv4uMjkxr4KAKHPYrweHk6EAw06bbJ02mfy9xhlITSfyyFl +QRoRTEjy8N2IDutA4QzbZm0T5kvI7k7s/ILG5vyNo53X5PI/rWrSqmPZ5qs0lvDv +tA+rxOJp+FvlvOyBuv3ftIX0kAwRU+x/ET2Yd9qQWnXRx9d9D2UpFXm9DHfCDJYR +F56D0O3hf+rrCa/uSutIqmR33j5Wz4bYjWdmg4wbRQaoVxJl5AUrWuYEFwcCuY2B +FFgttLPb0qHpeBwuWaWJ9U6HM7qY3WEI2C/OWM0XFM8ERezedNEf7O2GTsoVVcm+ +LRg31R3eJzipKMAGZWScSDSRAXhh6oZhflMRjYKGvwRfgeos/Sl2bdYL80hqyjGV +jMhEYDC9sfLXRyLU+9FexruIzSLR8Vornma3zjzu9pRkbfTHb8FfBMt9MZEWraF2 +7riRq/zJE9QPWnBL/C8rdaXXxflBmGctn7RDKGOvxZ7SxPzzHbl5tV/Fizhkeph/ +v8YLVuCOk0pIpX65mFun3Xw5IF01x1GMzU1xYezExti9yBNiv9HVqf1DWwARAQAB +tCZNaXJvc2xhdiBMaWNodmFyIDxtbGljaHZhckByZWRoYXQuY29tPokCVAQTAQgA +PhYhBI83XH6NDuElo9O9UVN+K3b3aA2sBQJgnPXcAhsDBQkSzAMABQsJCAcCBhUK +CQgLAgQWAgMBAh4BAheAAAoJEFN+K3b3aA2sl8IQAJ9AMppV6cdxzt8g2Ypz0hw1 +6+9T5DjbYE/s0lozFQhCoYfo+SZyc3+yyKzlxI3ryHwFk9NjXGZZ8QjzT7FLj7/s +nKDjv5hUCOAi9Q+k217xwlBueeMyheeVaGGGa+Hv5CF1fZx/MtxiShUqu8oSqUyP +nW8lPGz73MfGAPT7kijVnz73pbht0vrZ9I+r8dnQGiweGBohexfCvmncrTyhjM8r +nvecycYBNnXhupzpmSMZgIA1s2v7oVmTnV0bntxE/gr7+SPk7KozhD12K8OU8deJ +cDD8F7NKa9Oe5NtuGVN4IPqp5cgj7GAyIj0sYss9Jknu4jX0imR5kwH6GbgFa7c/ +kU+fKTz57Rs1OGr3glYpMnNftXSWbC2V/OJxHVEcMk8HwKLgnQjtmKLVGeCo5iS6 +LFQuWaxpfjvxVjGSpnNu19cHVUhDM9cTP1DhUd4LdnltHQ+/xjwgzTgE4GJ1ZB0W +vhvxcdb69Sf50bGd4/WuURRoYSE7M6UKRwfXmMpyTiNhZz+3XjAoScA9AS7q9xfS +y3OddQEle/+qNFdABB12WmCgRhWemHzTZDXydIJuw+ucLO7U5RrDdqdaHkRVXJ9G +4mdk+3FgUlYgB9GY4pHQdqGdE60838R2zY9x0gK8cHU+FaRPAiTU8SJL0wb/Rko7 +qbZUY/6bgrDoXp4otAP2iF0EExECAB0WIQSLH0qa2nPUAeMIWgtf8G8puh4BOwUC +YJ0C3AAKCRBf8G8puh4BO9k2AJ4ohgz/p49IBfjf22sEL1FvYM/DhwCfTyCkbogO +uagIg5qwuEGwHMgn19G5Ag0EYJz13AEQAMrLXgl5u6vAakSF9n+xCP2WOiMHzzrR +OxHnWzsX6PTXpJt14LSZOZ5wjdyR3gLJWGLdkfHoxHpQYp7PLgNS29SuAc4HQ+Br +O5F4g9EmwDJ0ueUYxU1FcySRXfXR+gLabpQCc2s9bW6RaMwLuQNxZwkfXClkPQms +ImTFA0KntWpHc+uEr1J2i6LQS7D/BK6m72l9x8z9k9gqAabXw+xHsis+ffPMG5Jm +HOqeHYtsq+2JW1VvBnA4Qh3DKH9OQaD9hZbEiUC3nMmlLkPF/r29tWTPa7luBHBn +X556JTXVm+vDUDwZ2srLfaKyQCxbNLwvQ2Pn5SOyyCnuIWR2xZs/+KPDMhtKUBAV +HcboVu6iPCTU42CVMPaJvYD2iUEncZNeUGJOSuG240LSLNGEFFsD7YgXb1XHjQD5 +ci3Ki7P/hHi3AG53IsQTiaE5VgBdDje3zYCf5WaZ6c3DQQB9lab2RMz+5Fdr7Z6Y +mFRUbmxSnsMe0mwwcqVe3ofV0fKvE7Ep0T8bBg53dCqyU8hIbD5wUe99JmhMFnzs +5elwkv/Hb3Eg92dgu1zWb5kMzuvGEHtCIukIy1B+pzQOfT+iOC+lbmRHhPslJ9S0 +1vENJE+nEEsGxPy9pRHrmWSKI4Zh+ysjb/vW/vOwAd1RsvxTfgBeOOawmlz+n0pJ +T018ZnUgmc35ABEBAAGJAjwEGAEIACYWIQSPN1x+jQ7hJaPTvVFTfit292gNrAUC +YJz13AIbDAUJEswDAAAKCRBTfit292gNrPuRD/43kM0P71gxfJQj6PBpPtjIVVfm +4TIPWKmV+F4/9eCwAPC/o44Yw+nxGr77Rk2DsaSn0V51j2egRCXKuZBZx/v6JXP7 +qpDk3Uecml7IfxTd+N+gkI3viUsrt4ykUgyUH/wy/edMG3h9qhBQP0RxiDge18P6 +YUpQSnq3uP72ycTPLBJlqp/Y9+GXUapvcyDqBFnvs96ieDmSbjSf6tris1cuLv6f +eld4HNUY/LmI5MlYbywbgWGpSOyKUlTtyF33LqPnWd7UuTN7QNsYyjGnlJbkkGi/ +KwuNbIo5Gs4avaUSTc7SBLdCYneEIt7mt7hg0StKHQC6s/ak/w8yl1yFy5gRusO4 +QCFT2ZMQ6jZUAuaQGx0rhWQr9akNNJEDsHTBQR8pxpFp3LcDXcUXSSeySRSFZLt+ +hExvDQxXuhdbZHYGL1E6g5gtJQKnobNu2jMOziBcDivhAsqNw2Poq6fJVLavjBI5 +BI1xAqmymIExJFSlHdLuZq09cVzY3EOj3x23YTzPKNOI/qu4jTUT4Byi8Oy3PN1B +B0n5SqORWJ0KfAyVEewshSAqJ7zrZ5sJXWnKeVQqBOg5EwkOB8rz/M3mqgrnBRiq +hLiiiG5tKETA1YIQGXIbP8t1vqoQrpvYaJfkk3kQlktxfFkDRt8dKIxpFk8uPiNb +bcAu2uXfRrQxpaqcOg== +=/wbD -----END PGP PUBLIC KEY BLOCK----- ++++++ clknetsim-79ffe44.tar.gz -> clknetsim-f89702d.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/client.c new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/client.c --- old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/client.c 2019-11-26 10:05:32.000000000 +0100 +++ new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/client.c 2021-04-21 09:49:16.000000000 +0200 @@ -31,6 +31,7 @@ #include <time.h> #include <stdio.h> #include <dlfcn.h> +#include <fcntl.h> #include <sys/un.h> #include <unistd.h> #include <assert.h> @@ -46,6 +47,7 @@ #include <ifaddrs.h> #include <linux/types.h> #include <linux/ethtool.h> +#include <linux/pps.h> #include <linux/sockios.h> #ifdef SO_TIMESTAMPING #include <linux/ptp_clock.h> @@ -75,13 +77,14 @@ #define SYSCLK_FD 1001 #define SYSCLK_CLOCKID ((~(clockid_t)SYSCLK_FD << 3) | 3) #define SYSCLK_PHC_INDEX 1 +#define PPS_FD 1002 #define URANDOM_FD 1010 #define MAX_SOCKETS 20 #define BASE_SOCKET_FD 100 #define BASE_SOCKET_DEFAULT_PORT 60000 -#define MAX_TIMERS 40 +#define MAX_TIMERS 80 #define BASE_TIMER_ID 0xC1230123 #define BASE_TIMER_FD 200 @@ -93,7 +96,7 @@ static int (*_fileno)(FILE *stream); static int (*_fclose)(FILE *fp); static int (*_fcntl)(int fd, int cmd, ...); -static int (*_open)(const char *pathname, int flags, mode_t mode); +static int (*_open)(const char *pathname, int flags, ...); static ssize_t (*_read)(int fd, void *buf, size_t count); static int (*_close)(int fd); static int (*_socket)(int domain, int type, int protocol); @@ -106,6 +109,7 @@ static void *(*_shmat)(int shmid, const void *shmaddr, int shmflg); static unsigned int node; +static int initialized_symbols = 0; static int initialized = 0; static int clknetsim_fd; static int precision_hack = 1; @@ -193,18 +197,12 @@ static double shm_refclock_time = 0.0; static struct Reply_getrefoffsets refclock_offsets; static int refclock_offsets_used = REPLY_GETREFOFFSETS_SIZE; +static int pps_fds = 0; static void make_request(int request_id, const void *request_data, int reqlen, void *reply, int replylen); -__attribute__((constructor)) -static void init(void) { - struct Request_register req; - struct Reply_register rep; - struct sockaddr_un s = {AF_UNIX, "clknetsim.sock"}; - const char *env; - unsigned int connect_retries = 100; /* 10 seconds */ - - if (initialized) +static void init_symbols(void) { + if (initialized_symbols) return; _fopen = (FILE *(*)(const char *path, const char *mode))dlsym(RTLD_NEXT, "fopen"); @@ -213,7 +211,7 @@ _fileno = (int (*)(FILE *stream))dlsym(RTLD_NEXT, "fileno"); _fclose = (int (*)(FILE *fp))dlsym(RTLD_NEXT, "fclose"); _fcntl = (int (*)(int fd, int cmd, ...))dlsym(RTLD_NEXT, "fcntl"); - _open = (int (*)(const char *pathname, int flags, mode_t mode))dlsym(RTLD_NEXT, "open"); + _open = (int (*)(const char *pathname, int flags, ...))dlsym(RTLD_NEXT, "open"); _read = (ssize_t (*)(int fd, void *buf, size_t count))dlsym(RTLD_NEXT, "read"); _close = (int (*)(int fd))dlsym(RTLD_NEXT, "close"); _socket = (int (*)(int domain, int type, int protocol))dlsym(RTLD_NEXT, "socket"); @@ -225,6 +223,24 @@ _shmget = (int (*)(key_t key, size_t size, int shmflg))dlsym(RTLD_NEXT, "shmget"); _shmat = (void *(*)(int shmid, const void *shmaddr, int shmflg))dlsym(RTLD_NEXT, "shmat"); + initialized_symbols = 1; +} + +__attribute__((constructor)) +static void init(void) { + unsigned int connect_retries = 100; /* 10 seconds */ + struct sockaddr_un s = {AF_UNIX, "clknetsim.sock"}; + struct Request_register req; + struct Reply_register rep; + const char *env; + char command[64]; + FILE *f; + + if (initialized) + return; + + init_symbols(); + env = getenv("CLKNETSIM_START_DATE"); if (env) system_time_offset = atol(env); @@ -241,6 +257,20 @@ if (env) timestamping = atoi(env); + f = _fopen("/proc/self/comm", "r"); + if (f) { + command[0] = '\0'; + if (!fgets(command, sizeof (command), f)) + ; + fclose(f); + + if (strncmp(command, "valgrind", 8) == 0) { + /* don't connect to the server */ + initialized = 1; + return; + } + } + if (fuzz_init()) { node = 0; subnets = 1; @@ -296,7 +326,7 @@ struct Request_packet request; int sent, received = 0; - assert(initialized); + init(); if (fuzz_mode) { fuzz_process_request(request_id, request_data, reply, replylen); @@ -386,7 +416,7 @@ double clock_time, receive_time, round_corr; int i; - if (!shm_refclocks) + if (shm_refclocks == 0 && pps_fds == 0) return; make_request(REQ_GETREFSAMPLE, NULL, 0, &r, sizeof (r)); @@ -664,6 +694,16 @@ int clock_gettime(clockid_t which_clock, struct timespec *tp) { double time; + /* try to allow reading of the clock from other constructors, but + prevent a recursive call (e.g. due to a special memory allocator) */ + if (!initialized) { + if (initialized_symbols) { + errno = EINVAL; + return -1; + } + init(); + } + switch (which_clock) { case CLOCK_REALTIME: case CLOCK_REALTIME_COARSE: @@ -725,7 +765,23 @@ if (buf->modes & ADJ_SETOFFSET) local_time_valid = 0; - req.timex = *buf; + memset(&req, 0, sizeof (req)); + req.timex.modes = buf->modes; + if (buf->modes & ADJ_FREQUENCY) + req.timex.freq = buf->freq; + if (buf->modes & ADJ_MAXERROR) + req.timex.maxerror = buf->maxerror; + if (buf->modes & ADJ_STATUS) + req.timex.status = buf->status; + if ((buf->modes & ADJ_TIMECONST) || (buf->modes & ADJ_TAI)) + req.timex.constant = buf->constant; + if (buf->modes & ADJ_TICK) + req.timex.tick = buf->tick; + if (buf->modes & ADJ_OFFSET) + req.timex.offset = buf->offset; + if (buf->modes & ADJ_SETOFFSET) + req.timex.time = buf->time; + make_request(REQ_ADJTIMEX, &req, sizeof (req), &rep, sizeof (rep)); *buf = rep.timex; @@ -925,6 +981,22 @@ case REPLY_SELECT_NORMAL: case REPLY_SELECT_BROADCAST: s = find_recv_socket(&rep); + + if (s >= 0 && rep.type == MSG_TYPE_TCP_CONNECT && + !sockets[s].listening && !sockets[s].connected) { + struct Reply_recv recv_rep; + + /* drop the connection packet and let the client repeat the call + in order to see that the socket is ready for writing */ + make_request(REQ_RECV, NULL, 0, &recv_rep, sizeof (recv_rep)); + + assert(recv_rep.type == MSG_TYPE_TCP_CONNECT); + assert(sockets[s].type == SOCK_STREAM); + sockets[s].connected = 1; + errno = EINTR; + return -1; + } + recv_fd = s >= 0 ? get_socket_fd(s) : 0; /* fetch and drop the packet if no fd is waiting for it */ @@ -940,21 +1012,6 @@ goto try_again; } - - if (rep.type == MSG_TYPE_TCP_CONNECT && - !sockets[s].listening && !sockets[s].connected) { - struct Reply_recv recv_rep; - - /* drop the connection packet and let the client repeat the call - in order to see that the socket is ready for writing */ - make_request(REQ_RECV, NULL, 0, &recv_rep, sizeof (recv_rep)); - - assert(recv_rep.type == MSG_TYPE_TCP_CONNECT); - assert(sockets[s].type == SOCK_STREAM); - sockets[s].connected = 1; - errno = EINTR; - return -1; - } break; default: assert(0); @@ -1048,7 +1105,7 @@ tv.tv_usec = usec % 1000000; r = select(0, NULL, NULL, NULL, &tv); - assert(r == 0); + assert(r <= 0); return 0; } @@ -1096,11 +1153,15 @@ /* make sure _fopen is initialized in case it is called from another constructor (e.g. OpenSSL's libcrypto) */ - init(); + init_symbols(); return _fopen(path, mode); } +FILE *fopen64(const char *path, const char *mode) { + return fopen(path, mode); +} + FILE *fdopen(int fd, const char *mode) { if (fd == URANDOM_FD) return URANDOM_FILE; @@ -1119,6 +1180,10 @@ return _fread(ptr, size, nmemb, stream); } +size_t __fread_chk(void *ptr, size_t ptrlen, size_t size, size_t nmemb, FILE *stream) { + return fread(ptr, size, nmemb, stream); +} + int fileno(FILE *stream) { if (stream == URANDOM_FILE) return -1; @@ -1132,18 +1197,34 @@ return _fclose(fp); } -int open(const char *pathname, int flags, mode_t mode) { - int r; +int open(const char *pathname, int flags, ...) { + int r, mode_arg = 0; + mode_t mode = 0; + va_list ap; + + mode_arg = flags & O_CREAT || (flags & O_TMPFILE) == O_TMPFILE; + + if (mode_arg) { + va_start(ap, flags); + mode = va_arg(ap, mode_t); + va_end(ap); + } assert(REFCLK_PHC_INDEX == 0 && SYSCLK_PHC_INDEX == 1); if (!strcmp(pathname, "/dev/ptp0")) return REFCLK_FD; else if (!strcmp(pathname, "/dev/ptp1")) return SYSCLK_FD; + else if (!strcmp(pathname, "/dev/pps0")) + return pps_fds++, PPS_FD; else if (!strcmp(pathname, "/dev/urandom")) return URANDOM_FD; - r = _open(pathname, flags, mode); + if (mode_arg) + r = _open(pathname, flags, mode); + else + r = _open(pathname, flags); + assert(r < 0 || (r < BASE_SOCKET_FD && r < BASE_TIMER_FD)); return r; @@ -1174,6 +1255,9 @@ if (fd == REFCLK_FD || fd == SYSCLK_FD || fd == URANDOM_FD) { return 0; + } else if (fd == PPS_FD) { + pps_fds--; + return 0; } else if ((t = get_timer_from_fd(fd)) >= 0) { return timer_delete(get_timerid(t)); } else if ((s = get_socket_from_fd(fd)) >= 0) { @@ -1590,6 +1674,35 @@ ts_config->tx_type = HWTSTAMP_TX_ON; ts_config->rx_filter = HWTSTAMP_FILTER_ALL; #endif + } else if (request == PPS_GETCAP && fd == PPS_FD) { + int *mode = va_arg(ap, int *); + *mode = PPS_CAPTUREASSERT | PPS_TSFMT_TSPEC; + } else if (request == PPS_GETPARAMS && fd == PPS_FD) { + struct pps_kparams *params = va_arg(ap, struct pps_kparams *); + memset(params, 0, sizeof (*params)); + params->mode = PPS_CAPTUREASSERT | PPS_TSFMT_TSPEC; + } else if (request == PPS_SETPARAMS && fd == PPS_FD) { + struct pps_kparams *params = va_arg(ap, struct pps_kparams *); + if (params->mode != (PPS_CAPTUREASSERT | PPS_TSFMT_TSPEC)) + ret = -1, errno = EINVAL; + } else if (request == PPS_FETCH && fd == PPS_FD) { + static unsigned long seq = 0; + struct pps_fdata *data = va_arg(ap, struct pps_fdata *); + memset(&data->info, 0, sizeof (data->info)); + if (data->timeout.flags & PPS_TIME_INVALID || + data->timeout.sec > 0 || data->timeout.nsec > 0) { + double d, prev_shm_time = shm_refclock_time; + while (prev_shm_time == shm_refclock_time) { + d = ceil(network_time) - network_time + 0.001; + usleep((d > 0.2 ? d : 0.2) * 1e6); + } + } + if (shm_refclock_time > 0.0) { + data->info.assert_sequence = ++seq; + data->info.assert_tu.sec = shm_refclock_time; + data->info.assert_tu.nsec = (shm_refclock_time - data->info.assert_tu.sec) * 1e9; + data->info.assert_tu.sec += system_time_offset; + } } else { ret = -1; errno = EINVAL; @@ -2387,7 +2500,8 @@ *res = get_addrinfo(INADDR_ANY, port, type, NULL); } else if (inet_aton(node, &addr)) { *res = get_addrinfo(ntohl(addr.s_addr), port, type, NULL); - } else if (strcmp(node + strlen(node) - 4, ".clk") == 0) { + } else if ((strlen(node) > 4 && strcmp(node + strlen(node) - 4, ".clk") == 0) || + (strlen(node) > 5 && strcmp(node + strlen(node) - 5, ".clk.") == 0)) { const char *s = strstr(node, ".net"); int subnet; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/clknetsim.bash new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/clknetsim.bash --- old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/clknetsim.bash 2019-11-26 10:05:32.000000000 +0100 +++ new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/clknetsim.bash 2021-04-21 09:49:16.000000000 +0200 @@ -19,7 +19,7 @@ start_client() { local node=$1 client=$2 config=$3 suffix=$4 opts=$5 - local args=() line lastpid + local args=() line lastpid wrapper_options="" rm -f $CLKNETSIM_TMPDIR/log.$node $CLKNETSIM_TMPDIR/conf.$node @@ -93,9 +93,15 @@ ;; esac + if [[ $CLKNETSIM_CLIENT_WRAPPER == *valgrind* ]]; then + wrapper_options="--log-file=$CLKNETSIM_TMPDIR/valgrind.$node" + fi + LD_PRELOAD=$CLKNETSIM_PATH/clknetsim.so \ - CLKNETSIM_NODE=$node CLKNETSIM_SOCKET=$CLKNETSIM_TMPDIR/sock \ - $client_wrapper $client$suffix "${args[@]}" &> $CLKNETSIM_TMPDIR/log.$node & + CLKNETSIM_NODE=$node CLKNETSIM_SOCKET=$CLKNETSIM_TMPDIR/sock \ + $CLKNETSIM_CLIENT_WRAPPER $wrapper_options \ + $client$suffix "${args[@]}" &> $CLKNETSIM_TMPDIR/log.$node & + lastpid=$! disown $lastpid @@ -103,16 +109,32 @@ } start_server() { - local nodes=$1 ret=0 + local nodes=$1 ret=0 wrapper_options="" shift - $server_wrapper $CLKNETSIM_PATH/clknetsim "$@" -s $CLKNETSIM_TMPDIR/sock \ + + if [[ $CLKNETSIM_SERVER_WRAPPER == *valgrind* ]]; then + wrapper_options="--log-file=$CLKNETSIM_TMPDIR/valgrind.0" + fi + + $CLKNETSIM_SERVER_WRAPPER $wrapper_options \ + $CLKNETSIM_PATH/clknetsim "$@" -s $CLKNETSIM_TMPDIR/sock \ $CLKNETSIM_TMPDIR/conf $nodes > $CLKNETSIM_TMPDIR/stats 2> $CLKNETSIM_TMPDIR/log + if [ $? -ne 0 ]; then echo clknetsim failed 1>&2 ret=1 fi + kill $client_pids &> /dev/null client_pids=" " + + if ls tmp/valgrind.* &> /dev/null; then + if grep -q 'ERROR SUMMARY: [^0]' tmp/valgrind.*; then + echo " valgrind error" 1>&2 + ret=1 + fi + fi + return $ret } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/examples/visclocks.test new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/examples/visclocks.test --- old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/examples/visclocks.test 1970-01-01 01:00:00.000000000 +0100 +++ new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/examples/visclocks.test 2021-04-21 09:49:16.000000000 +0200 @@ -0,0 +1,24 @@ +#!/bin/bash + +CLKNETSIM_PATH=.. +. ../clknetsim.bash + +export CLKNETSIM_RANDOM_SEED + +CLKNETSIM_RANDOM_SEED=1011 +generate_seq '(sum (* 2e-9 (normal)))' 50000 > freq.input +CLKNETSIM_RANDOM_SEED=1012 +generate_seq '(+ 1e-5 (* 1e-4 (exponential)))' 10000 > delay_up.input +CLKNETSIM_RANDOM_SEED=1013 +generate_seq '(+ 1e-5 (* 1e-4 (exponential)))' 10000 > delay_down.input +CLKNETSIM_RANDOM_SEED=1014 + +generate_config1 3 0.0 "(file \"freq.input\")" \ + "(file \"delay_up.input\")" "(file \"delay_down.input\")" + +start_client 1 chrony "local stratum 1" +start_client 2 chrony "server 192.168.123.1 minpoll 6 maxpoll 6 minsamples 32" +start_client 3 chrony "server 192.168.123.1 minpoll 6 maxpoll 6 maxsamples 16" +start_server 3 -o log.offset -p log.packets -l 50000 + +../visclocks.py freq.input log.offset log.packets diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/visclocks.py new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/visclocks.py --- old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/visclocks.py 2019-11-26 10:05:32.000000000 +0100 +++ new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/visclocks.py 2021-04-21 09:49:16.000000000 +0200 @@ -29,7 +29,7 @@ window = pygame.display.set_mode((maxx, maxy)) font = pygame.font.SysFont("monospace", 12) -pygame.time.set_timer(pygame.USEREVENT, 1000 / 30) +pygame.time.set_timer(pygame.USEREVENT, 1000 // 60) white = (255, 255, 255) black = (0, 0, 0) @@ -50,7 +50,7 @@ offset_rms = [ 0, 0, 0, 0 ] offset_lock = 0 -delays_shown = 3 +delays_shown = 2 eof = False paused = False game_mode = False @@ -78,7 +78,7 @@ last_line = [] for line in delay_lines[i]: - if len(last_line) == 4 and len(line) == 4 and last_line[2] == "1" and line[1] == "1": + if len(last_line) == 9 and len(line) == 9 and last_line[2] == "1" and line[1] == "1": delay1 = float(last_line[3]) delay2 = float(line[3]) delays[i].append((int(float(line[0])), (delay1 - delay2) / 2, (delay1 + delay2) / 2)) @@ -142,7 +142,7 @@ if offset == "": eof = True break - offsets.appendleft(map(float, offset.split())) + offsets.appendleft(list(map(float, offset.split()))) while len(offsets) > histsize: offsets.pop() ++++++ series ++++++ chrony-config.patch -p1 chrony-service-helper.patch -p1 chrony-logrotate.patch -p1 chrony-service-ordering.patch -p0