From d70e815e9fcd062f1789400ed3b4458f8acc29d8 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 22 Mar 2016 17:01:38 +0100 Subject: [PATCH] sources: try to replace NTP sources with bad distance Similarly to unreachable sources and falsetickers, try to replace sources with distance larger than the limit set by the maxdistance directive with a newly resolved address of the hostname. --- doc/chrony.conf.adoc | 9 +++++---- sources.c | 8 +++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/doc/chrony.conf.adoc b/doc/chrony.conf.adoc index 8cca026c..55d20caf 100644 --- a/doc/chrony.conf.adoc +++ b/doc/chrony.conf.adoc @@ -204,10 +204,11 @@ the default value is 4. + On start, when the pool name is resolved, *chronyd* will add up to 16 sources, one for each resolved address. When the number of sources from which at least -one valid reply was received reaches *maxsources*, the other sources will be -removed. When a pool source is unreachable or marked as a falseticker, -*chronyd* will try to replace the source with a newly resolved address of the -pool. +one valid reply was received reaches the number specified by the *maxsources* +option, the other sources will be removed. When a pool source is unreachable, +marked as a falseticker, or has a distance larger than the limit set by the +<> directive, *chronyd* will try to replace the +source with a newly resolved address from the pool. + An example of the *pool* directive is + diff --git a/sources.c b/sources.c index 04bd36bc..28fc16b1 100644 --- a/sources.c +++ b/sources.c @@ -429,9 +429,11 @@ SRC_UpdateReachability(SRC_Instance inst, int reachable) REF_SetUnsynchronised(); } - /* Try to replace NTP sources that are unreachable or falsetickers */ - if (inst->type == SRC_NTP && (inst->status == SRC_FALSETICKER || - (!inst->reachability && inst->reachability_size == SOURCE_REACH_BITS))) { + /* Try to replace NTP sources that are unreachable, falsetickers, or + have root distance larger than the allowed maximum */ + if (inst->type == SRC_NTP && + ((!inst->reachability && inst->reachability_size == SOURCE_REACH_BITS) || + inst->status == SRC_FALSETICKER || inst->status == SRC_BAD_DISTANCE)) { NSR_HandleBadSource(inst->ip_addr); } } -- 2.47.2