]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
ntp: smear leap second with slewing mode and smoothing
authorMiroslav Lichvar <mlichvar@redhat.com>
Wed, 1 Apr 2015 15:33:39 +0000 (17:33 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Tue, 7 Apr 2015 08:45:32 +0000 (10:45 +0200)
Suppress leap second in packets sent to clients when smoothing and leap
second slew mode are enabled.

ntp_core.c
reference.c
reference.h

index a24b516641306ac8b8489c9f97c695197985f76d..2e8e5c6331b1d327c2ea1b71df6fe1a93c50520e 100644 (file)
@@ -786,6 +786,11 @@ transmit_packet(NTP_Mode my_mode, /* The mode this machine wants to be */
   if (SMT_IsEnabled() && (my_mode == MODE_SERVER || my_mode == MODE_BROADCAST)) {
     smooth_time = 1;
     smooth_offset = SMT_GetOffset(&local_transmit);
+
+    /* Suppress leap second when smoothing and slew mode are enabled */
+    if (REF_GetLeapMode() == REF_LeapModeSlew &&
+        (leap_status == LEAP_InsertSecond || leap_status == LEAP_DeleteSecond))
+      leap_status = LEAP_Normal;
   } else {
     smooth_time = 0;
     smooth_offset = 0.0;
index 2b1bfea7f836cb30aeb3be01aaf52a6b63981451..a8492bc6c4e3d002005aa83d5bb874c58688ab55 100644 (file)
@@ -328,6 +328,14 @@ REF_SetModeEndHandler(REF_ModeEndHandler handler)
 
 /* ================================================== */
 
+REF_LeapMode
+REF_GetLeapMode(void)
+{
+  return leap_mode;
+}
+
+/* ================================================== */
+
 static double
 Sqr(double x)
 {
index 2634c772a24bc947d7adb814634bf5f8c750f785..6ffc97d319cbdc0889c36740a8e1d0d1d488b603 100644 (file)
@@ -69,6 +69,9 @@ typedef void (*REF_ModeEndHandler)(int result);
 /* Set the handler for being notified of mode ending */
 extern void REF_SetModeEndHandler(REF_ModeEndHandler handler);
 
+/* Get leap second handling mode */
+extern REF_LeapMode REF_GetLeapMode(void);
+
 /* Function which takes a local cooked time and returns the estimated
    time of the reference.  It also returns the other parameters
    required for forming the outgoing NTP packet.