Add a separate function for the update of the grandmaster's state after
a leap second to avoid making modifications in clock_time_properties()
and call it on each master announce tx timeout.
Suggested-by: Richard Cochran
Signed-off-by: Miroslav Lichvar
---
clock.c | 8 ++--
clock.h | 7 +++
port.c | 1 +
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/clock.c b/clock.c
index 61c9563..bbfd1a8 100644
--- a/clock.c
+++ b/clock.c
@@ -1897,7 +1897,7 @@ void clock_sync_interval(struct clock *c, int n)
servo_sync_interval(c->servo, n < 0 ? 1.0 / (1 << -n) : 1 << n);
}
-static void clock_update_utc_offset(struct clock *c)
+void clock_update_leap_status(struct clock *c)
{
struct timespec ts;
int leap;
@@ -1932,11 +1932,7 @@ static void clock_update_utc_offset(struct clock *c)
struct timePropertiesDS clock_time_properties(struct clock *c)
{
- struct timePropertiesDS tds;
-
- clock_update_utc_offset(c);
-
- tds = c->tds;
+ struct timePropertiesDS tds = c->tds;
switch (c->local_sync_uncertain) {
case SYNC_UNCERTAIN_DONTCARE:
diff --git a/clock.h b/clock.h
index e2a3e36..0534f21 100644
--- a/clock.h
+++ b/clock.h
@@ -339,6 +339,13 @@ enum servo_state clock_synchronize(struct clock *c, tmv_t
ingress,
*/
void clock_sync_interval(struct clock *c, int n);
+/**
+ * Update the clock leap bits and UTC offset after a leap second
+ * if operating as a grandmaster.
+ * @param c The clock instance.
+ */
+void clock_update_leap_status(struct clock *c);
+
/**
* Obtain a clock's time properties data set.
* @param c The clock instance.
diff --git a/port.c b/port.c
index d5119b7..6e6b0aa 100644
--- a/port.c
+++ b/port.c
@@ -2705,6 +2705,7 @@ static enum fsm_event bc_event(struct port *p, int
fd_index)
case FD_MANNO_TIMER:
pr_debug("%s: master tx announce timeout", p->log_name);
port_set_manno_tmo(p);
+ clock_update_leap_status(p->clock);
return port_tx_announce(p, NULL) ? EV_FAULT_DETECTED : EV_NONE;
case FD_SYNC_TX_TIMER:
--
2.26.3
___
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel