ntp: set maximum number of iburst samples to size of reach register
Explicitly set the number of iburst samples to the size of the register to make sure there are at least 7 reachability updates and the initstepslew mode can be ended.
This commit is contained in:
parent
7fda9c6723
commit
70928dba52
3 changed files with 12 additions and 8 deletions
|
@ -186,6 +186,10 @@ struct NCR_Instance_Record {
|
|||
a reply to the previous probe */
|
||||
#define BURST_TIMEOUT 8.0
|
||||
|
||||
/* Number of samples in initial burst */
|
||||
#define IBURST_GOOD_SAMPLES 4
|
||||
#define IBURST_TOTAL_SAMPLES SOURCE_REACH_BITS
|
||||
|
||||
/* Time to wait after sending echo to 'warm up' link */
|
||||
#define WARM_UP_DELAY 4.0
|
||||
|
||||
|
@ -345,7 +349,7 @@ NCR_GetInstance(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourcePar
|
|||
}
|
||||
|
||||
if (params->iburst) {
|
||||
NCR_InitiateSampleBurst(result, 4, 8);
|
||||
NCR_InitiateSampleBurst(result, IBURST_GOOD_SAMPLES, IBURST_TOTAL_SAMPLES);
|
||||
}
|
||||
|
||||
result->auto_offline = params->auto_offline;
|
||||
|
|
11
sources.c
11
sources.c
|
@ -135,9 +135,6 @@ static int selected_source_index; /* Which source index is currently
|
|||
selected (set to INVALID_SOURCE
|
||||
if no current valid reference) */
|
||||
|
||||
/* Keep reachability status for last 8 samples */
|
||||
#define REACH_BITS 8
|
||||
|
||||
/* Score needed to replace the currently selected source */
|
||||
#define SCORE_LIMIT 10.0
|
||||
|
||||
|
@ -354,9 +351,9 @@ SRC_UpdateReachability(SRC_Instance inst, int reachable)
|
|||
{
|
||||
inst->reachability <<= 1;
|
||||
inst->reachability |= !!reachable;
|
||||
inst->reachability &= ~(-1 << REACH_BITS);
|
||||
inst->reachability &= ~(-1 << SOURCE_REACH_BITS);
|
||||
|
||||
if (inst->reachability_size < REACH_BITS)
|
||||
if (inst->reachability_size < SOURCE_REACH_BITS)
|
||||
inst->reachability_size++;
|
||||
|
||||
if (!reachable && inst->index == selected_source_index) {
|
||||
|
@ -366,7 +363,7 @@ SRC_UpdateReachability(SRC_Instance inst, int reachable)
|
|||
|
||||
/* End special reference mode on last reachability update from iburst */
|
||||
if (REF_GetMode() != REF_ModeNormal &&
|
||||
inst->reachability_size >= REACH_BITS - 1) {
|
||||
inst->reachability_size >= SOURCE_REACH_BITS - 1) {
|
||||
REF_SetUnsynchronised();
|
||||
}
|
||||
}
|
||||
|
@ -458,7 +455,7 @@ combine_sources(int n_sel_sources, struct timeval *ref_time, double *offset,
|
|||
fabs(*frequency - src_frequency) >
|
||||
combine_limit * (*skew + src_skew + LCL_GetMaxClockError()))) {
|
||||
/* Use a smaller penalty in first few updates */
|
||||
sources[index]->outlier = sources[index]->reachability_size >= REACH_BITS ?
|
||||
sources[index]->outlier = sources[index]->reachability_size >= SOURCE_REACH_BITS ?
|
||||
OUTLIER_PENALTY : 1;
|
||||
} else if (sources[index]->outlier) {
|
||||
sources[index]->outlier--;
|
||||
|
|
|
@ -34,6 +34,9 @@
|
|||
#include "ntp.h"
|
||||
#include "reports.h"
|
||||
|
||||
/* Size of the source reachability register */
|
||||
#define SOURCE_REACH_BITS 8
|
||||
|
||||
/* This datatype is used to hold information about sources. The
|
||||
instance must be passed when calling many of the interface
|
||||
functions */
|
||||
|
|
Loading…
Reference in a new issue