From d4da90228a3f5c88ee8dca60d6f40fcf9c373058 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 30 Nov 2015 20:02:23 +0100 Subject: [PATCH] ntp plugin: Unify casting to gauge_t. Also add note about STA_NANO. Issue: #1314. --- src/ntpd.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/ntpd.c b/src/ntpd.c index 8e00734c..f192a826 100644 --- a/src/ntpd.c +++ b/src/ntpd.c @@ -304,7 +304,7 @@ static int ntpd_config (const char *key, const char *value) return (0); } -static void ntpd_submit (char *type, char *type_inst, double value) +static void ntpd_submit (char *type, char *type_inst, gauge_t value) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; @@ -326,7 +326,7 @@ static void ntpd_submit (char *type, char *type_inst, double value) * sets the LSB based on whether the peer was reachable. If the LSB is zero, * the values are out of date. */ static void ntpd_submit_reach (char *type, char *type_inst, uint8_t reach, - double value) + gauge_t value) { if (!(reach & 1)) value = NAN; @@ -899,9 +899,18 @@ static int ntpd_read (void) int ps_num; int ps_size; + gauge_t offset_loop; + gauge_t freq_loop; + gauge_t offset_error; + int status; int i; - double tscale = 1e-6; + + /* On Linux, if the STA_NANO bit is set in ik->status, then ik->offset + * is is nanoseconds, otherwise it's microseconds. + * TODO(octo): STA_NANO is defined in the Linux specific header. */ + double scale_loop = 1e-6; + double scale_error = 1e-6; ik = NULL; ik_num = 0; @@ -925,18 +934,19 @@ static int ntpd_read (void) } /* kerninfo -> estimated error */ + offset_loop = scale_loop * ((gauge_t) ntohl (ik->offset)); + freq_loop = ntpd_read_fp (ik->freq); + offset_error = scale_error * ((gauge_t) ntohl (ik->esterror)); DEBUG ("info_kernel:\n" - " pll offset = %.8f\n" - " pll frequency = %.8f\n" /* drift compensation */ - " est error = %.8f\n", - (int32_t)ntohl(ik->offset) * tscale, - ntpd_read_fp (ik->freq), - (u_long)ntohl(ik->esterror) * 1e-6); - - ntpd_submit ("frequency_offset", "loop", ntpd_read_fp (ik->freq)); - ntpd_submit ("time_offset", "loop", (int32_t)ntohl(ik->offset) * tscale); - ntpd_submit ("time_offset", "error", (u_long)ntohl(ik->esterror) * 1e-6); + " pll offset = %.8g\n" + " pll frequency = %.8g\n" /* drift compensation */ + " est error = %.8g\n", + offset_loop, freq_loop, offset_error); + + ntpd_submit ("frequency_offset", "loop", freq_loop); + ntpd_submit ("time_offset", "loop", offset_loop); + ntpd_submit ("time_offset", "error", offset_error); free (ik); ik = NULL; -- 2.11.0