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

Reply via email to