free(m);
}
+static void manager_report(usec_t poll_usec, double offset, double delay, double jitter, bool spike) {
+ log_info("%4llu %+10f %10f %10f%s",
+ poll_usec / USEC_PER_SEC, offset, delay, jitter, spike ? " spike" : "");
+}
+
int main(int argc, char *argv[]) {
_cleanup_manager_free_ Manager *m = NULL;
const char *server;
int r;
- if (argv[1])
- log_set_max_level(LOG_DEBUG);
-
r = manager_new(&m);
if (r < 0)
goto out;
if (r < 0)
goto out;
+ if (argv[1])
+ log_set_max_level(LOG_DEBUG);
+ else
+ sntp_report_register(m->sntp, manager_report);
+
//server = "216.239.32.15"; /* time1.google.com */
//server = "192.53.103.108"; /* ntp1.ptb.de */
server = "130.102.2.123"; /* 0.au.pool.ntp.org */
} _packed_;
struct SNTPContext {
+ void (*report)(usec_t poll, double offset, double delay, double jitter, bool spike);
+
/* peer */
sd_event_source *event_receive;
char *server;
sntp->pending = true;
log_debug("Sent NTP request to: %s", sntp->server);
} else
- log_info("Sending NTP request to %s failed: %m", sntp->server);
+ log_debug("Sending NTP request to %s failed: %m", sntp->server);
/* re-arm timer with incresing timeout, in case the packets never arrive back */
if (sntp->retry_interval > 0) {
sntp->samples_jitter, spike ? " spike" : "",
sntp->poll_interval_usec / USEC_PER_SEC);
- log_info("%4llu %+10f %10f %10f%s",
- sntp->poll_interval_usec / USEC_PER_SEC, offset, delay,
- sntp->samples_jitter, spike ? " spike" : "");
+ if (sntp->report)
+ sntp->report(sntp->poll_interval_usec, offset, delay, sntp->samples_jitter, spike);
if (!spike) {
r = sntp_adjust_clock(sntp, offset, leap_sec);
return 0;
}
+void sntp_report_register(SNTPContext *sntp, void (*report)(usec_t poll_usec, double offset, double delay, double jitter, bool spike)) {
+ sntp->report = report;
+}
+
int sntp_new(SNTPContext **sntp, sd_event *e) {
_cleanup_free_ SNTPContext *c;
int r;
SNTPContext *sntp_unref(SNTPContext *sntp);
int sntp_server_connect(SNTPContext *sntp, const char *server);
void sntp_server_disconnect(SNTPContext *sntp);
+void sntp_report_register(SNTPContext *sntp, void (*report)(usec_t poll_usec, double offset, double delay, double jitter, bool spike));