From: Miroslav Lichvar Date: Wed, 7 Dec 2016 15:31:56 +0000 (+0100) Subject: ntp: fix RX error added to dispersion in interleaved mode X-Git-Tag: 3.0-pre1~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e62a39cafe00d3ce517dfe4d0c3cf0cbf65f8f0c;p=thirdparty%2Fchrony.git ntp: fix RX error added to dispersion in interleaved mode --- diff --git a/ntp_core.c b/ntp_core.c index a1da2c8e..3d800899 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -1380,6 +1380,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr, /* These are the timespec equivalents of the remote and local epochs */ struct timespec remote_receive, remote_transmit, prev_remote_receive; struct timespec local_average, remote_average; + double rx_ts_err; precision = LCL_GetSysPrecisionAsQuantum() + UTI_Log2ToDouble(message->precision); @@ -1398,6 +1399,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr, &local_average, &local_interval); server_interval = UTI_DiffTimespecsToDouble(&remote_transmit, &prev_remote_receive); + rx_ts_err = inst->local_rx.err; sample_rx_tss = inst->local_rx.source; } else { UTI_AverageDiffTimespecs(&remote_receive, &remote_transmit, @@ -1405,6 +1407,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr, UTI_AverageDiffTimespecs(&inst->local_tx.ts, &rx_ts->ts, &local_average, &local_interval); server_interval = remote_interval; + rx_ts_err = rx_ts->err; sample_rx_tss = rx_ts->source; } @@ -1435,7 +1438,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr, skew = (source_freq_hi - source_freq_lo) / 2.0; /* and then calculate peer dispersion */ - dispersion = precision + rx_ts->err + skew * fabs(local_interval); + dispersion = precision + rx_ts_err + skew * fabs(local_interval); /* Additional tests required to pass before accumulating the sample */