When running with Synchronous Ethernet (SyncE), the correct clock frequency is provided by the link partner. In this case, only the offset needs correcting.
This patch provides SyncE nodes with an option for keeping the frequency correction dialed to zero. Signed-off-by: Richard Cochran <richardcoch...@gmail.com> --- clock.c | 6 ++++++ config.c | 6 ++++++ default.cfg | 1 + ds.h | 1 + gPTP.cfg | 1 + ptp4l.c | 1 + 6 files changed, 16 insertions(+) diff --git a/clock.c b/clock.c index b448b8a..db0b0da 100644 --- a/clock.c +++ b/clock.c @@ -92,6 +92,7 @@ struct clock { int last_port_number; int free_running; int freq_est_interval; + int freq_noadj; int grand_master_capable; /* for 802.1AS only */ int utc_timescale; int utc_offset_set; @@ -804,6 +805,7 @@ struct clock *clock_create(int phc_index, struct interfaces_head *ifaces, c->free_running = dds->free_running; c->freq_est_interval = dds->freq_est_interval; + c->freq_noadj = dds->freq_noadj; c->grand_master_capable = dds->grand_master_capable; c->kernel_leap = dds->kernel_leap; c->utc_offset = CURRENT_UTC_OFFSET; @@ -1393,6 +1395,10 @@ enum servo_state clock_synchronize(struct clock *c, tmv_t ingress, tmv_t origin) tsproc_set_clock_rate_ratio(c->tsproc, clock_rate_ratio(c)); + if (c->freq_noadj) { + adj = 0.0; + } + switch (state) { case SERVO_UNLOCKED: break; diff --git a/config.c b/config.c index ee0f302..c49b31a 100644 --- a/config.c +++ b/config.c @@ -347,6 +347,12 @@ static enum parser_result parse_global_setting(const char *option, cfg->dds.freq_est_interval = val; pod->freq_est_interval = val; + } else if (!strcmp(option, "freq_noadj")) { + r = get_ranged_int(value, &val, 0, 1); + if (r != PARSED_OK) + return r; + cfg->dds.freq_noadj = val; + } else if (!strcmp(option, "assume_two_step")) { r = get_ranged_int(value, &val, 0, 1); if (r != PARSED_OK) diff --git a/default.cfg b/default.cfg index b46c0f6..ade49db 100644 --- a/default.cfg +++ b/default.cfg @@ -12,6 +12,7 @@ clockAccuracy 0xFE offsetScaledLogVariance 0xFFFF free_running 0 freq_est_interval 1 +freq_noadj 0 # # Port Data Set # diff --git a/ds.h b/ds.h index 162687a..159288e 100644 --- a/ds.h +++ b/ds.h @@ -54,6 +54,7 @@ struct default_ds { struct defaultDS dds; int free_running; int freq_est_interval; /*log seconds*/ + int freq_noadj; int grand_master_capable; /*802.1AS only*/ int stats_interval; /*log seconds*/ int kernel_leap; diff --git a/gPTP.cfg b/gPTP.cfg index 34fa238..c86db6d 100644 --- a/gPTP.cfg +++ b/gPTP.cfg @@ -12,6 +12,7 @@ clockAccuracy 0xFE offsetScaledLogVariance 0xFFFF free_running 0 freq_est_interval 1 +freq_noadj 0 # # Port Data Set # diff --git a/ptp4l.c b/ptp4l.c index 61c5854..ab79098 100644 --- a/ptp4l.c +++ b/ptp4l.c @@ -54,6 +54,7 @@ static struct config cfg_settings = { }, .free_running = 0, .freq_est_interval = 1, + .freq_noadj = 0, .grand_master_capable = 1, .stats_interval = 0, .kernel_leap = 1, -- 2.1.4 ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel