Add refclock option for delay
This is useful when refclocks don't agree on time, increasing the delay will widen the interval used in the source selection algorithm.
This commit is contained in:
parent
48b6c2aa6b
commit
5b4e07d658
3 changed files with 10 additions and 2 deletions
7
conf.c
7
conf.c
|
@ -431,7 +431,7 @@ parse_refclock(const char *line)
|
||||||
{
|
{
|
||||||
int i, n, poll, dpoll, filter_length;
|
int i, n, poll, dpoll, filter_length;
|
||||||
unsigned long ref_id;
|
unsigned long ref_id;
|
||||||
double offset;
|
double offset, delay;
|
||||||
const char *tmp;
|
const char *tmp;
|
||||||
char name[5], cmd[10 + 1], *param;
|
char name[5], cmd[10 + 1], *param;
|
||||||
unsigned char ref[5];
|
unsigned char ref[5];
|
||||||
|
@ -444,6 +444,7 @@ parse_refclock(const char *line)
|
||||||
dpoll = 0;
|
dpoll = 0;
|
||||||
filter_length = 15;
|
filter_length = 15;
|
||||||
offset = 0.0;
|
offset = 0.0;
|
||||||
|
delay = 1e-9;
|
||||||
ref_id = 0;
|
ref_id = 0;
|
||||||
|
|
||||||
if (sscanf(line, "%4s%n", name, &n) != 1) {
|
if (sscanf(line, "%4s%n", name, &n) != 1) {
|
||||||
|
@ -488,6 +489,9 @@ parse_refclock(const char *line)
|
||||||
} else if (!strncasecmp(cmd, "offset", 6)) {
|
} else if (!strncasecmp(cmd, "offset", 6)) {
|
||||||
if (sscanf(line, "%lf%n", &offset, &n) != 1)
|
if (sscanf(line, "%lf%n", &offset, &n) != 1)
|
||||||
break;
|
break;
|
||||||
|
} else if (!strncasecmp(cmd, "delay", 5)) {
|
||||||
|
if (sscanf(line, "%lf%n", &delay, &n) != 1)
|
||||||
|
break;
|
||||||
} else {
|
} else {
|
||||||
LOG(LOGS_WARN, LOGF_Configure, "Unknown refclock parameter %s at line %d", cmd, line_number);
|
LOG(LOGS_WARN, LOGF_Configure, "Unknown refclock parameter %s at line %d", cmd, line_number);
|
||||||
break;
|
break;
|
||||||
|
@ -501,6 +505,7 @@ parse_refclock(const char *line)
|
||||||
refclock_sources[i].poll = poll;
|
refclock_sources[i].poll = poll;
|
||||||
refclock_sources[i].filter_length = filter_length;
|
refclock_sources[i].filter_length = filter_length;
|
||||||
refclock_sources[i].offset = offset;
|
refclock_sources[i].offset = offset;
|
||||||
|
refclock_sources[i].delay = delay;
|
||||||
refclock_sources[i].ref_id = ref_id;
|
refclock_sources[i].ref_id = ref_id;
|
||||||
|
|
||||||
n_refclock_sources++;
|
n_refclock_sources++;
|
||||||
|
|
|
@ -62,6 +62,7 @@ struct RCL_Instance_Record {
|
||||||
struct MedianFilter filter;
|
struct MedianFilter filter;
|
||||||
unsigned long ref_id;
|
unsigned long ref_id;
|
||||||
double offset;
|
double offset;
|
||||||
|
double delay;
|
||||||
SCH_TimeoutID timeout_id;
|
SCH_TimeoutID timeout_id;
|
||||||
SRC_Instance source;
|
SRC_Instance source;
|
||||||
};
|
};
|
||||||
|
@ -132,6 +133,7 @@ RCL_AddRefclock(RefclockParameters *params)
|
||||||
inst->driver_polled = 0;
|
inst->driver_polled = 0;
|
||||||
inst->leap_status = 0;
|
inst->leap_status = 0;
|
||||||
inst->offset = params->offset;
|
inst->offset = params->offset;
|
||||||
|
inst->delay = params->delay;
|
||||||
inst->timeout_id = -1;
|
inst->timeout_id = -1;
|
||||||
inst->source = NULL;
|
inst->source = NULL;
|
||||||
|
|
||||||
|
@ -269,7 +271,7 @@ poll_timeout(void *arg)
|
||||||
#endif
|
#endif
|
||||||
SRC_SetReachable(inst->source);
|
SRC_SetReachable(inst->source);
|
||||||
SRC_AccumulateSample(inst->source, &sample_time, offset,
|
SRC_AccumulateSample(inst->source, &sample_time, offset,
|
||||||
1e-9, dispersion, 1e-9, dispersion, 0, inst->leap_status);
|
inst->delay, dispersion, inst->delay, dispersion, 0, inst->leap_status);
|
||||||
inst->missed_samples = 0;
|
inst->missed_samples = 0;
|
||||||
} else {
|
} else {
|
||||||
inst->missed_samples++;
|
inst->missed_samples++;
|
||||||
|
|
|
@ -39,6 +39,7 @@ typedef struct {
|
||||||
int filter_length;
|
int filter_length;
|
||||||
unsigned long ref_id;
|
unsigned long ref_id;
|
||||||
double offset;
|
double offset;
|
||||||
|
double delay;
|
||||||
} RefclockParameters;
|
} RefclockParameters;
|
||||||
|
|
||||||
typedef struct RCL_Instance_Record *RCL_Instance;
|
typedef struct RCL_Instance_Record *RCL_Instance;
|
||||||
|
|
Loading…
Reference in a new issue