Add option to read RTC LOCAL/UTC setting from hwclock's adjtime file
This commit is contained in:
parent
3c5cf81e32
commit
e77b0070af
4 changed files with 71 additions and 0 deletions
|
@ -1132,6 +1132,7 @@ directives can occur in any order in the file.
|
||||||
* dumponexit directive:: Dump measurements when daemon exits
|
* dumponexit directive:: Dump measurements when daemon exits
|
||||||
* fallbackdrift directive:: Specify fallback drift intervals
|
* fallbackdrift directive:: Specify fallback drift intervals
|
||||||
* generatecommandkey directive:: Generate command key automatically
|
* generatecommandkey directive:: Generate command key automatically
|
||||||
|
* hwclockfile directive:: Specify location of hwclock's adjtime file
|
||||||
* include directive:: Include a configuration file
|
* include directive:: Include a configuration file
|
||||||
* initstepslew directive:: Trim the system clock on boot-up
|
* initstepslew directive:: Trim the system clock on boot-up
|
||||||
* keyfile directive:: Specify location of file containing keys
|
* keyfile directive:: Specify location of file containing keys
|
||||||
|
@ -1644,6 +1645,20 @@ command key from the /dev/urandom file and write it to the key file.
|
||||||
The generated key will use SHA1 if @code{chronyd} is compiled with the support,
|
The generated key will use SHA1 if @code{chronyd} is compiled with the support,
|
||||||
otherwise MD5 will be used.
|
otherwise MD5 will be used.
|
||||||
@c }}}
|
@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
|
@c {{{ include
|
||||||
@node include directive
|
@node include directive
|
||||||
@subsection include
|
@subsection include
|
||||||
|
@ -2705,6 +2720,9 @@ or ends.
|
||||||
If the @code{rtconutc} directive appears, it means the RTC is required
|
If the @code{rtconutc} directive appears, it means the RTC is required
|
||||||
to keep UTC. The directive takes no arguments. It is equivalent to
|
to keep UTC. The directive takes no arguments. It is equivalent to
|
||||||
specifying the @code{-u} switch to the Linux @file{/sbin/hwclock} program.
|
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 }}}
|
||||||
@c {{{ rtcsync
|
@c {{{ rtcsync
|
||||||
@node rtcsync directive
|
@node rtcsync directive
|
||||||
|
|
13
conf.c
13
conf.c
|
@ -124,6 +124,9 @@ static int enable_manual=0;
|
||||||
incl. daylight saving). */
|
incl. daylight saving). */
|
||||||
static int rtc_on_utc = 0;
|
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 */
|
/* Flag set if the RTC should be automatically synchronised by kernel */
|
||||||
static int rtc_sync = 0;
|
static int rtc_sync = 0;
|
||||||
|
|
||||||
|
@ -365,6 +368,8 @@ CNF_ReadFile(const char *filename)
|
||||||
parse_fallbackdrift(p);
|
parse_fallbackdrift(p);
|
||||||
} else if (!strcasecmp(command, "generatecommandkey")) {
|
} else if (!strcasecmp(command, "generatecommandkey")) {
|
||||||
generate_command_key = parse_null(p);
|
generate_command_key = parse_null(p);
|
||||||
|
} else if (!strcasecmp(command, "hwclockfile")) {
|
||||||
|
parse_string(p, &hwclock_file);
|
||||||
} else if (!strcasecmp(command, "include")) {
|
} else if (!strcasecmp(command, "include")) {
|
||||||
parse_include(p);
|
parse_include(p);
|
||||||
} else if (!strcasecmp(command, "initstepslew")) {
|
} else if (!strcasecmp(command, "initstepslew")) {
|
||||||
|
@ -1620,3 +1625,11 @@ CNF_GetMinSamples(void)
|
||||||
{
|
{
|
||||||
return min_samples;
|
return min_samples;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ================================================== */
|
||||||
|
|
||||||
|
char *
|
||||||
|
CNF_GetHwclockFile(void)
|
||||||
|
{
|
||||||
|
return hwclock_file;
|
||||||
|
}
|
||||||
|
|
1
conf.h
1
conf.h
|
@ -100,5 +100,6 @@ extern int CNF_GetMaxSamples(void);
|
||||||
extern int CNF_GetMinSamples(void);
|
extern int CNF_GetMinSamples(void);
|
||||||
|
|
||||||
extern double CNF_GetRtcAutotrim(void);
|
extern double CNF_GetRtcAutotrim(void);
|
||||||
|
extern char *CNF_GetHwclockFile(void);
|
||||||
|
|
||||||
#endif /* GOT_CONF_H */
|
#endif /* GOT_CONF_H */
|
||||||
|
|
39
rtc_linux.c
39
rtc_linux.c
|
@ -371,6 +371,43 @@ t_from_rtc(struct tm *stm) {
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
||||||
|
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
|
static void
|
||||||
setup_config(void)
|
setup_config(void)
|
||||||
{
|
{
|
||||||
|
@ -380,6 +417,8 @@ setup_config(void)
|
||||||
rtc_on_utc = 0;
|
rtc_on_utc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
read_hwclock_file(CNF_GetHwclockFile());
|
||||||
|
|
||||||
autotrim_threshold = CNF_GetRtcAutotrim();
|
autotrim_threshold = CNF_GetRtcAutotrim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue