summaryrefslogtreecommitdiff
path: root/src/timesync/timesyncd.c
diff options
context:
space:
mode:
authorKay Sievers <kay@vrfy.org>2014-05-03 15:03:27 +0200
committerKay Sievers <kay@vrfy.org>2014-05-03 15:09:33 +0200
commitef6191945e8bcf113fef120ec425f35643754eca (patch)
treec881792c519039bedf4c67348a64991ce9355c98 /src/timesync/timesyncd.c
parent8a474b0c04a5a3608dda53edc1ddaa932ba177bf (diff)
timesyncd: log drift correction
Diffstat (limited to 'src/timesync/timesyncd.c')
-rw-r--r--src/timesync/timesyncd.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
index f6c96d3d16..df41f262b2 100644
--- a/src/timesync/timesyncd.c
+++ b/src/timesync/timesyncd.c
@@ -136,6 +136,7 @@ struct Manager {
/* last change */
bool jumped;
+ int drift_ppm;
/* watch for time changes */
sd_event_source *event_clock_watch;
@@ -284,7 +285,6 @@ static int sntp_clock_watch(sd_event_source *source, int fd, uint32_t revents, v
static int sntp_clock_watch_setup(Manager *m) {
struct itimerspec its = { .it_value.tv_sec = TIME_T_MAX };
_cleanup_close_ int fd = -1;
- sd_event *e;
sd_event_source *source;
int r;
@@ -302,8 +302,7 @@ static int sntp_clock_watch_setup(Manager *m) {
return -errno;
}
- e = sd_event_source_get_event(m->event_receive);
- r = sd_event_add_io(e, &source, fd, EPOLLIN, sntp_clock_watch, m);
+ r = sd_event_add_io(m->event, &source, fd, EPOLLIN, sntp_clock_watch, m);
if (r < 0) {
log_error("Failed to create clock watch event source: %s", strerror(-r));
return r;
@@ -348,7 +347,7 @@ static int sntp_adjust_clock(Manager *m, double offset, int leap_sec) {
/* the kernel expects -0.3s as {-1, 7000.000.000} */
if (tmx.time.tv_usec < 0) {
- tmx.time.tv_usec -= 1;
+ tmx.time.tv_sec -= 1;
tmx.time.tv_usec += NSEC_PER_SEC;
}
@@ -369,6 +368,8 @@ static int sntp_adjust_clock(Manager *m, double offset, int leap_sec) {
if (r < 0)
return r;
+ m->drift_ppm = tmx.freq / 65536;
+
log_debug(" status : %04i %s\n"
" time now : %li.%03lli\n"
" constant : %li\n"
@@ -378,7 +379,7 @@ static int sntp_adjust_clock(Manager *m, double offset, int leap_sec) {
tmx.time.tv_sec, tmx.time.tv_usec / NSEC_PER_MSEC,
tmx.constant,
(double)tmx.offset / NSEC_PER_SEC,
- tmx.freq, abs(tmx.freq) / 65536);
+ tmx.freq, m->drift_ppm);
return 0;
}
@@ -624,15 +625,15 @@ static int sntp_receive_response(sd_event_source *source, int fd, uint32_t reven
m->samples_jitter, spike ? " spike" : "",
m->poll_interval_usec / USEC_PER_SEC);
- log_info("%s: interval/delta/delay/jitter %llu/%+.3f/%.3f/%.3f%s",
- m->server, m->poll_interval_usec / USEC_PER_SEC, offset, delay, m->samples_jitter, spike ? " (ignored)" : "");
-
if (!spike) {
r = sntp_adjust_clock(m, offset, leap_sec);
if (r < 0)
log_error("Failed to call clock_adjtime(): %m");
}
+ log_info("%s: interval/delta/delay/jitter/drift %llus/%+.3fs/%.3fs/%.3fs/%uppm%s",
+ m->server, m->poll_interval_usec / USEC_PER_SEC, offset, delay, m->samples_jitter, m->drift_ppm,
+ spike ? " (ignored)" : "");
r = sntp_arm_timer(m, m->poll_interval_usec);
if (r < 0)
return r;
@@ -770,15 +771,13 @@ int main(int argc, char *argv[]) {
server = "216.239.32.15"; /* time1.google.com */
- sd_notifyf(false,
- "READY=1");
+ sd_notify(false, "READY=1");
r = sntp_server_connect(m, server);
if (r < 0)
goto out;
- sd_notifyf(false,
- "STATUS=Using time server: %s", server);
+ sd_notifyf(false, "STATUS=Using Time Server: %s", server);
r = sd_event_loop(m->event);
if (r < 0)