Ntpd: bug and patch: not reporting lost sync

Andreas Helmcke ahe at helmcke.name
Fri May 3 13:47:51 UTC 2013


Hello,

I am trying to find a way to keep hwclock in sync with the ntp-synced system time using busysbox ntpd.
Ntpd is able to start a script after each change and every 11 minutes (parameter -S) but there seems to be no way to
find out if the time is still synchronized i.e. there is at least one valid ntp server.
The attached patch exports one more value to the script (last_update_recv_time) so that the script can at least check if
the last update is within some limit. I consider this a workaround rather than a real solution because I would expect
ntpd to set stratum to 16 when loosing contact to the upstream ntp servers but I could not find a proper way to handle this.
Anyone any suggestions?

Greetings
  Andreas


[Patch] ntpd: set additional env variable "last_update_recv_time" when running script

Signed-off-by: Andreas Helmcke <ahe at helmcke.name>
---
 networking/ntpd.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/networking/ntpd.c b/networking/ntpd.c
index 0f4319e..eec01aa 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -828,7 +828,7 @@ send_query_to_peer(peer_t *p)
 static void run_script(const char *action, double offset)
 {
 	char *argv[3];
-	char *env1, *env2, *env3, *env4;
+	char *env1, *env2, *env3, *env4, *env5;

 	if (!G.script_name)
 		return;
@@ -847,6 +847,8 @@ static void run_script(const char *action, double offset)
 	putenv(env3);
 	env4 = xasprintf("%s=%f", "offset", offset);
 	putenv(env4);
+	env5 = xasprintf("%s=%f", "last_update_recv_time", G.last_update_recv_time);
+	putenv(env5);
 	/* Other items of potential interest: selected peer,
 	 * rootdelay, reftime, rootdisp, refid, ntp_status,
 	 * last_update_offset, last_update_recv_time, discipline_jitter,
@@ -862,10 +864,12 @@ static void run_script(const char *action, double offset)
 	unsetenv("freq_drift_ppm");
 	unsetenv("poll_interval");
 	unsetenv("offset");
+	unsetenv("last_update_recv_time");
 	free(env1);
 	free(env2);
 	free(env3);
 	free(env4);
+	free(env5);

 	G.last_script_run = G.cur_time;
 }
-- 
1.8.1.2



More information about the busybox mailing list