Remove stratum from the NTP sample and update it together with the leap status. This enables a faster update when samples are dropped by the NTP filters.
140 lines
5.2 KiB
C
140 lines
5.2 KiB
C
/*
|
|
chronyd/chronyc - Programs for keeping computer clocks accurate.
|
|
|
|
**********************************************************************
|
|
* Copyright (C) Richard P. Curnow 1997-2002
|
|
* Copyright (C) Miroslav Lichvar 2014
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
**********************************************************************
|
|
|
|
=======================================================================
|
|
|
|
This is the header for the module that manages the collection of all
|
|
sources that we are making measurements from. This include all NTP
|
|
servers & peers, locally connected reference sources, eye/wristwatch
|
|
drivers etc */
|
|
|
|
#ifndef GOT_SOURCES_H
|
|
#define GOT_SOURCES_H
|
|
|
|
#include "sysincl.h"
|
|
|
|
#include "ntp.h"
|
|
#include "reports.h"
|
|
#include "sourcestats.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 */
|
|
|
|
typedef struct SRC_Instance_Record *SRC_Instance;
|
|
|
|
/* Initialisation function */
|
|
extern void SRC_Initialise(void);
|
|
|
|
/* Finalisation function */
|
|
extern void SRC_Finalise(void);
|
|
|
|
/* Modes for selecting NTP sources based on their authentication status */
|
|
typedef enum {
|
|
SRC_AUTHSELECT_IGNORE,
|
|
SRC_AUTHSELECT_MIX,
|
|
SRC_AUTHSELECT_PREFER,
|
|
SRC_AUTHSELECT_REQUIRE,
|
|
} SRC_AuthSelectMode;
|
|
|
|
typedef enum {
|
|
SRC_NTP, /* NTP client/peer */
|
|
SRC_REFCLOCK /* Rerefence clock */
|
|
} SRC_Type;
|
|
|
|
/* Function to create a new instance. This would be called by one of
|
|
the individual source-type instance creation routines. */
|
|
|
|
extern SRC_Instance SRC_CreateNewInstance(uint32_t ref_id, SRC_Type type, int authenticated,
|
|
int sel_options, IPAddr *addr, int min_samples,
|
|
int max_samples, double min_delay, double asymmetry);
|
|
|
|
/* Function to get rid of a source when it is being unconfigured.
|
|
This may cause the current reference source to be reselected, if this
|
|
was the reference source or contributed significantly to a
|
|
falseticker decision. */
|
|
|
|
extern void SRC_DestroyInstance(SRC_Instance instance);
|
|
|
|
/* Function to reset a source */
|
|
extern void SRC_ResetInstance(SRC_Instance instance);
|
|
|
|
/* Function to change the sources's reference ID and IP address */
|
|
extern void SRC_SetRefid(SRC_Instance instance, uint32_t ref_id, IPAddr *addr);
|
|
|
|
/* Function to get access to the sourcestats instance */
|
|
extern SST_Stats SRC_GetSourcestats(SRC_Instance instance);
|
|
|
|
/* Function to update the stratum and leap status of the source */
|
|
extern void SRC_UpdateStatus(SRC_Instance instance, int stratum, NTP_Leap leap);
|
|
|
|
/* Function to accumulate a new sample from the source */
|
|
extern void SRC_AccumulateSample(SRC_Instance instance, NTP_Sample *sample);
|
|
|
|
/* This routine sets the source as receiving reachability updates */
|
|
extern void SRC_SetActive(SRC_Instance inst);
|
|
|
|
/* This routine sets the source as not receiving reachability updates */
|
|
extern void SRC_UnsetActive(SRC_Instance inst);
|
|
|
|
/* This routine updates the reachability register */
|
|
extern void SRC_UpdateReachability(SRC_Instance inst, int reachable);
|
|
|
|
/* This routine marks the source unreachable */
|
|
extern void SRC_ResetReachability(SRC_Instance inst);
|
|
|
|
/* This routine is used to select the best source from amongst those
|
|
we currently have valid data on, and use it as the tracking base
|
|
for the local time. Updates are made to the local reference only
|
|
when the selected source was updated (set as updated_inst) since
|
|
the last reference update. This avoids updating the frequency
|
|
tracking for every sample from other sources - only the ones from
|
|
the selected reference make a difference. */
|
|
extern void SRC_SelectSource(SRC_Instance updated_inst);
|
|
|
|
/* Force reselecting the best source */
|
|
extern void SRC_ReselectSource(void);
|
|
|
|
/* Set reselect distance */
|
|
extern void SRC_SetReselectDistance(double distance);
|
|
|
|
extern void SRC_DumpSources(void);
|
|
extern void SRC_ReloadSources(void);
|
|
extern void SRC_RemoveDumpFiles(void);
|
|
|
|
extern void SRC_ResetSources(void);
|
|
|
|
extern int SRC_IsSyncPeer(SRC_Instance inst);
|
|
extern int SRC_IsReachable(SRC_Instance inst);
|
|
extern int SRC_ReadNumberOfSources(void);
|
|
extern int SRC_ActiveSources(void);
|
|
|
|
extern int SRC_ReportSource(int index, RPT_SourceReport *report, struct timespec *now);
|
|
extern int SRC_ReportSourcestats(int index, RPT_SourcestatsReport *report, struct timespec *now);
|
|
extern int SRC_GetSelectReport(int index, RPT_SelectReport *report);
|
|
|
|
extern SRC_Type SRC_GetType(int index);
|
|
|
|
#endif /* GOT_SOURCES_H */
|