Add support for saving frequency skew to a file (#1320)

git-svn-id: svn://svn.openwrt.org/openwrt/packages@6262 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
florian 2007-02-04 16:11:19 +00:00
parent fdac2831c6
commit d7c63088c1

View File

@ -0,0 +1,92 @@
--- openntpd-3.9p1/ntpd.h 2006-05-14 07:29:21.000000000 +0200
+++ openntpd-3.9p1new/ntpd.h 2007-02-03 23:51:56.000000000 +0100
@@ -34,6 +34,7 @@
#define NTPD_USER "_ntp"
#endif
#define CONFFILE SYSCONFDIR "/ntpd.conf"
+#define DRIFTFILE "/var/db/ntpd.drift"
#define READ_BUF_SIZE 4096
--- openntpd-3.9p1/ntpd.c 2006-05-14 07:29:23.000000000 +0200
+++ openntpd-3.9p1new/ntpd.c 2007-02-04 00:00:36.000000000 +0100
@@ -45,6 +45,7 @@
int dispatch_imsg(struct ntpd_conf *);
int ntpd_adjtime(double);
void ntpd_settime(double);
+void readfreq(void);
volatile sig_atomic_t quit = 0;
volatile sig_atomic_t reconfig = 0;
@@ -153,7 +154,8 @@
chld_pid = ntp_main(pipe_chld, &conf);
setproctitle("[priv]");
-
+ readfreq();
+
signal(SIGTERM, sighdlr);
signal(SIGINT, sighdlr);
signal(SIGCHLD, sighdlr);
--- openntpd-3.9p1/openbsd-compat/port-linux.c 2007-02-03 20:52:20.000000000 +0100
+++ openntpd-3.9p1new/openbsd-compat/port-linux.c 2007-02-04 01:02:16.000000000 +0100
@@ -33,6 +33,49 @@
/* maximum change to skew per adjustment, in PPM */
#define MAX_SKEW_DELTA 5.0
+void
+writefreq(double d)
+{
+ int r;
+ FILE *fp;
+
+ fp = fopen(DRIFTFILE, "w");
+ if (fp == NULL)
+ {
+ log_warn("opening drift file for writing failed");
+ return;
+ }
+
+ fprintf(fp, "%e\n", d);
+ r = ferror(fp);
+ if (fclose(fp) != 0 || r != 0)
+ {
+ unlink(DRIFTFILE);
+ log_warn("saving freq drift failed");
+ }
+}
+
+void
+readfreq(void)
+{
+ FILE *fp;
+ double d;
+ struct timex tmx;
+
+ fp = fopen(DRIFTFILE, "r");
+ if (fp == NULL)
+ return;
+
+ if (fscanf(fp, "%le", &d) == 1)
+ {
+ tmx.freq = (long)(d * ADJTIMEX_FREQ_SCALE);
+ tmx.modes = ADJ_FREQUENCY;
+ if (adjtimex(&tmx) == -1)
+ log_warn("adjtimex set freq failed");
+ }
+ fclose(fp);
+}
+
int
_compat_adjtime(const struct timeval *delta, struct timeval *olddelta)
{
@@ -93,6 +136,8 @@
tmx.modes = ADJ_FREQUENCY;
if (adjtimex(&tmx) == -1)
log_warn("adjtimex set freq failed");
+
+ writefreq( tskew );
}
log_debug("interval %0.3lf skew %0.3lf total skew %0.3lf", interval,