From 276591172eac68ec3345c00d81624d89b5372c05 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Mon, 29 Apr 2024 11:21:45 +0200 Subject: [PATCH] ntp: improve copying of server status When a server specified with the copy option responds with an unsynchronized status (e.g. due to selection failure), reset the source instance to immediately switch the local reference status instead of waiting for the source to become unreachable after 8 polls. --- ntp_core.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ntp_core.c b/ntp_core.c index 149e32a..214a989 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -2372,13 +2372,17 @@ process_response(NCR_Instance inst, int saved, NTP_Local_Address *local_addr, SRC_UpdateReachability(inst->source, synced_packet); - if (synced_packet) { - if (inst->copy && inst->remote_stratum > 0) { - /* Assume the reference ID and stratum of the server */ + if (inst->copy) { + /* Assume the reference ID and stratum of the server */ + if (synced_packet && inst->remote_stratum > 0) { inst->remote_stratum--; SRC_SetRefid(inst->source, ntohl(message->reference_id), &inst->remote_addr.ip_addr); + } else { + SRC_ResetInstance(inst->source); } + } + if (synced_packet) { SRC_UpdateStatus(inst->source, MAX(inst->remote_stratum, inst->min_stratum), pkt_leap); if (inst->delay_quant)