]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
cmdmon: convert doffset request to float
authorMiroslav Lichvar <mlichvar@redhat.com>
Wed, 3 Mar 2021 17:18:54 +0000 (18:18 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 4 Mar 2021 16:26:00 +0000 (17:26 +0100)
candm.h
client.c
cmdmon.c
pktlength.c

diff --git a/candm.h b/candm.h
index acc6cdfdec883ae8c1a699c6dc017487bc2051b4..52edf294f1c18680a4860123c639f0de3ec007e8 100644 (file)
--- a/candm.h
+++ b/candm.h
 #define REQ_CLIENT_ACCESSES_BY_INDEX3 68
 #define REQ_SELECT_DATA 69
 #define REQ_RELOAD_SOURCES 70
-#define N_REQUEST_TYPES 71
+#define REQ_DOFFSET2 71
+#define N_REQUEST_TYPES 72
 
 /* Structure used to exchange timespecs independent of time_t size */
 typedef struct {
@@ -308,8 +309,7 @@ typedef struct {
 } REQ_Dfreq;
 
 typedef struct {
-  int32_t sec;
-  int32_t usec;
+  Float doffset;
   int32_t EOR;
 } REQ_Doffset;
 
@@ -404,7 +404,7 @@ typedef struct {
    domain socket.
 
    Version 6 (no authentication) : changed format of client accesses by index
-   (using new request/reply types) and manual timestamp, added new fields and
+   (two times), delta offset, and manual timestamp, added new fields and
    flags to NTP source request and report, made length of manual list constant,
    added new commands: authdata, ntpdata, onoffline, refresh, reset,
    selectdata, serverstats, shutdown, sourcename
index 400ec1b9c0c7d38a35b55b263c094955275d690b..b5f0b54a6a8c49cb3b9d673052dcf8b6e8155c80 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1008,19 +1008,16 @@ process_cmd_dfreq(CMD_Request *msg, char *line)
 static int
 process_cmd_doffset(CMD_Request *msg, char *line)
 {
-  struct timeval tv;
   double doffset;
 
-  msg->command = htons(REQ_DOFFSET);
+  msg->command = htons(REQ_DOFFSET2);
 
   if (sscanf(line, "%lf", &doffset) != 1) {
     LOG(LOGS_ERR, "Invalid value");
     return 0;
   }
 
-  UTI_DoubleToTimeval(doffset, &tv);
-  msg->data.doffset.sec = htonl(tv.tv_sec);
-  msg->data.doffset.usec = htonl(tv.tv_usec);
+  msg->data.doffset.doffset = UTI_FloatHostToNetwork(doffset);
   return 1;
 }
 
index b85bae8ecf55e5220c976a1f82a4b0a00165315f..fb0280d8dc178c33a6891ac285da83c7672538e8 100644 (file)
--- a/cmdmon.c
+++ b/cmdmon.c
@@ -143,6 +143,7 @@ static const char permissions[] = {
   PERMIT_AUTH, /* CLIENT_ACCESSES_BY_INDEX3 */
   PERMIT_AUTH, /* SELECT_DATA */
   PERMIT_AUTH, /* RELOAD_SOURCES */
+  PERMIT_AUTH, /* DOFFSET2 */
 };
 
 /* ================================================== */
@@ -856,13 +857,10 @@ handle_dfreq(CMD_Request *rx_message, CMD_Reply *tx_message)
 static void
 handle_doffset(CMD_Request *rx_message, CMD_Reply *tx_message)
 {
-  long sec, usec;
   double doffset;
-  sec = (int32_t)ntohl(rx_message->data.doffset.sec);
-  usec = (int32_t)ntohl(rx_message->data.doffset.usec);
-  doffset = (double) sec + 1.0e-6 * (double) usec;
-  LOG(LOGS_INFO, "Accumulated delta offset of %.6f seconds", doffset);
+  doffset = UTI_FloatNetworkToHost(rx_message->data.doffset.doffset);
   LCL_AccumulateOffset(doffset, 0.0);
+  LOG(LOGS_INFO, "Accumulated delta offset of %.6f seconds", doffset);
 }
 
 /* ================================================== */
@@ -1637,7 +1635,7 @@ read_from_cmd_socket(int sock_fd, int event, void *anything)
           handle_dfreq(&rx_message, &tx_message);
           break;
 
-        case REQ_DOFFSET:
+        case REQ_DOFFSET2:
           handle_doffset(&rx_message, &tx_message);
           break;
 
index 25476898d1c9db7ef26e07f421994cd02d1c92ec..1e318d60a43c02388587bcb9a087aed696c32608 100644 (file)
@@ -87,7 +87,7 @@ static const struct request_length request_lengths[] = {
   REQ_LENGTH_ENTRY(del_source, null),           /* DEL_SOURCE */
   REQ_LENGTH_ENTRY(null, null),                 /* WRITERTC */
   REQ_LENGTH_ENTRY(dfreq, null),                /* DFREQ */
-  REQ_LENGTH_ENTRY(doffset, null),              /* DOFFSET */
+  { 0, 0 },                                     /* DOFFSET - not supported */
   REQ_LENGTH_ENTRY(null, tracking),             /* TRACKING */
   REQ_LENGTH_ENTRY(sourcestats, sourcestats),   /* SOURCESTATS */
   REQ_LENGTH_ENTRY(null, rtc),                  /* RTCREPORT */
@@ -128,6 +128,7 @@ static const struct request_length request_lengths[] = {
                    client_accesses_by_index),   /* CLIENT_ACCESSES_BY_INDEX3 */
   REQ_LENGTH_ENTRY(select_data, select_data),   /* SELECT_DATA */
   REQ_LENGTH_ENTRY(null, null),                 /* RELOAD_SOURCES */
+  REQ_LENGTH_ENTRY(doffset, null),              /* DOFFSET2 */
 };
 
 static const uint16_t reply_lengths[] = {