During the configuration rework, the announce span was wrongly converted
into a hard coded macro.  In addition, the announceReceiptTimeout option
inadvertently became non-zero for the UDS port.  As a result, the UDS port
sets a useless announce message timer, causing the code to close and reopen
the UDS port every few seconds.

This bug has an interesting history.  It was first reported and fixed in
commit f36af8e0 ("uds: disable the accidentally enabled announce timer.").

That very fix was wrongly removed in commit 54f45063 ("port: change
'announce_span' into a macro.").  Because of various code changes, this
bad commit cannot be simply reverted now.

This patch re-introduces the 'announce_span' variable and clears both it
and 'announceReceiptTimeout' for the UDS port, effectively disabling the
announce message timer.

Signed-off-by: Richard Cochran <richardcoch...@gmail.com>
---
 clock.c | 4 ++++
 port.c  | 4 +++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/clock.c b/clock.c
index c59046a..0107ef2 100644
--- a/clock.c
+++ b/clock.c
@@ -967,6 +967,10 @@ struct clock *clock_create(enum clock_type type, struct 
config *config,
        snprintf(udsif->name, sizeof(udsif->name), "%s",
                 config_get_string(config, NULL, "uds_address"));
        if (config_set_section_int(config, udsif->name,
+                                  "announceReceiptTimeout", 0)) {
+               return NULL;
+       }
+       if (config_set_section_int(config, udsif->name,
                                    "delay_mechanism", DM_AUTO)) {
                return NULL;
        }
diff --git a/port.c b/port.c
index 161157c..9f07cea 100644
--- a/port.c
+++ b/port.c
@@ -103,6 +103,7 @@ struct port {
        TimeInterval        peerMeanPathDelay;
        Integer8            logAnnounceInterval;
        UInteger8           announceReceiptTimeout;
+       int                 announce_span;
        UInteger8           syncReceiptTimeout;
        UInteger8           transportSpecific;
        Integer8            logSyncInterval;
@@ -958,7 +959,7 @@ static int port_set_announce_tmo(struct port *p)
 {
        return set_tmo_random(p->fda.fd[FD_ANNOUNCE_TIMER],
                              p->announceReceiptTimeout,
-                             ANNOUNCE_SPAN, p->logAnnounceInterval);
+                             p->announce_span, p->logAnnounceInterval);
 }
 
 static int port_set_delay_tmo(struct port *p)
@@ -2565,6 +2566,7 @@ struct port *port_open(int phc_index,
        p->name = interface->name;
        p->asymmetry = config_get_int(cfg, p->name, "delayAsymmetry");
        p->asymmetry <<= 16;
+       p->announce_span = transport == TRANS_UDS ? 0 : ANNOUNCE_SPAN;
        p->follow_up_info = config_get_int(cfg, p->name, "follow_up_info");
        p->freq_est_interval = config_get_int(cfg, p->name, 
"freq_est_interval");
        p->hybrid_e2e = config_get_int(cfg, p->name, "hybrid_e2e");
-- 
2.1.4


------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to