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