From: Miroslav Lichvar Date: Thu, 22 Feb 2018 16:30:23 +0000 (+0100) Subject: sources: include maxclockerror in source selection X-Git-Tag: 3.3-pre1~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5308e0a25f9efdf01ead0b77e769bbb494661cd0;p=thirdparty%2Fchrony.git sources: include maxclockerror in source selection In the source selection algorithm, include extra dispersion due to maxclockerror in the root distance of sources that don't have new samples (the last sample is older than span of all samples) to not prefer unreachable sources with a short distance and small skew over reachable sources for too long, and also to decrease their chances of becoming falsetickers. --- diff --git a/sources.c b/sources.c index 67b61e73..8aaa4a6f 100644 --- a/sources.c +++ b/sources.c @@ -665,6 +665,16 @@ SRC_SelectSource(SRC_Instance updated_inst) continue; } + /* Include extra dispersion in the root distance of sources that don't + have new samples (the last sample is older than span of all samples) */ + if (first_sample_ago < 2.0 * si->last_sample_ago) { + double extra_disp = LCL_GetMaxClockError() * + (2.0 * si->last_sample_ago - first_sample_ago); + si->root_distance += extra_disp; + si->lo_limit -= extra_disp; + si->hi_limit += extra_disp; + } + /* Require the root distance to be below the allowed maximum */ if (si->root_distance > max_distance) { sources[i]->status = SRC_BAD_DISTANCE;