Hello community, here is the log from the commit of package chrony for openSUSE:Factory checked in at 2017-01-23 11:37:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/chrony (Old) and /work/SRC/openSUSE:Factory/.chrony.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chrony" Changes: -------- --- /work/SRC/openSUSE:Factory/chrony/chrony.changes 2016-12-01 10:28:48.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.chrony.new/chrony.changes 2017-01-23 11:37:04.328581562 +0100 @@ -1,0 +2,29 @@ +Mon Jan 16 22:36:09 UTC 2017 - mp...@suse.com + +- Upgraded to version 3.0: + - Enhancements + - Add support for software and hardware timestamping on Linux + - Add support for client/server and symmetric interleaved modes + - Add support for MS-SNTP authentication in Samba + - Add support for truncated MACs in NTPv4 packets + - Estimate and correct for asymmetric network jitter + - Increase default minsamples and polltarget to improve stability with very low jitter + - Add maxjitter directive to limit source selection by jitter + - Add offset option to server/pool/peer directive + - Add maxlockage option to refclock directive + - Add -t option to chronyd to exit after specified time + - Add partial protection against replay attacks on symmetric mode + - Don't reset polling interval when switching sources to online state + - Allow rate limiting with very short intervals + - Improve maximum server throughput on Linux and NetBSD + - Remove dump files after start + - Add tab-completion to chronyc with libedit/readline + - Add ntpdata command to print details about NTP measurements + - Allow all source options to be set in add server/peer command + - Indicate truncated addresses/hostnames in chronyc output + - Print reference IDs as hexadecimal numbers to avoid confusion with IPv4 addresses + - Bug fixes + - Fix crash with disabled asynchronous name resolving +- Upgraded clknetsim to version 6bb6519. + +------------------------------------------------------------------- Old: ---- chrony-2.4.1.tar.gz clknetsim-a5949fe.tar.gz New: ---- chrony-3.0.tar.gz clknetsim-6bb6519.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ chrony.spec ++++++ --- /var/tmp/diff_new_pack.EwrJIu/_old 2017-01-23 11:37:05.088473795 +0100 +++ /var/tmp/diff_new_pack.EwrJIu/_new 2017-01-23 11:37:05.088473795 +0100 @@ -1,7 +1,7 @@ # # spec file for package chrony # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,10 +24,10 @@ %bcond_with systemd %bcond_with syscallfilter %endif -%global clknetsim_ver a5949fe +%global clknetsim_ver 6bb6519 Name: chrony -Version: 2.4.1 +Version: 3.0 Release: 0 Summary: System Clock Synchronization Client and Server License: GPL-2.0 ++++++ chrony-2.4.1.tar.gz -> chrony-3.0.tar.gz ++++++ ++++ 15247 lines of diff (skipped) ++++++ chrony-fix-open.patch ++++++ --- /var/tmp/diff_new_pack.EwrJIu/_old 2017-01-23 11:37:05.332439196 +0100 +++ /var/tmp/diff_new_pack.EwrJIu/_new 2017-01-23 11:37:05.332439196 +0100 @@ -1,7 +1,7 @@ -Index: chrony-2.4/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/client.c +Index: chrony-3.0/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/client.c =================================================================== ---- chrony-2.4.orig/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/client.c -+++ chrony-2.4/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/client.c +--- chrony-3.0/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/client.c ++++ chrony-3.0/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/client.c @@ -954,6 +954,8 @@ int open(const char *pathname, int flags else if (!strcmp(pathname, "/dev/ptp1")) return SYSCLK_FD; ++++++ clknetsim-a5949fe.tar.gz -> clknetsim-6bb6519.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/client.c new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/client.c --- old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/client.c 2016-06-08 11:20:13.000000000 +0200 +++ new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/client.c 2016-12-13 17:25:43.000000000 +0100 @@ -83,6 +83,7 @@ static FILE *(*_fopen)(const char *path, const char *mode); static size_t (*_fread)(void *ptr, size_t size, size_t nmemb, FILE *stream); +static int (*_fileno)(FILE *stream); static int (*_fclose)(FILE *fp); static int (*_open)(const char *pathname, int flags); static int (*_close)(int fd); @@ -100,6 +101,7 @@ static int clknetsim_fd; static int precision_hack = 1; static unsigned int random_seed = 0; +static int recv_multiply = 1; enum { IFACE_NONE = 0, @@ -183,6 +185,7 @@ _fopen = (FILE *(*)(const char *path, const char *mode))dlsym(RTLD_NEXT, "fopen"); _fread = (size_t (*)(void *ptr, size_t size, size_t nmemb, FILE *stream))dlsym(RTLD_NEXT, "fread"); + _fileno = (int (*)(FILE *stream))dlsym(RTLD_NEXT, "fileno"); _fclose = (int (*)(FILE *fp))dlsym(RTLD_NEXT, "fclose"); _open = (int (*)(const char *pathname, int flags))dlsym(RTLD_NEXT, "open"); _close = (int (*)(int fd))dlsym(RTLD_NEXT, "close"); @@ -204,6 +207,10 @@ random_seed = atoi(env); srandom(0); + env = getenv("CLKNETSIM_RECV_MULTIPLY"); + if (env) + recv_multiply = atoi(env); + if (fuzz_init()) { node = 0; subnets = 1; @@ -356,8 +363,13 @@ shm_refclock_time = r.time; for (i = 0; i < shm_refclocks; i++) { - clock_time = r.time - (i > 0 ? get_refclock_offset() : r.offset); - receive_time = r.time; + if (shm_refclocks == 1) { + clock_time = r.time - r.offset; + receive_time = r.time; + } else { + clock_time = get_refclock_time(); + receive_time = get_real_time(); + } round_corr = (clock_time * 1e6 - floor(clock_time * 1e6) + 0.5) / 1e6; clock_time -= round_corr; @@ -939,6 +951,13 @@ return _fread(ptr, size, nmemb, stream); } +int fileno(FILE *stream) { + if (stream == URANDOM_FILE) + return -1; + + return _fileno(stream); +} + int fclose(FILE *fp) { if (fp == URANDOM_FILE) return 0; @@ -1342,6 +1361,47 @@ return sendto(sockfd, buf, len, flags, NULL, 0); } +int recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, int flags, +#if !defined(__GLIBC_PREREQ) || !(__GLIBC_PREREQ(2, 20)) + const +#endif + struct timespec *timeout) { + ssize_t len; + int i, n; + + assert(vlen > 0); + len = recvmsg(sockfd, &msgvec[0].msg_hdr, flags); + if (len < 0) + return -1; + msgvec[0].msg_len = len; + + if (recv_multiply <= 1 || vlen <= 1) + return 1; + + n = random() % recv_multiply + 1; + if (n > vlen) + n = vlen; + + for (i = 1; i < n; i++) { + struct msghdr *src = &msgvec[0].msg_hdr, *dst = &msgvec[i].msg_hdr; + if (dst->msg_name) { + memcpy(dst->msg_name, src->msg_name, src->msg_namelen); + dst->msg_namelen = src->msg_namelen; + } + assert(dst->msg_iovlen == 1 && dst->msg_iov[0].iov_len >= len); + memcpy(dst->msg_iov[0].iov_base, src->msg_iov[0].iov_base, len); + if (dst->msg_control) { + assert(dst->msg_controllen >= src->msg_controllen); + memcpy(dst->msg_control, src->msg_control, src->msg_controllen); + dst->msg_controllen = src->msg_controllen; + } + dst->msg_flags = src->msg_flags; + msgvec[i].msg_len = msgvec[0].msg_len; + } + + return n; +} + ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags) { struct Reply_recv rep; struct sockaddr_in *sa; @@ -1400,10 +1460,11 @@ memset(cmsg, 0, sizeof (*cmsg)); cmsg->cmsg_level = IPPROTO_IP; cmsg->cmsg_type = IP_PKTINFO; - cmsg->cmsg_len = cmsglen; + cmsg->cmsg_len = CMSG_LEN(sizeof (ipi)); memset(&ipi, 0, sizeof (ipi)); - ipi.ipi_spec_dst.s_addr = htonl(NODE_ADDR(sockets[s].iface - IFACE_ETH0, node)); + ipi.ipi_spec_dst.s_addr = htonl(NODE_ADDR(rep.subnet, node)); + ipi.ipi_addr.s_addr = ipi.ipi_spec_dst.s_addr; memcpy(CMSG_DATA(cmsg), &ipi, sizeof (ipi)); } @@ -1412,15 +1473,15 @@ if (sockets[s].time_stamping) { struct timespec ts; - assert(!cmsglen); - cmsglen = CMSG_SPACE(3 * sizeof (ts)); + /* don't use CMSG_NXTHDR as it's buggy in glibc */ + cmsg = (struct cmsghdr *)((char *)CMSG_FIRSTHDR(msg) + cmsglen); + cmsglen += CMSG_SPACE(3 * sizeof (ts)); assert(msg->msg_control && msg->msg_controllen >= cmsglen); - cmsg = CMSG_FIRSTHDR(msg); memset(cmsg, 0, sizeof (*cmsg)); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SO_TIMESTAMPING; - cmsg->cmsg_len = cmsglen; + cmsg->cmsg_len = CMSG_LEN(3 * sizeof (ts)); clock_gettime(CLOCK_REALTIME, &ts); @@ -1626,6 +1687,9 @@ shm_time[shmid - SHM_KEY].mode = 1; shm_time[shmid - SHM_KEY].precision = -20; + /* don't wait for select() with starting of the refclock generator */ + fill_refclock_sample(); + return &shm_time[shmid - SHM_KEY]; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/clknetsim.bash new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/clknetsim.bash --- old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/clknetsim.bash 2016-06-08 11:20:13.000000000 +0200 +++ new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/clknetsim.bash 2016-12-13 17:25:43.000000000 +0100 @@ -144,15 +144,19 @@ } generate_config3() { - local topnodes=$1 nodes=$2 offset=$3 freqexpr=$4 delayexpr=$5 i j + local topnodes=$1 nodes=$2 offset=$3 freqexpr=$4 delayexprup=$5 delayexprdown=$6 i j for i in `seq $[$topnodes + 1] $nodes`; do echo "node${i}_offset = $offset" echo "node${i}_freq = $freqexpr" for j in `seq 1 $topnodes`; do [ $i -eq $j ] && continue - echo "node${i}_delay${j} = $delayexpr" - echo "node${j}_delay${i} = $delayexpr" + echo "node${i}_delay${j} = $delayexprup" + if [ -n "$delayexprdown" ]; then + echo "node${j}_delay${i} = $delayexprdown" + else + echo "node${j}_delay${i} = $delayexprup" + fi done done > tmp/conf } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/network.cc new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/network.cc --- old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/network.cc 2016-06-08 11:20:13.000000000 +0200 +++ new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/network.cc 2016-12-13 17:25:43.000000000 +0100 @@ -234,6 +234,7 @@ while (packet_queue.get_timeout(time) <= 0) { assert(packet_queue.get_timeout(time) > -1e-10); struct Packet *packet = packet_queue.dequeue(); + stats[packet->to].update_packet_stats(true, time, packet->delay); nodes[packet->to]->receive(packet); } } @@ -371,8 +372,8 @@ if (delay > 0.0) { packet->receive_time = time + delay; + packet->delay = delay; packet_queue.insert(packet); - stats[packet->to].update_packet_stats(true, time + delay, delay); #ifdef DEBUG printf("sending packet from %d to %d:%d:%d at %f delay %f \n", packet->from, packet->subnet, packet->to, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/network.h new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/network.h --- old/clknetsim-a5949fedf7e0f78a756bd29fe93fa1e4f72cdc42/network.h 2016-06-08 11:20:13.000000000 +0200 +++ new/clknetsim-6bb6519590ebf43a61f2c11442da525a1950b7df/network.h 2016-12-13 17:25:43.000000000 +0100 @@ -28,6 +28,7 @@ struct Packet { double receive_time; + double delay; int broadcast; unsigned int subnet; unsigned int from;