]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
conf: add nocrossts option to hwtimestamp directive
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 19 Jan 2017 15:23:35 +0000 (16:23 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Mon, 23 Jan 2017 14:58:55 +0000 (15:58 +0100)
This option disables the use of the PTP_SYS_OFFSET_PRECISE ioctl.

conf.c
conf.h
doc/chrony.conf.adoc
ntp_io_linux.c

diff --git a/conf.c b/conf.c
index d296da4231f3fdc4deeca8d799e39e09e57fe16d..5904b91135c6577ee237fc1eb223a8a8a21af38a 100644 (file)
--- a/conf.c
+++ b/conf.c
@@ -1260,6 +1260,7 @@ parse_hwtimestamp(char *line)
   iface = ARR_GetNewElement(hwts_interfaces);
   iface->name = Strdup(p);
   iface->minpoll = 0;
+  iface->nocrossts = 0;
   iface->precision = 100.0e-9;
   iface->tx_comp = 0.0;
   iface->rx_comp = 0.0;
@@ -1279,6 +1280,9 @@ parse_hwtimestamp(char *line)
     } else if (!strcasecmp(p, "txcomp")) {
       if (sscanf(line, "%lf%n", &iface->tx_comp, &n) != 1)
         break;
+    } else if (!strcasecmp(p, "nocrossts")) {
+      n = 0;
+      iface->nocrossts = 1;
     } else {
       break;
     }
diff --git a/conf.h b/conf.h
index b84d921320b7010caf452a3c2a3d9d928b5f8f73..22e654297a75b1358baa7a3583fdee7ab1343633 100644 (file)
--- a/conf.h
+++ b/conf.h
@@ -122,6 +122,7 @@ extern double CNF_GetInitStepThreshold(void);
 typedef struct {
   char *name;
   int minpoll;
+  int nocrossts;
   double precision;
   double tx_comp;
   double rx_comp;
index a0801f047364a357084db1881bb39c89f14efda8..3dc4189ec1d906b768078efdd2184d399d342366 100644 (file)
@@ -1836,6 +1836,9 @@ This option specifies the difference in seconds between the reported receive
 timestamp and the actual reception time at the physical layer. This value will
 be subtracted from receive timestamps obtained from the NIC. The default value
 is 0.
+*nocrossts*:::
+Some hardware can precisely cross timestamp the NIC clock with the system
+clock. This option disables the use of the cross timestamping.
 ::
 +
 Examples of the directive are:
index 686d175ccbb6b2f9cfa5a7219e700f00960299df..7a9d242a1eb9160f8bd4938dd833b837a553b369 100644 (file)
@@ -62,6 +62,7 @@ struct Interface {
   int if_index;
   int phc_fd;
   int phc_mode;
+  int phc_nocrossts;
   /* Link speed in mbit/s */
   int link_speed;
   /* Start of UDP data at layer 2 for IPv4 and IPv6 */
@@ -165,6 +166,7 @@ add_interface(CNF_HwTsInterface *conf_iface)
   iface->if_index = if_index;
   iface->phc_fd = phc_fd;
   iface->phc_mode = 0;
+  iface->phc_nocrossts = conf_iface->nocrossts;
 
   /* Start with 1 gbit and no VLANs or IPv4/IPv6 options */
   iface->link_speed = 1000;
@@ -368,8 +370,8 @@ process_hw_timestamp(struct Interface *iface, struct timespec *hw_ts,
   int l2_length;
 
   if (HCL_NeedsNewSample(iface->clock, &local_ts->ts)) {
-    if (!SYS_Linux_GetPHCSample(iface->phc_fd, 0, iface->precision, &iface->phc_mode,
-                                &sample_phc_ts, &sample_sys_ts, &err))
+    if (!SYS_Linux_GetPHCSample(iface->phc_fd, iface->phc_nocrossts, iface->precision,
+                                &iface->phc_mode, &sample_phc_ts, &sample_sys_ts, &err))
       return;
 
     LCL_CookTime(&sample_sys_ts, &sample_local_ts, NULL);