* dumponexit directive:: Dump measurements when daemon exits
* fallbackdrift directive:: Specify fallback drift intervals
* generatecommandkey directive:: Generate command key automatically
+* hwclockfile directive:: Specify location of hwclock's adjtime file
* include directive:: Include a configuration file
* initstepslew directive:: Trim the system clock on boot-up
* keyfile directive:: Specify location of file containing keys
The generated key will use SHA1 if @code{chronyd} is compiled with the support,
otherwise MD5 will be used.
@c }}}
+@c {{{ hwclockfile
+@node hwclockfile directive
+@subsection hwclockfile
+The @code{hwclockfile} directive sets the location of the adjtime file which is
+used by the @file{/sbin/hwclock} program. With this directive, @code{chronyd}
+will parse the file to find out if the RTC keeps local time or UTC. It
+overrides the @code{rtconutc} directive (@pxref{rtconutc directive}).
+
+An example of the command is
+
+@example
+hwclockfile /etc/adjtime
+@end example
+@c }}}
@c {{{ include
@node include directive
@subsection include
If the @code{rtconutc} directive appears, it means the RTC is required
to keep UTC. The directive takes no arguments. It is equivalent to
specifying the @code{-u} switch to the Linux @file{/sbin/hwclock} program.
+
+Note that this setting is overriden when the @code{hwclockfile} directive
+(@pxref{hwclockfile directive}) is used.
@c }}}
@c {{{ rtcsync
@node rtcsync directive
incl. daylight saving). */
static int rtc_on_utc = 0;
+/* Filename used to read the hwclock(8) LOCAL/UTC setting */
+static char *hwclock_file = NULL;
+
/* Flag set if the RTC should be automatically synchronised by kernel */
static int rtc_sync = 0;
parse_fallbackdrift(p);
} else if (!strcasecmp(command, "generatecommandkey")) {
generate_command_key = parse_null(p);
+ } else if (!strcasecmp(command, "hwclockfile")) {
+ parse_string(p, &hwclock_file);
} else if (!strcasecmp(command, "include")) {
parse_include(p);
} else if (!strcasecmp(command, "initstepslew")) {
{
return min_samples;
}
+
+/* ================================================== */
+
+char *
+CNF_GetHwclockFile(void)
+{
+ return hwclock_file;
+}
extern int CNF_GetMinSamples(void);
extern double CNF_GetRtcAutotrim(void);
+extern char *CNF_GetHwclockFile(void);
#endif /* GOT_CONF_H */
/* ================================================== */
+static void
+read_hwclock_file(const char *hwclock_file)
+{
+ FILE *in;
+ char line[256];
+ int i;
+
+ if (!hwclock_file)
+ return;
+
+ in = fopen(hwclock_file, "r");
+ if (!in) {
+ LOG(LOGS_WARN, LOGF_RtcLinux, "Could not open hwclockfile %s",
+ hwclock_file);
+ return;
+ }
+
+ /* Read third line from the file. */
+ for (i = 0; i < 3; i++) {
+ if (!fgets(line, sizeof(line), in))
+ break;
+ }
+
+ fclose(in);
+
+ if (i == 3 && !strncmp(line, "LOCAL", 5)) {
+ rtc_on_utc = 0;
+ } else if (i == 3 && !strncmp(line, "UTC", 3)) {
+ rtc_on_utc = 1;
+ } else {
+ LOG(LOGS_WARN, LOGF_RtcLinux, "Could not read LOCAL/UTC setting from hwclockfile %s",
+ hwclock_file);
+ }
+}
+
+/* ================================================== */
+
static void
setup_config(void)
{
rtc_on_utc = 0;
}
+ read_hwclock_file(CNF_GetHwclockFile());
+
autotrim_threshold = CNF_GetRtcAutotrim();
}