diff --git a/ntp_core.c b/ntp_core.c index 44682ec..99360de 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -3024,6 +3024,16 @@ NCR_ModifyMinstratum(NCR_Instance inst, int new_min_stratum) /* ================================================== */ +void +NCR_ModifyOffset(NCR_Instance inst, double new_offset) +{ + inst->offset_correction = new_offset; + LOG(LOGS_INFO, "Source %s new offset %f", + UTI_IPToString(&inst->remote_addr.ip_addr), new_offset); +} + +/* ================================================== */ + void NCR_ModifyPolltarget(NCR_Instance inst, int new_poll_target) { diff --git a/ntp_core.h b/ntp_core.h index 5c5a614..67971ea 100644 --- a/ntp_core.h +++ b/ntp_core.h @@ -113,6 +113,8 @@ extern void NCR_ModifyMaxdelaydevratio(NCR_Instance inst, double new_max_delay_d extern void NCR_ModifyMinstratum(NCR_Instance inst, int new_min_stratum); +extern void NCR_ModifyOffset(NCR_Instance inst, double new_offset); + extern void NCR_ModifyPolltarget(NCR_Instance inst, int new_poll_target); extern void NCR_InitiateSampleBurst(NCR_Instance inst, int n_good_samples, int n_total_samples); diff --git a/ntp_sources.c b/ntp_sources.c index 590e5e0..0dfdefb 100644 --- a/ntp_sources.c +++ b/ntp_sources.c @@ -1444,6 +1444,20 @@ NSR_ModifyMinstratum(IPAddr *address, int new_min_stratum) /* ================================================== */ +int +NSR_ModifyOffset(IPAddr *address, double new_offset) +{ + int slot; + + if (!find_slot(address, &slot)) + return 0; + + NCR_ModifyOffset(get_record(slot)->data, new_offset); + return 1; +} + +/* ================================================== */ + int NSR_ModifyPolltarget(IPAddr *address, int new_poll_target) { diff --git a/ntp_sources.h b/ntp_sources.h index 79daf1d..89a322e 100644 --- a/ntp_sources.h +++ b/ntp_sources.h @@ -140,6 +140,8 @@ extern int NSR_ModifyMaxdelaydevratio(IPAddr *address, double new_max_delay_rati extern int NSR_ModifyMinstratum(IPAddr *address, int new_min_stratum); +extern int NSR_ModifyOffset(IPAddr *address, double new_offset); + extern int NSR_ModifyPolltarget(IPAddr *address, int new_poll_target); extern int NSR_InitiateSampleBurst(int n_good_samples, int n_total_samples, IPAddr *mask, IPAddr *address); diff --git a/refclock.c b/refclock.c index 44ba6d5..22d775a 100644 --- a/refclock.c +++ b/refclock.c @@ -321,6 +321,22 @@ RCL_ReportSource(RPT_SourceReport *report, struct timespec *now) } } +int +RCL_ModifyOffset(uint32_t ref_id, double offset) +{ + unsigned int i; + + for (i = 0; i < ARR_GetSize(refclocks); i++) { + RCL_Instance inst = get_refclock(i); + if (inst->ref_id == ref_id) { + inst->offset = offset; + LOG(LOGS_INFO, "Source %s new offset %f", UTI_RefidToString(ref_id), offset); + return 1; + } + } + return 0; +} + void RCL_SetDriverData(RCL_Instance instance, void *data) { diff --git a/refclock.h b/refclock.h index 7947b62..40c852d 100644 --- a/refclock.h +++ b/refclock.h @@ -68,6 +68,7 @@ extern void RCL_Finalise(void); extern int RCL_AddRefclock(RefclockParameters *params); extern void RCL_StartRefclocks(void); extern void RCL_ReportSource(RPT_SourceReport *report, struct timespec *now); +extern int RCL_ModifyOffset(uint32_t ref_id, double offset); /* functions used by drivers */ extern void RCL_SetDriverData(RCL_Instance instance, void *data); diff --git a/stubs.c b/stubs.c index 044d17e..9d0f848 100644 --- a/stubs.c +++ b/stubs.c @@ -320,6 +320,12 @@ NSR_ModifyMinstratum(IPAddr *address, int new_min_stratum) return 0; } +int +NSR_ModifyOffset(IPAddr *address, double new_offset) +{ + return 0; +} + int NSR_ModifyPolltarget(IPAddr *address, int new_poll_target) { @@ -419,6 +425,12 @@ RCL_ReportSource(RPT_SourceReport *report, struct timespec *now) memset(report, 0, sizeof (*report)); } +int +RCL_ModifyOffset(uint32_t ref_id, double offset) +{ + return 0; +} + #endif /* !FEAT_REFCLOCK */ #ifndef FEAT_SIGND