From 5ba42cee45a610b15dd7fd24bb88170ee51ee830 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 16 May 2023 15:11:22 +0200 Subject: [PATCH] ntp: reset polling interval when replacing sources Set the polling interval to minpoll when changing address of a source, but only if it is reachable to avoid increasing load on server or network in case that is the reason for the source being unreachable. This shortens the time needed to replace a falseticker or unsynchronized source with a selectable source. --- ntp_core.c | 6 ++++++ test/simulation/137-pool | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/ntp_core.c b/ntp_core.c index 4e2289a..8ce9ed9 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -833,6 +833,12 @@ NCR_ChangeRemoteAddress(NCR_Instance inst, NTP_Remote_Address *remote_addr, int inst->local_addr.sock_fd = NIO_OpenServerSocket(remote_addr); } + /* Reset the polling interval only if the source wasn't unreachable to + avoid increasing server/network load in case that is what caused + the source to be unreachable */ + if (SRC_IsReachable(inst->source)) + NCR_ResetPoll(inst); + /* Update the reference ID and reset the source/sourcestats instances */ SRC_SetRefid(inst->source, UTI_IPToRefid(&remote_addr->ip_addr), &inst->remote_addr.ip_addr); diff --git a/test/simulation/137-pool b/test/simulation/137-pool index de8d77d..41c65d2 100755 --- a/test/simulation/137-pool +++ b/test/simulation/137-pool @@ -46,4 +46,23 @@ check_sync || test_fail check_file_messages "20.*192.168.123.*" 15 17 measurements.log || test_fail rm -f tmp/measurements.log +servers=6 +falsetickers=2 +client_server_conf="pool nodes-1-2-3-4-5-6.net1.clk maxsources 5 polltarget 1 iburst" +wander=1e-12 +jitter=1e-6 +min_sync_time=7 + +run_test || test_fail +check_chronyd_exit || test_fail +check_source_selection || test_fail +check_packet_interval || test_fail +check_sync || test_fail + +check_log_messages "Detected falseticker" 2 10 || test_fail +check_log_messages "Source 192.168.123.. replaced with" 1 1 || test_fail +check_file_messages "20.*192.168.123.* 11.1 6 6 " 15 17 measurements.log || test_fail +check_file_messages "20.*00:01:.. 192.168.123.* 11.1 6 6 " 1 1 measurements.log || test_fail +rm -f tmp/measurements.log + test_pass