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;


Reply via email to