sources: add function to modify selection options
Add a function to add new selection options or remove existing options specified in the configuration for both NTP sources and reference clocks. Provide a pair of IP address and reference ID to identify the source depending on the type. Find the source directly in the array of sources instead of going through the NSR hashtable for NTP sources to not complicate it unnecessarily.
This commit is contained in:
parent
19f2ab9e09
commit
3877734814
2 changed files with 44 additions and 0 deletions
40
sources.c
40
sources.c
|
@ -1598,6 +1598,46 @@ SRC_ActiveSources(void)
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
||||||
|
static SRC_Instance
|
||||||
|
find_source(IPAddr *ip, uint32_t ref_id)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < n_sources; i++) {
|
||||||
|
if ((ip->family != IPADDR_UNSPEC && sources[i]->type == SRC_NTP &&
|
||||||
|
UTI_CompareIPs(ip, sources[i]->ip_addr, NULL) == 0) ||
|
||||||
|
(ip->family == IPADDR_UNSPEC && sources[i]->type == SRC_REFCLOCK &&
|
||||||
|
ref_id == sources[i]->ref_id))
|
||||||
|
return sources[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ================================================== */
|
||||||
|
|
||||||
|
int
|
||||||
|
SRC_ModifySelectOptions(IPAddr *ip, uint32_t ref_id, int options, int mask)
|
||||||
|
{
|
||||||
|
SRC_Instance inst;
|
||||||
|
|
||||||
|
inst = find_source(ip, ref_id);
|
||||||
|
if (!inst)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if ((inst->conf_sel_options & mask) == options)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
inst->conf_sel_options = (inst->conf_sel_options & ~mask) | options;
|
||||||
|
LOG(LOGS_INFO, "Source %s selection options modified", source_to_string(inst));
|
||||||
|
|
||||||
|
update_sel_options();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ================================================== */
|
||||||
|
|
||||||
int
|
int
|
||||||
SRC_ReportSource(int index, RPT_SourceReport *report, struct timespec *now)
|
SRC_ReportSource(int index, RPT_SourceReport *report, struct timespec *now)
|
||||||
{
|
{
|
||||||
|
|
|
@ -131,6 +131,10 @@ extern int SRC_IsReachable(SRC_Instance inst);
|
||||||
extern int SRC_ReadNumberOfSources(void);
|
extern int SRC_ReadNumberOfSources(void);
|
||||||
extern int SRC_ActiveSources(void);
|
extern int SRC_ActiveSources(void);
|
||||||
|
|
||||||
|
/* Modify selection options of an NTP source specified by address, or
|
||||||
|
refclock specified by its reference ID */
|
||||||
|
extern int SRC_ModifySelectOptions(IPAddr *ip, uint32_t ref_id, int options, int mask);
|
||||||
|
|
||||||
extern int SRC_ReportSource(int index, RPT_SourceReport *report, struct timespec *now);
|
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_ReportSourcestats(int index, RPT_SourcestatsReport *report, struct timespec *now);
|
||||||
extern int SRC_GetSelectReport(int index, RPT_SelectReport *report);
|
extern int SRC_GetSelectReport(int index, RPT_SelectReport *report);
|
||||||
|
|
Loading…
Reference in a new issue