ntp: fix presend in interleaved mode
The presend option in interleaved mode uses two presend requests instead of one to get an interleaved response from servers like chrony which delay the first interleaved response due to an optimization saving timestamps only for clients actually using the interleaved mode. After commit0ae6f2485b
("ntp: don't use first response in interleaved mode") the first interleaved response following the two presend responses in basic mode is dropped as the preferred set of timestamps minimizing error in delay was already used by the second sample in basic mode. There are only three responses in the burst and no sample is accumulated. Increasing the number of presend requests to three to get a fourth sample would be wasteful. Instead, allow reusing timestamps of the second presend sample in basic mode, which is never accumulated. Reported-by: Aaron Thompson Fixes:0ae6f2485b
("ntp: don't use first response in interleaved mode")
This commit is contained in:
parent
9c6eaccc32
commit
2d2642bb82
2 changed files with 26 additions and 1 deletions
|
@ -2302,7 +2302,7 @@ process_response(NCR_Instance inst, int saved, NTP_Local_Address *local_addr,
|
||||||
inst->local_tx.net_correction = net_correction;
|
inst->local_tx.net_correction = net_correction;
|
||||||
|
|
||||||
/* Don't use the same set of timestamps for the next sample */
|
/* Don't use the same set of timestamps for the next sample */
|
||||||
if (interleaved_packet)
|
if (interleaved_packet || inst->presend_done > 0)
|
||||||
inst->prev_local_tx = inst->local_tx;
|
inst->prev_local_tx = inst->local_tx;
|
||||||
else
|
else
|
||||||
zero_local_timestamp(&inst->prev_local_tx);
|
zero_local_timestamp(&inst->prev_local_tx);
|
||||||
|
|
|
@ -23,4 +23,29 @@ check_source_selection || test_fail
|
||||||
check_packet_interval || test_fail
|
check_packet_interval || test_fail
|
||||||
check_sync || test_fail
|
check_sync || test_fail
|
||||||
|
|
||||||
|
limit=10
|
||||||
|
base_delay=$default_base_delay
|
||||||
|
client_conf="logdir tmp
|
||||||
|
log measurements"
|
||||||
|
|
||||||
|
client_server_options="presend 5"
|
||||||
|
|
||||||
|
run_test || test_fail
|
||||||
|
check_chronyd_exit || test_fail
|
||||||
|
check_packet_interval || test_fail
|
||||||
|
|
||||||
|
check_file_messages "20.*123\.1.* 111 111 0111" 1 1 measurements.log || test_fail
|
||||||
|
check_file_messages "20.*123\.1.* 111 111 1111" 1 1 measurements.log || test_fail
|
||||||
|
rm -f tmp/measurements.log
|
||||||
|
|
||||||
|
client_server_options="presend 5 xleave"
|
||||||
|
|
||||||
|
run_test || test_fail
|
||||||
|
check_chronyd_exit || test_fail
|
||||||
|
check_packet_interval || test_fail
|
||||||
|
|
||||||
|
check_file_messages "20.*123\.1.* 111 111 0111" 2 2 measurements.log || test_fail
|
||||||
|
check_file_messages "20.*123\.1.* 111 111 1111" 1 1 measurements.log || test_fail
|
||||||
|
rm -f tmp/measurements.log
|
||||||
|
|
||||||
test_pass
|
test_pass
|
||||||
|
|
Loading…
Reference in a new issue