mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-19 01:11:05 +01:00
1417 lines
71 KiB
Plaintext
1417 lines
71 KiB
Plaintext
Information on Reference Clock Drivers
|
|
|
|
Revised 5 August 1994
|
|
|
|
Support for most of the commonly available radio clocks is included in
|
|
the default configuration of xntpd. Individual clocks can be activated
|
|
by configuration file commands, specifically the server and fudge
|
|
commands described in the xntpd.8 man page. This file contains
|
|
information useful in configuring and operating these clocks. Note that
|
|
the man pages and documentation files mentioned in this note can be
|
|
found in the ./doc directory of the xntp3 distribution.
|
|
|
|
Radio clocks by convention have addresses in the form 127.127.t.u, where
|
|
"t" is the clock type and "u" is a unit number in the range 0-3 used to
|
|
distinguish multiple instances of clocks of the same type. Most of these
|
|
clocks require support in the form of a serial port or special bus
|
|
peripheral. The particular device is normally specified by adding a soft
|
|
link /dev/device%d to the particular hardware device involved. The name
|
|
"device" is compiled in the driver according to the table below. The
|
|
table shows the type number, device name, short description used in some
|
|
displays, and long description used in other displays.
|
|
|
|
Type Device Name Description
|
|
-------------------------------------------------------
|
|
1 (none) LOCAL Undisciplined Local Clock
|
|
2 trak GPS_TRAK TRAK 8820 GPS Receiver
|
|
3 pst WWV_PST PSTI/Traconex WWV/WWVH Receiver
|
|
4 wwvb WWVB_SPEC Spectracom WWVB Receiver
|
|
5 goes GPS_GOES_TRUE TrueTime GPS/GOES Receivers
|
|
6 irig IRIG_AUDIO IRIG Audio Decoder
|
|
7 chu CHU Scratchbuilt CHU Receiver
|
|
8 refclock- GENERIC Generic Reference Clock Driver
|
|
9 gps GPS_MX4200 Magnavox MX4200 GPS Receiver
|
|
10 gps GPS_AS2201 Austron 2201A GPS Receiver
|
|
11 omega OMEGA_TRUE TrueTime OM-DC OMEGA Receiver
|
|
12 tpro IRIG_TPRO KSI/Odetics TPRO/S IRIG Interface
|
|
13 leitch ATOM_LEITCH Leitch CSD 5300 Master Clock Controller
|
|
14 ees MSF_EES EES M201 MSF Receiver
|
|
15 gpstm GPS_TRUE TrueTime GPS/TM-TMD Receiver
|
|
16 * GPS_BANC Bancomm GPS/IRIG Receiver
|
|
17 datum GPS_DATUM Datum Precision Time System
|
|
18 acts NIST_ACTS NIST Automated Computer Time Service
|
|
19 heath WWV_HEATH Heath WWV/WWVH Receiver
|
|
20 nmea GPS_NMEA Generic NMEA GPS Receiver
|
|
21 * GPS_MOTO Motorola Six Gun GPS Receiver
|
|
22 pps ATOM_PPS PPS Clock Discipline
|
|
|
|
* Not yet available.
|
|
|
|
A radio clock is specified in the configuration using the server command
|
|
|
|
server 127.127.t.u [ prefer ] [ mode m ]
|
|
|
|
where t is the type number above and u can be in the range 0-3,
|
|
conventionally 1. Ordinarily, this is the only command necessary to
|
|
configure a radio clock. The optional prefer keyword can be used to
|
|
modify the clock selection algorithm as described in Appendix B. For
|
|
those clock drivers that support multiple modes of operation, the
|
|
optional mode parameter selects which one. This parameter affects the
|
|
operation of each driver as described in Appendix A.
|
|
|
|
In rare cases a fudge command is necessary to specify additional
|
|
details. This command has the following syntax
|
|
|
|
fudge 127.127.t.u [stratum s] [refid r] [time1 t1] [time2 t2] [flags]
|
|
and must follow the corresponding server command in the configuration
|
|
file. The optional fields following the clock address are interpreted as
|
|
follows:
|
|
|
|
stratum s The s, a decimal number in the range 0-15, overrides the
|
|
default stratum assigned by the driver.
|
|
|
|
refid r The r, a 4-character, null-terminated ASCII string, overrides
|
|
the reference identifier assigned by the driver.
|
|
|
|
time1 t1 The t1, a fixed-point decimal number in seconds, specifies a
|
|
constant to be added to the time offset produced by the
|
|
driver. This provides a way to correct a systematic error or
|
|
bias on the part of the particular clock.
|
|
|
|
time2 t2 The t2, a fixed-point decimal number, is interpreted in a
|
|
driver-dependent way. See the descriptions of specific clock
|
|
drivers in Appendix A.
|
|
|
|
There are four optional flags named flag1, flag2, flag3 and flag4. A
|
|
flag is specified in the form <keyword> <value>, where <keyword> is one
|
|
of the flag names and <value> is either 0 or 1, as appropriate. Two of
|
|
the flags are generic and are interpreted by all applicable drivers, and
|
|
two are driver dependent. The generic ones are as follows:
|
|
|
|
flag4 This flag is used to enable detailed status monitoring and
|
|
event recording. The data collected are written to the
|
|
clockstats file maintained by the filegen utility (See the
|
|
xntpd.8 man page). This file is normally processed by a cron
|
|
job run once per day to produce summary statistics and
|
|
performance data. The ./scripts/stats directory contains a
|
|
number of shell and awk scripts for this, as well as S-
|
|
language programs that produce PostScript plots of performance
|
|
data.
|
|
|
|
flag3 This flag is used with Sun SPARCstation baseboard serial ports
|
|
to assign the ppsclock streams driver for a 1-pps signal
|
|
produced by some radio clocks and timekeeping devices. See the
|
|
dscription of the PPS Clock Discipline Driver (type 22) in
|
|
Appendix A for further information.
|
|
|
|
Note that the fudge factors above can be changed at run time using the
|
|
xntpdc program (see the xntpdc.8 man page). This program does not have
|
|
to be run on the server machine itself, since it communicates with the
|
|
xntpd daemon using cryptographically authenticated messages.
|
|
|
|
The PPS Signal
|
|
|
|
Some radio clocks and related timekeeping gear have a pulse-per-second
|
|
(PPS) signal that can be used to discipline the local clock oscillator
|
|
to a high degree of precision, typically to the order less than 50 us in
|
|
time and 0.1 ppm in frequency. The PPS signal can be connected in either
|
|
of two ways, either via the data leads of a serial port or via the modem
|
|
control leads. Either way requires conversion of the PPS signal, usually
|
|
at TTL levels, to RS232 levels, which can be done using a circuit such
|
|
as described in the ./gadget directory of the xntp3 distribution.
|
|
|
|
The data leads interface requires regenerating the PPS pulse and
|
|
converting to RS232 signal levels, so that the pulse looks like a
|
|
legitimate ASCII character. The tty_clk module in the ./kernel directory
|
|
inserts a timestamp following this character in the input data stream.
|
|
The driver uses this timestamp to determine the time of arrival of the
|
|
PPS pulse to within 26 us at 38.4 kbps while eliminating error due to
|
|
operating system queues and service times. In order to use the tty_clk
|
|
module, the xntp3 distribution must be compiled with CLK defined.
|
|
The modem control leads interface requires converting to RS232 levels
|
|
and connecting to the carrier detect (CD) lead of a serial port. The
|
|
ppsclock streams module in the ./ppsclock directory is used to capture a
|
|
timestamp upon transition of the PPS signal. The driver reads the latest
|
|
timestamp with a designated ioctl() system call to determine the time of
|
|
arrival of the PPS pulse to within a few tens of microseconds. In order
|
|
to use the ppsclock module, the xntp3 distribution must be compiled with
|
|
PPS defined.
|
|
|
|
Both of these mechanisms are supported by the ATOM_PPS reference clock
|
|
driver described in Appendix A. This driver is ordinarily used in
|
|
conjunction with another clock driver that supports the radio clock that
|
|
produces the PPS pulse. This driver furnishes the coarse timecode used
|
|
to disambiguate the seconds numbering of the PPS pulse itself. The NTP
|
|
daemon mitigates between the radio clock driver and ATOM_PPS driver as
|
|
described in Appendix B in order to provide the most accurate time,
|
|
while respecting the various types of equipment failures that could
|
|
happen.
|
|
|
|
For the utmost time quality, a number of Unix system kernel
|
|
modifications can be made as described in the README.magic and
|
|
README.kernel files. Specifically, the ppsclock module can be used to
|
|
interface the PPS signal directly to the kernel for use as discipline
|
|
sources for both time and frequency. These sources can be separately
|
|
enabled and monitored using the ntp_adjtime() system call described in
|
|
README.kernel and the ./include/sys/timex.h header file in the xntp3
|
|
distribution. In order to use the kernel PPS signal, the xntp3
|
|
distribution must be compiled with KERNEL_PLL defined.
|
|
|
|
In some configurations may have multiple radio clocks, each with PPS
|
|
outputs, as well as a kernel modified to use the PPS signal. In order to
|
|
provide the highest degree of redundancy and survivability, the kernel
|
|
PPS discipline, tty_clk module and ppsclock module may all be in use at
|
|
the same time, each backing up the other. The sometimes complicated
|
|
mitigation rules are described in Appendix B.
|
|
|
|
Debugging Hints
|
|
|
|
The ntpq and xntpdc utility programs can be used to debug reference
|
|
clocks, either on the server itself or from another machine elsewhere in
|
|
the network. The server is compiled, installed and started using the
|
|
command-line switches described in the xntpd.8 man page. The first thing
|
|
to look for are error messages on the system log. If none occur, the
|
|
daemon has started, opened the devices specified and waiting for peers
|
|
and radios to come up.
|
|
|
|
The next step is to be sure the RS232 messages, if used, are getting to
|
|
and from the clock. The most reliable way to do this is with an RS232
|
|
tester and to look for data flashes as the driver polls the clock and/or
|
|
as data arrive from the clock. Our experience is that the overwhelming
|
|
fraction of problems occurring during installation are due to problems
|
|
such as miswired connectors or improperly configured radio clocks at
|
|
this stage.
|
|
|
|
If RS232 messages are getting to and from the clock, the variables of
|
|
interest can be inspected using the ntpq program and various commands
|
|
described in the ntpq.8 man page. First, use the pe and as commands to
|
|
display a pair of billboards showing the peer configuration and
|
|
association IDs for all peers, including the radio clock peers. The
|
|
assigned clock address should appear in the pe billboard and the
|
|
association ID for it at the same relative line position in the as
|
|
billboard. If things are operating correctly, after a minute or two
|
|
samples should show up in the pe display line for the clock.
|
|
|
|
Additional information is available with the rv and clockvar commands,
|
|
which take as argument the association ID shown in the as billboard. The
|
|
rv command with no argument shows the system variables, while the rv
|
|
command with argument shows the peer variables for the clock, as well as
|
|
any other peers of interest. The clockvar command with argument shows
|
|
the peer variables specific to reference clock peers, including the
|
|
clock status, device name, last received timecode (if relevant), and
|
|
various event counters. In addition, a subset of the fudge parameters is
|
|
included.
|
|
|
|
The xntpdc utility program can be used for detailed inspection of the
|
|
clock driver status. The most useful are the clockstat and clkbug
|
|
commands described in the xntpdc.8 man page. While these commands permit
|
|
getting quite personal with the particular driver involved, their use is
|
|
seldom necessary, unless an implementation bug shows up.
|
|
|
|
Most drivers write a message to the clockstats file as each timecode or
|
|
surrogate is received from the radio clock. By convention, this is the
|
|
last ASCII timecode (or ASCII gloss of a binary-coded one) received from
|
|
the radio. This file is managed by the filegen facility described in the
|
|
xntpd.8 man page and requires specific commands in the configuration
|
|
file. This forms a highly useful record to discover anomalies during
|
|
regular operation of the clock. The scripts included in the
|
|
./scripts/stats directory can be run from a cron job to collect and
|
|
summarize these data on a daily or weekly basis. The summary files have
|
|
proven invaluable to detect infrequent misbehavior due to clock
|
|
implementation bugs in some radios.
|
|
|
|
Appendix A. Individual Driver Descriptions
|
|
|
|
Following are detailed descriptions of the clock drivers, together with
|
|
configuration data useful for special circumstances.
|
|
|
|
Type 1: Undisciplined Local Clock
|
|
|
|
This is a hack to allow a machine to use its own system clock as a
|
|
reference clock, i.e., to free-run using no outside clock
|
|
discipline source. This is useful if you want to use NTP in an
|
|
isolated environment with no radio clock or NIST modem available.
|
|
Pick a machine that you figure has a good clock oscillator and
|
|
configure it with this driver. Set the clock using the best means
|
|
available, like eyeball-and-wristwatch. Then, point all the other
|
|
machines at this one or use broadcast (not multicast) mode to
|
|
distribute time.
|
|
|
|
Another application for this driver is if you want to use a
|
|
particular server's clock as the clock of last resort when all
|
|
other normal synchronization sources have gone away. This is
|
|
especially useful if that server has an ovenized oscillator. For
|
|
this you would configure this driver at a higher stratum (say 3 or
|
|
4) to prevent the server's stratum from falling below that.
|
|
|
|
A third application for this driver is when an external discipline
|
|
source is available, such as the NIST "lockclock" program, which
|
|
synchronizes the local clock via a telephone modem and the NIST
|
|
Automated Computer Time Service (ACTS), or the Digital Time
|
|
Synchronization Service (DTSS), which runs on DCE machines. In this
|
|
case the stratum should be set at zero, indicating a bona fide
|
|
stratum-1 source. Exercise some caution with this, since there is
|
|
no easy way to telegraph via NTP that something might be wrong in
|
|
the discipline source itself. In the case of DTSS, the local clock
|
|
can have a rather large jitter, depending on the interval between
|
|
corrections and the intrinsic frequency error of the clock
|
|
oscillator. In extreme cases, this can cause clients to exceed the
|
|
128-ms slew window and drop off the NTP subnet.
|
|
|
|
In the default mode the behavior of the clock selection algorithm
|
|
is modified when this driver is in use. The algorithm is designed
|
|
so that this driver will never be selected unless no other
|
|
discipline source is available. This can be overridden with the
|
|
prefer keyword of the server configuration command, in which case
|
|
only this driver will be selected for synchronization and all other
|
|
discipline sources will be ignored. This behavior is intended for
|
|
use when an external discipline source controls the system clock.
|
|
|
|
Fudge Factors
|
|
|
|
The stratum for this driver LCLSTRATUM is set at 3 by default, but
|
|
can be changed by the fudge command and/or the xntpdc utility. The
|
|
reference ID is "LCL" by default, but can be changed using the same
|
|
mechanisms. *NEVER* configure this driver to operate at a stratum
|
|
which might possibly disrupt a client with access to a bona fide
|
|
primary server, unless the local clock oscillator is reliably
|
|
disciplined by another source. *NEVER NEVER* configure a server
|
|
which might devolve to an undisciplined local clock to use
|
|
multicast mode.
|
|
|
|
This driver provides a mechanism to trim the local clock in both
|
|
time and frequency, as well as a way to manipulate the leap bits.
|
|
The fudge time1 parameter adjusts the time, in seconds, and the
|
|
fudge time2 parameter adjusts the frequency, in ppm. Both
|
|
parameters are additive; that is, they add increments in time or
|
|
frequency to the present values. (Note: The frequency cannot be
|
|
changed when the kernel modifications are in use - see the
|
|
README.kern file). The fudge flag1 and fudge flag2 bits set the
|
|
corresponding leap bits; for example, setting flag1 causes a leap
|
|
second to be added at the end of the UTC day. These bits are not
|
|
reset automatically when the leap takes place; they must be turned
|
|
off manually after the leap event.
|
|
|
|
Type 2: TRAK 8820 GPS Receiver
|
|
|
|
This driver supports the TRAK 8820 GPS Station Clock. The claimed
|
|
accuracy at the 1-pps output is 200-300 ns relative to the
|
|
broadcast signal; however, in most cases the actual accuracy is
|
|
limited by the precision of the timecode and the latencies of the
|
|
serial interface and operating system.
|
|
|
|
For best accuracy, this radio requires the LDISC_ACTS line
|
|
discipline, which captures a timestamp at the '*' on-time character
|
|
of the timecode. Using this discipline the jitter is in the order
|
|
of 1 ms and systematic error about 0.5 ms. If unavailable, the
|
|
buffer timestamp is used, which is captured at the \r ending the
|
|
timecode message. This introduces a systematic error of 23
|
|
character times, or about 24 ms at 9600 bps, together with a jitter
|
|
well over 8 ms on Sun IPC-class machines.
|
|
|
|
Using the menus, the radio should be set for 9600 bps, one stop bit
|
|
and no parity. It should be set to operate in computer (no echo)
|
|
mode. The timecode format includes neither the year nor leap-second
|
|
warning. No provisions are included in this preliminary version of
|
|
the driver to read and record detailed internal radio status.
|
|
|
|
In operation, this driver sends a RQTS\r request to the radio at
|
|
initialization in order to put it in continuous time output mode.
|
|
The radio then sends the following message once each second:
|
|
|
|
*RQTS U,ddd:hh:mm:ss.0,q<cr><lf>
|
|
|
|
on-time = '*'
|
|
ddd = day of year
|
|
hh:mm:ss = hours, minutes, seconds
|
|
q = quality indicator (phase error), 0-6:
|
|
0 > 20 us
|
|
6 > 10 us
|
|
5 > 1 us
|
|
4 > 100 ns
|
|
3 > 10 ns
|
|
2 < 10 ns
|
|
|
|
The alarm condition is indicated by '0' at Q, which means the radio
|
|
has a phase error than 20 usec relative to the broadcast time. The
|
|
absence of year, DST and leap-second warning in this format is also
|
|
alarming.
|
|
|
|
The continuous time mode is disabled using the RQTX<cr> request,
|
|
following which the radio sends a RQTX DONE<cr><lf> response. In
|
|
the normal mode, other control and status requests are effective,
|
|
including the leap-second status request RQLS<cr>. The radio
|
|
responds with RQLS yy,mm,dd<cr><lf>, where yy,mm,dd are the year,
|
|
month and day. Presumably, this gives the epoch of the next leap
|
|
second, RQLS 00,00,00 if none is specified in the GPS message.
|
|
Specified in this form, the information is generally useless and is
|
|
ignored by the driver.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic.
|
|
|
|
Type 3: PSTI/Traconex WWV/WWVH Receiver
|
|
|
|
This driver supports the PSTI 1010 and Traconex 1020 WWV/WWVH
|
|
Receivers. No specific claim of accuracy is made for these
|
|
receiver, but actual experience suggests that 10 ms would be a
|
|
conservative assumption.
|
|
|
|
The DIPswitches should be set for 9600 bps line speed, 24-hour day-
|
|
of-year format and UTC time zone. Automatic correction for DST
|
|
should be disabled. It is very important that the year be set
|
|
correctly in the DIPswitches; otherwise, the day of year will be
|
|
incorrect after 28 April of a normal or leap year. The propagation
|
|
delay DIPswitches should be set according to the distance from the
|
|
transmitter for both WWV and WWVH, as described in the
|
|
instructions. While the delay can be set only to within 11 ms, the
|
|
fudge time1 parameter can be used for vernier corrections.
|
|
|
|
Using the poll sequence QTQDQM, the response timecode is in three
|
|
sections totalling 50 ASCII printing characters, as concatenated by
|
|
the driver, in the following format:
|
|
|
|
ahh:mm:ss.fffs<cr> yy/dd/mm/ddd<cr> frdzycchhSSFTttttuuxx<cr>
|
|
|
|
on-time = first <cr>
|
|
hh:mm:ss.fff = hours, minutes, seconds, milliseconds
|
|
a = AM/PM indicator (' ' for 24-hour mode)
|
|
yy = year (from DIPswitches)
|
|
dd/mm/ddd = day of month, month, day of year
|
|
s = daylight-saving indicator (' ' for 24-hour mode)
|
|
f = frequency enable (O = all frequencies enabled)
|
|
r = baud rate (3 = 1200, 6 = 9600)
|
|
d = features indicator (@ = month/day display enabled)
|
|
z = time zone (0 = UTC)
|
|
y = year (5 = 91)
|
|
cc = WWV propagation delay (52 = 22 ms)
|
|
hh = WWVH propagation delay (81 = 33 ms)
|
|
SS = status (80 or 82 = operating correctly)
|
|
F = current receive frequency (4 = 15 MHz)
|
|
T = transmitter (C = WWV, H = WWVH)
|
|
tttt = time since last update (0000 = minutes)
|
|
uu = flush character (03 = ^c)
|
|
xx = 94 (unknown)
|
|
|
|
The alarm condition is indicated by other than '8' at A, which
|
|
occurs during initial synchronization and when received signal is
|
|
lost for an extended period; unlock condition is indicated by other
|
|
than "0000" in the tttt subfield at Q.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic.
|
|
|
|
Type 4: Spectracom WWVB Receiver
|
|
|
|
This driver supports the Spectracom Model 8170 and Netclock/2 WWVB
|
|
Synchronized Clock. This clock has proven a reliable source of
|
|
time, except in some cases of high ambient conductive RF
|
|
interference. The claimed accuracy of the clock is 100 usec
|
|
relative to the broadcast signal; however, in most cases the actual
|
|
accuracy is limited by the precision of the timecode and the
|
|
latencies of the serial interface and operating system.
|
|
|
|
The DIPswitches on this clock should be set to 24-hour display,
|
|
AUTO DST off, time zone 0 (UTC), data format 0 or 2 (see below) and
|
|
baud rate 9600. If this clock is to used as the source for the IRIG
|
|
Audio Decoder (refclock_irig.c in this distribution), set the
|
|
DIPswitches for AM IRIG output and IRIG format 1 (IRIG B with
|
|
signature control).
|
|
|
|
There are two timecode formats used by these clocks. Format 0,
|
|
which is available with both the Netclock/2 and 8170, and format 2,
|
|
which is available only with the Netclock/2 and specially modified
|
|
8170.
|
|
|
|
Format 0 (22 ASCII printing characters):
|
|
|
|
<cr><lf>i ddd hh:mm:ss TZ=zz<cr><lf>
|
|
|
|
on-time = first <cr>
|
|
hh:mm:ss = hours, minutes, seconds
|
|
i = synchronization flag (' ' = in synch, '?' = out synch)
|
|
|
|
The alarm condition is indicated by other than ' ' at A, which
|
|
occurs during initial synchronization and when received signal is
|
|
lost for about ten hours.
|
|
|
|
Format 2 (24 ASCII printing characters):
|
|
|
|
<cr><lf>iqyy ddd hh:mm:ss.fff ld
|
|
|
|
on-time = <cr>
|
|
i = synchronization flag (' ' = in synch, '?' = out synch)
|
|
q = quality indicator (' ' = locked, 'A'...'D' = unlocked)
|
|
yy = year (as broadcast)
|
|
ddd = day of year
|
|
hh:mm:ss.fff = hours, minutes, seconds, milliseconds
|
|
|
|
The alarm condition is indicated by other than ' ' at A, which
|
|
occurs during initial synchronization and when received signal is
|
|
lost for about ten hours. The unlock condition is indicated by
|
|
other than ' ' at Q.
|
|
|
|
The Q is normally ' ' when the time error is less than 1 ms and a
|
|
character in the set 'A'...'D' when the time error is less than 10,
|
|
100, 500 and greater than 500 ms respectively. The L is normally '
|
|
', but is set to 'L' early in the month of an upcoming UTC leap
|
|
second and reset to ' ' on the first day of the following month.
|
|
The D is set to 'S' for standard time 'I' on the day preceding a
|
|
switch to daylight time, 'D' for daylight time and 'O' on the day
|
|
preceding a switch to standard time. The start bit of the first
|
|
<cr> is synchronized to the indicated time as returned.
|
|
|
|
This driver does not need to be told which format is in use - it
|
|
figures out which one from the length of the message. A three-stage
|
|
median filter is used to reduce jitter and provide a dispersion
|
|
measure. The driver makes no attempt to correct for the intrinsic
|
|
jitter of the radio itself, which is a known problem with the older
|
|
radios.
|
|
|
|
Fudge Factors
|
|
|
|
This driver can retrieve a table of quality data maintained
|
|
internally by the Netclock/2 receiver. If flag4 of the fudge
|
|
configuration command is set to 1, the driver will retrieve this
|
|
table and write it to the clockstats file on when the first
|
|
timecode message of a new day is received.
|
|
|
|
Type 5: TrueTime GPS/GOES Receivers
|
|
|
|
This driver supports at least two models of Kinemetrics/TrueTime
|
|
Timing Receivers, the 468-DC MK III GOES Synchronized Clock and
|
|
GPS-DC MK III GPS Synchronized Clock and very likely others in the
|
|
same model family that use the same timecode formats. The clocks
|
|
are connected via a serial port. Up to four units, with unit
|
|
numbers in the range 0 through 3, can be configured. The driver
|
|
assumes the serial port device name is /dev/goes%d (i.e., unit 1 at
|
|
127.127.5.1 opens the clock at /dev/goes1) and that the clock is
|
|
configured for 9600-baud operation.
|
|
|
|
Type 6: IRIG Audio Decoder
|
|
|
|
This driver supports the Inter-Range Instrumentation Group standard
|
|
time-distribution signal IRIG-B using the audio codec native to the
|
|
Sun SPARCstation. This signal is generated by several radio clocks,
|
|
including those made by Austron, TrueTime, Odetics and Spectracom,
|
|
among others, although it is generally an add-on option. The signal
|
|
is connected via an attenuator box and cable to the audio codec
|
|
input on a Sun SPARCstation and requires a specially modified
|
|
kernel audio driver. Details are in the README.irig file.
|
|
|
|
Timing jitter using the decoder and a Sun IPC is in the order of a
|
|
few microseconds, although the overall timing accuracy is limited
|
|
by the wander of the CPU oscillator used for timing purposes to a
|
|
few hundred microseconds. These figures are comparable with what
|
|
can be achieved using the 1-pps discipline as describe elsewhere in
|
|
this note.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic. The
|
|
flag3 and flag4 flags are not applicable to this driver.
|
|
|
|
Type 7: Scratchbuilt CHU Receiver
|
|
|
|
This driver supports a shortwave receiver and special modem
|
|
circuitry described in the ./gadget directory of the xntp3
|
|
distribution. It requires the chu-clk line discipline or chu_clk
|
|
STREAMS module described in the ./kernel directory of that
|
|
distribution. It is connected via a serial port operating at 300
|
|
baud.
|
|
Unlike the NIST time services, whose timecode requires quite
|
|
specialized hardware to interpret, the CHU timecode can be received
|
|
directly via a serial port after demodulation. While there are
|
|
currently no known commercial CHU receivers, the hardware required
|
|
to receive the CHU timecode is fairly simple to build. While it is
|
|
possible to configure several CHU units simultaneously, this is in
|
|
general not useful.
|
|
|
|
Fudge Factors
|
|
|
|
The time1 option can be used to set the CHU propagation delay,
|
|
compensate for inherent latencies in the serial port hardware and
|
|
operating system. The default value is 0.0025 seconds, which is
|
|
about right for Toronto. Values for other locations can be
|
|
calculated using the propdelay program in the util directory of the
|
|
xntp3 distribution or equivalent means.
|
|
|
|
The time2 option can be used to compensate for inherent latencies
|
|
in the serial port hardware and operating system. The value, which
|
|
defaults to zero, is in addition to the propagation delay provided
|
|
by the time1 option. The default value is 0.0002 seconds, which is
|
|
about right for typical telephone modem chips.
|
|
|
|
The flag1 option can be used to modify the averaging algorithm used
|
|
to smooth the clock indications. Ordinarily, the algorithm picks
|
|
the median of a set of samples, which is appropriate under
|
|
conditions of poor to fair radio propagation conditions. If the
|
|
clock is located relatively close to the WWV or WWVH transmitters,
|
|
setting this flag will cause the algorithm to average the set of
|
|
samples, which can reduce the residual jitter and improve accuracy.
|
|
|
|
Type 8: Generic Reference Clock Driver
|
|
|
|
The timecode of these receivers is sampled via a STREAMS module in
|
|
the kernel (The STREAMS module has been designed for use with SUN
|
|
Systems under SunOS 4.1.x. It can be linked directly into the
|
|
kernel or loaded via the loadable driver mechanism). This STREAMS
|
|
module can be adapted to be able to convert different time code
|
|
formats. If the daemon is
|
|
|
|
compiled without the STREAM definition synchronization will work
|
|
without the Sun streams module, though accuracy is significantly
|
|
degraded.
|
|
|
|
The actual receiver status is mapped into various synchronization
|
|
states generally used by receivers. The STREAMS module is
|
|
configured to interpret the time codes of DCF U/A 31, PZF535,
|
|
GPS166, Trimble SV6 GPS, ELV DCF7000, Schmid and low cost receivers
|
|
(see list below).
|
|
|
|
The reference clock support in xntp contains the necessary
|
|
configuration tables for those receivers. In addition to supporting
|
|
up to 32 different clock types and 4 devices, the generation a a
|
|
PPS signal is also provided as an configuration option. The PPS
|
|
configuration option uses the receiver generated time stamps for
|
|
feeding the PPS loopfilter control for much finer clock
|
|
synchronization.
|
|
|
|
CAUTION: The PPS configuration option is different from the
|
|
hardware PPS signal, which is also supported (see below), as it
|
|
controls the way xntpd is synchronized to the reference clock,
|
|
while the hardware PPS signal controls the way time offsets are
|
|
determined.
|
|
|
|
The use of the PPS option requires receivers with an accuracy of
|
|
better than 1ms.
|
|
Fudge factors
|
|
|
|
Only two fudge factors are utilized. The time1 fudge factor defines
|
|
the phase offset of the synchronization character to the actual
|
|
time. On the availability of PPS information the time2 fudge factor
|
|
defines the skew between the PPS time stamp and the receiver
|
|
timestamp of the PPS signal. This parameter is usually zero, as
|
|
usually the PPS signal is believed in time and OS delays should be
|
|
corrected in the machine specific section of the kernel driver.
|
|
time2 needs only be set when the actual PPS signal is delayed for
|
|
some reason. The flag0 enables input filtering. This a median
|
|
filter with continuous sampling. The flag1 selects averaging of the
|
|
samples remaining after the filtering. Leap secondhandling is
|
|
controlled with the flag2. When set a leap second will be deleted
|
|
on receipt of a leap second indication from the receiver. Otherwise
|
|
the leap second will be added, (which is the default).
|
|
|
|
ntpq (8)
|
|
|
|
timecode variable
|
|
|
|
The ntpq program can read clock variables command list several
|
|
variables. These hold the following information: refclock_time is
|
|
the local time with the offset to UTC (format HHMM). The currently
|
|
active receiver flags are listed in refclock_status. Additional
|
|
feature flags of the receiver are optionally listed in parentheses.
|
|
The actual time code is listed in timecode. A qualification of the
|
|
decoded time code format is following in refclock_format. The last
|
|
piece of information is the overall running time and the
|
|
accumulated times for the clock event states in refclock_states.
|
|
When PPS information is present additional variable are available.
|
|
refclock_ppstime lists then the PPS timestamp and refclock_ppsskew
|
|
lists the difference between RS232 derived timestamp and the PPS
|
|
timestamp.
|
|
|
|
Unit encoding
|
|
|
|
The unit field <u> encodes the device, clock type and the PPS
|
|
generation option. There are 4 possible units, which are encoded in
|
|
the lower two bits of the <u> field. The devices are named
|
|
/dev/refclock-0 through /dev/refclock-3. Bits 2 thru 6 encode the
|
|
clock type. The fudge factors of the clock type are taken from a
|
|
table clockinfo in refclock_parse.c. The generation of PPS
|
|
information for disciplining the local NTP clock is encoded in bit
|
|
7 of <u>.
|
|
|
|
Currently, nine clock types (devices /dev/refclock-0 -
|
|
/dev/refclock-3) are supported.
|
|
|
|
127.127.8.0-3 16
|
|
|
|
Meinberg PZF535 receiver (FM demodulation/TCXO / 50us)
|
|
|
|
127.127.8.4-7 16
|
|
|
|
Meinberg PZF535 receiver (FM demodulation/OCXO / 50us)
|
|
|
|
127.127.8.8-11 16
|
|
|
|
Meinberg DCF U/A 31 receiver (AM demodulation / 4ms)
|
|
|
|
127.127.8.12-15 16
|
|
|
|
ELV DCF7000 (sloppy AM demodulation / 50ms)
|
|
|
|
127.127.8.16-19 16
|
|
Walter Schmid DCF receiver Kit (AM demodulation / 1ms)
|
|
|
|
127.127.8.20-23 16
|
|
|
|
RAW DCF77 100/200ms pulses (Conrad DCF77 receiver module / 5ms)
|
|
|
|
127.127.8.24-27 16
|
|
|
|
RAW DCF77 100/200ms pulses (TimeBrick DCF77 receiver module / 5ms)
|
|
|
|
127.127.8.28-31 16
|
|
|
|
Meinberg GPS166 receiver (GPS / <<1us)
|
|
|
|
127.127.8.32-35 16
|
|
|
|
Trimble SV6 GPS receiver (GPS / <<1us)
|
|
|
|
The reference clock support carefully monitors the state
|
|
transitions of the receiver. All state changes and exceptional
|
|
events such as loss of time code transmission are logged via the
|
|
syslog facility. Every hour a summary of the accumulated times for
|
|
the clock states is listed via syslog.
|
|
|
|
PPS support is only available when the receiver is completely
|
|
synchronized. The receiver is believed to deliver correct time for
|
|
an additional period of time after losing synchronizations, unless
|
|
a disruption in time code transmission is detected (possible power
|
|
loss). The trust period is dependent on the receiver oscillator and
|
|
thus a function of clock type. This is one of the parameters in the
|
|
clockinfo field of the reference clock implementation. This
|
|
parameter cannot be configured by xntpdc.
|
|
|
|
In addition to the PPS loopfilter control a true PPS hardware
|
|
signal can be applied on Sun Sparc stations via the CPU serial
|
|
ports on the CD pin. This signal is automatically detected and will
|
|
be used for offset calculation. The input signal must be the time
|
|
mark for the following time code. (The edge sensitivity can be
|
|
selected - look into the appropriate kernel/parsestreams.c for
|
|
details). Meinberg receivers can be connected by feeding the PPS
|
|
pulse of the receiver via a 1488 level converter to Pin 8 (CD) of a
|
|
Sun serial zs\-port.
|
|
|
|
There exists a special firmware release for the PZF535 Meinberg
|
|
receivers. This release (PZFUERL 4.6 (or higher - The UERL is
|
|
important)) is absolutely recommended for XNTP use, as it provides
|
|
LEAP warning, time code time zone information and alternate antenna
|
|
indication. Please check with Meinberg for this firmware release.
|
|
For the Meinberg GPS166 receiver is also a special firmware release
|
|
available (Uni-Erlangen). This release must be used for proper
|
|
operation.
|
|
|
|
The raw DCF77 pulses can be fed via a level converter directly into
|
|
Pin 3 (Rx) of the Sun. The telegrams will be decoded an used for
|
|
synchronization. AM DCF77 receivers are running as low as $25. The
|
|
accuracy is dependent on the receiver and is somewhere between 2ms
|
|
(expensive) to 10ms (cheap). Upon bad signal reception of DCF77
|
|
synchronizations will cease as no backup oscillator is available as
|
|
usually found in other reference clock receivers. So it is
|
|
important to have a good place for the DCF77 antenna. For
|
|
transmitter shutdowns you are out of luck unless you have other NTP
|
|
servers with alternate time sources available.
|
|
|
|
Type 9: Magnavox MX4200 GPS Receiver
|
|
|
|
This driver supports the Magnavox MX4200 Navigation Receiver
|
|
adapted to precision timing applications. This requires an
|
|
interface box described in the ./ppsclock directory of the xntp3
|
|
distribution. It is connected via a serial port and requires the
|
|
ppsclock STREAMS module described in the same directory.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic.
|
|
|
|
Type 10: Austron 2201A GPS Receiver
|
|
|
|
This driver supports the Austron 2200A/2201A GPS/LORAN Synchronized
|
|
Clock and Timing Receiver connected via a serial port. It supports
|
|
several special features of the clock, including the Input Buffer
|
|
Module, Output Buffer Module, IRIG-B Interface Module and LORAN
|
|
Assist Module. It requires the RS232 Serial Interface module for
|
|
communication with the driver.
|
|
|
|
This receiver is capable of a comprehensive and large volume of
|
|
statistics and operational data. The specific data collection
|
|
commands and attributes are embedded in the driver source code;
|
|
however, the collection process can be enabled or disabled using
|
|
the flag4 flag. If set, collection is enabled; if not, which is the
|
|
default, it is disabled. A comprehensive suite of data reduction
|
|
and summary scripts is in the ./scripts/stats directory of the
|
|
xntp3 distribution.
|
|
|
|
To achieve the high accuracy this device provides, it is necessary
|
|
to use the ppsclock feature of the xntp3 program distribution or,
|
|
alternatively, to install the kernel modifications described in the
|
|
README.kern. The clock can be wired to provide time to a single CPU
|
|
or bussed in parallel to several CPUs, with one CPU controlling the
|
|
receiver and the others just listening. Fair accuracy can be
|
|
achieved in the single-CPU configuration without use of the 1-pps
|
|
signal, but in multiple CPU configurations accuracy is severely
|
|
degraded without it.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic.
|
|
|
|
Type 11: TrueTime OM-DC OMEGA Receiver
|
|
|
|
This driver supports the Kinemetrics/TrueTime OMEGA-DC OMEGA
|
|
Synchronized Clock connected via a serial port. This clock is
|
|
sufficiently different from other Kinemetrics/TrueTime models that
|
|
a separate driver is required. Up to four units, with unit numbers
|
|
in the range 0 through 3, can be configured. The driver assumes the
|
|
serial port device name is /dev/omega%d (i.e., unit 1 at
|
|
127.127.11.1 opens the clock at /dev/omega1) and that the clock is
|
|
configured for 9600-baud operation.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic.
|
|
|
|
Type 12: KSI/Odetics TPRO/S IRIG Interface
|
|
|
|
This driver supports the KSI/Odetics TPRO and TPRO-SAT IRIG-B
|
|
Decoder, which is a module connected directly to the SBus of a Sun
|
|
workstation. The module works with the IRIG-B signal generated by
|
|
several radio clocks, including those made by Austron, TrueTime,
|
|
Odetics and Spectracom, among others, although it is generally an
|
|
add-on option. In the case of the TPRO-SAT, the module is an
|
|
integral part of a GPS receiver, which serves as the primary timing
|
|
source.
|
|
|
|
Using the TPRO interface as a NTP reference clock provides
|
|
precision time only to xntpd and its clients. With suitable kernel
|
|
modifications, it is possible to use the TPRO as the CPU system
|
|
clock, avoiding errors introduced by the CPU clock oscillator
|
|
wander. See the README.kernel and kern.c files for further details.
|
|
|
|
Type 13: Leitch CSD 5300 Master Clock Controller
|
|
|
|
Information not available.
|
|
|
|
Type 14: EES M201 MSF Receiver
|
|
|
|
This driver supports the EES M201 MSF receiver connected to a Sun
|
|
SPARCstation running SunOS 4.x with the "ppsclock" STREAMS module.
|
|
|
|
Fudge Factors
|
|
|
|
If flag1 is set, then the system clock is assumed to be sloppy
|
|
(e.g. Sun4 with 20ms clock), so samples are averaged. If flag2 is
|
|
set, then leaphold is set. If flag3 is set, then the sample
|
|
information is dumped. If flag4 is set, then the input data is
|
|
smoothed, and all data points are used.
|
|
|
|
Type 15: TrueTime GPS/TM-TMD Receiver
|
|
|
|
Information not available.
|
|
|
|
Type 16: Bancomm GPS/IRIG Receiver
|
|
|
|
Information not available.
|
|
|
|
Type 17: Datum Precision Time System
|
|
|
|
Information not available.
|
|
|
|
Type 18: NIST Automated Computer Time Service
|
|
|
|
This driver supports the NIST Automated Computer Time Service
|
|
(ACTS). It periodically dials a prespecified telephone number,
|
|
receives the NIST timecode data and calculates the local clock
|
|
correction. It designed primarily for use when neither a radio
|
|
clock nor connectivity to Internet time servers is available. For
|
|
the best accuracy, the individual telephone line/modem delay needs
|
|
to be calibrated using outside sources.
|
|
|
|
The ACTS is located at NIST Boulder, CO, telephone 303 494 4774. A
|
|
toll call from Newark, DE, costs between three and four cents,
|
|
although it is not clear what carrier and time of day discounts
|
|
apply. The modem dial string will differ depending on local
|
|
telephone configuration, etc., and is specified by the phone
|
|
command in the configuration file. The argument to this command is
|
|
an AT command for a Hayes compatible modem.
|
|
|
|
The accuracy produced by this driver should be in the range of a
|
|
millisecond or two, but may need correction due to the delay
|
|
characteristics of the individual modem involved. For undetermined
|
|
reasons, some modems work with the ACTS echo-delay measurement
|
|
scheme and some don't. This driver tries to do the best it can with
|
|
what it gets. Initial experiments with a Practical Peripherals
|
|
9600SA modem here in Delaware suggest an accuracy of a millisecond
|
|
or two can be achieved without the scheme by using a fudge time1
|
|
value of 65.0 ms. In either case, the dispersion for a single call
|
|
involving ten samples is about 1.3 ms.
|
|
|
|
The driver can operate in either of three modes, as determined by
|
|
the mode parameter in the server configuration command. In mode 0
|
|
(automatic) the driver operates continuously at intervals depending
|
|
on the prediction error, as measured by the driver, usually in the
|
|
order of several hours. In mode 1 (backup) the driver is enabled in
|
|
automatic mode only when no other source of synchronization is
|
|
available and when more than MAXOUTAGE (3600 s) have elapsed since
|
|
last synchronized by other sources. In mode 2 (manual) the driver
|
|
operates only when enabled using a fudge flags switch, as described
|
|
below.
|
|
|
|
For reliable call management, this driver requires a 1200-bps modem
|
|
with a Hayes-compatible command set and control over the modem data
|
|
terminal ready (DTR) control line. Present restrictions require the
|
|
use of a POSIX-compatible programming interface, although other
|
|
interfaces may work as well. The ACTS telephone number and modem
|
|
setup string are hard-coded in the driver and may require changes
|
|
for nonstandard modems or special circumstances.
|
|
|
|
Fudge Factors
|
|
|
|
Ordinarily, the propagation time correction is computed
|
|
automatically by ACTS and the driver. When this is not possible or
|
|
erratic due to individual modem characteristics, the fudge flag2
|
|
switch should be set to disable the ACTS echo-delay scheme. In any
|
|
case, the fudge time1 parameter can be used to adjust the
|
|
propagation delay as required.
|
|
|
|
The ACTS call interval is determined in one of three ways. In
|
|
manual mode a call is initiated by setting fudge flag1 using
|
|
xntpdc, either manually or via a cron job. In automatic mode this
|
|
flag is set by the peer timer, which is controlled by the sys_poll
|
|
variable in response to measured errors. In backup mode the driver
|
|
is ordinarily asleep, but awakes (in automatic mode) if all other
|
|
synchronization sources are lost. In either automatic or backup
|
|
modes, the call interval increases as long as the measured errors
|
|
do not exceed the value of the fudge time2 parameter.
|
|
|
|
When the fudge flag1 is set, the ACTS calling program is activated.
|
|
This program dials each number listed in the phones command of the
|
|
configuration file in turn. If a call attempt fails, the next
|
|
number in the list is dialed. The fudge flag1 and counter are reset
|
|
and the calling program terminated if (a) a valid clock update has
|
|
been determined, (b) no more numbers remain in the list, (c) a
|
|
device fault or timeout occurs, or (d) fudge flag1 is reset
|
|
manually using xntpdc.
|
|
|
|
The NIST timecode message is transmitted at 1200 bps in the
|
|
following format (see the driver source for more information):
|
|
|
|
jjjjj yy-mm-dd hh:mm:ss tt l uuu mmmmm UTC(NIST) *
|
|
|
|
jjjjj = modified Julian day
|
|
yy-mm-dd = year, month, day
|
|
hh:mm:ss = hours, minutes, seconds
|
|
tt = DST indicator (see driver listing)
|
|
l = leap-second warning (see driver listing)
|
|
uuu = DUT1 correction (see driver listing)
|
|
mmmmm = modem calibration (see driver listing)
|
|
on-time = '*'
|
|
|
|
The timecode message is transmitted continuously after a signon
|
|
banner, which this driver ignores. The driver also ignores all but
|
|
the yy-mm-dd, hh:mm:ss and on-time character '*' fields, although
|
|
it checks the format of all fields of the message. A timestamp is
|
|
captured at the '*' character, as required by the ACTS
|
|
specification, and used as the reference time of the timecode. If a
|
|
message with an on-time character of '#' is received, the driver
|
|
updates the propagation delay. The driver disconnects when (a) ten
|
|
valid messages have been received, (b) no message has been received
|
|
for 15 s, (c) an on-time character of '#' is received. These
|
|
messages are processed by a trimmed-mean filter to reduce timing
|
|
noise and then by the usual NTP algorithms to develop the clock
|
|
correction.
|
|
|
|
The behavior of the clock selection algorithm is modified when this
|
|
driver is in use. The algorithm is designed so that this driver
|
|
will never be selected unless no other discipline source is
|
|
available. This can be overridden with the prefer keyword of the
|
|
server configuration command, in which case only this driver will
|
|
be selected for synchronization and all other discipline sources
|
|
will be ignored. Ordinarily, the prefer keyword would be used only
|
|
in automatic mode ehen primary time is to be obtained via ACTS and
|
|
backup NTP peers used only when ACTS fails.
|
|
|
|
Call Management
|
|
|
|
Since ACTS will be a toll call in most areas of the country, it is
|
|
necessary to carefully manage the calling interval. The ACTS call
|
|
program is initiated by setting fudge flag1. This flag can be set
|
|
manually using xntpdc, by a cron job that calls xntpdc, or
|
|
automatically by the driver itself. The fudge flag1 is reset when
|
|
the program terminates after a time determination is comlete or
|
|
when no more numbers remain in the alternate path list, a device
|
|
fault or timeout has occured, or the fudge flag1 has been reset
|
|
using xntpdc.
|
|
|
|
In automatic and backup modes, the driver determines the call
|
|
interval using a procedure depending on the measured prediction
|
|
error and the fudge time2 parameter. If the error exceeds time2 for
|
|
a number of times depending on the current interval, the interval
|
|
is decreased, but not less than about 1000 s. If the error is less
|
|
than time2 for some number of times, the interval is increased, but
|
|
not more than about 18 h. With the default value of zero for fudge
|
|
time2, the interval will increase from 1000 s to the 4000-8000-s
|
|
range, in which the expected accuracy should be in the 1-2-ms
|
|
range. Setting fudge time2 to a large value, like 0.1 s, may result
|
|
in errors of that order, but increase the call interval to the
|
|
maximum. The exact value for each configuration will depend on the
|
|
modem and operating system involved, so some experimentation may be
|
|
necessary.
|
|
|
|
Manual call attempts can be made at any time by setting fudge flag1
|
|
using xntpdc. For example, the xntpdc command
|
|
|
|
fudge 127.127.18.1 flags 1
|
|
|
|
will ask for a key identifier and password and, if authenticated by
|
|
the server, will set flag1. There may be a short delay until the
|
|
expiration of the current poll timeout.
|
|
|
|
The flag1 can be set from a cron job in the following way.
|
|
Construct a file with contents
|
|
|
|
keyid 11
|
|
passwd dialup
|
|
fudge 127.127.18.1 flags 1
|
|
quit
|
|
|
|
Then, run the following program at specified times as required.
|
|
|
|
/usr/local/bin/xntpdc <file
|
|
|
|
Type 19: Heath WWV/WWVH Receiver
|
|
|
|
This driver supports the Heath GC-1000 Most Accurate Clock, with
|
|
RS232C Output Accessory. This is a WWV/WWVH receiver somewhat less
|
|
robust than other supported receivers. Its claimed accuracy is 100
|
|
ms when actually synchronized to the broadcast signal, but this
|
|
doesn't happen even most of the time, due to propagation
|
|
conditions, ambient noise sources, etc. When not synchronized, the
|
|
accuracy is at the whim of the internal clock oscillator, which can
|
|
wander into the sunset without warning. Since the indicated
|
|
precision is 100 ms, expect a host synchronized only to this thing
|
|
to wander to and fro, occasionally being rudely stepped when the
|
|
offset exceeds the default CLOCK_MAX of 128 ms.
|
|
|
|
The internal DIPswitches should be set to operate at 1200 baud in
|
|
MANUAL mode and the current year. The external DIPswitches should
|
|
be set to GMT and 24-hour format. It is very important that the
|
|
year be set correctly in the DIPswitches. Otherwise, the day of
|
|
year will be incorrect after 28 April of a normal or leap year.
|
|
|
|
In MANUAL mode the clock responds to a rising edge of the request
|
|
to send (RTS) modem control line by sending the timecode.
|
|
Therefore, it is necessary that the operating system implement the
|
|
TIOCMBIC and TIOCMBIS ioctl system calls and TIOCM_RTS control bit.
|
|
Present restrictions require the use of a POSIX-compatible
|
|
programming interface, although other interfaces may work as well.
|
|
|
|
The clock message consists of 23 ASCII printing characters in the
|
|
following format:
|
|
|
|
hh:mm:ss.f dd/mm/yr<cr>
|
|
|
|
hh:mm:ss.f = hours, minutes, seconds
|
|
f = deciseconds ('?' when out of spec)
|
|
dd/mm/yr = day, month, year
|
|
|
|
The alarm condition is indicated by '?', rather than a digit, at A.
|
|
Note that 0?:??:??.? is displayed before synchronization is first
|
|
established and hh:mm:ss.? once synchronization is established and
|
|
then lost again for about a day.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic. A fudge
|
|
time1 value of .07 s appears to center the clock offset residuals.
|
|
|
|
Type 20: Generic NMEA GPS Receiver
|
|
|
|
Information not available.
|
|
|
|
Type 21: Motorola Six Gun GPS Receiver
|
|
|
|
Information not available.
|
|
|
|
Type 22: PPS Clock Discipline
|
|
|
|
This driver furnishes an interface for pulse-per-second (PPS)
|
|
signals produced by a cesium clock, timing receiver or related
|
|
equipment. It can be used to remove accumulated jitter and retime a
|
|
secondary server when synchronized to a primary server over a
|
|
congested, wide-area network and before redistributing the time to
|
|
local clients. Note that this driver does not control the system
|
|
clock if the kernel modifications described in the README.kernel
|
|
file have been installed, but it can be useful as a monitoring
|
|
tool.
|
|
|
|
In order for this driver to work, the local clock must be set to
|
|
within +-500 ms by another means, such as a radio clock or NTP
|
|
itself. The 1-pps signal is connected via a serial port and gadget
|
|
box consisting of a one-shot and RS232 level converter. When
|
|
operated at 38.4 kbps with a SPARCstation IPC, this arrangement has
|
|
a worst-case jitter less than 26 us.
|
|
|
|
There are three ways in which this driver can be used. The first
|
|
way uses the LDISC_PPS line discipline and works only for the
|
|
baseboard serial ports of the Sun SPARCstation. The PPS signal is
|
|
connected via a gadget box to the carrier detect (CD) line of a
|
|
serial port and flag3 of the driver configured for that port is
|
|
set. This causes the ppsclock streams module to be configured for
|
|
that port and capture a timestamp at the on-time transition of the
|
|
PPS signal. This driver then reads the timestamp directly by a
|
|
designated ioctl() system call. This provides the most accurate
|
|
time and least jitter of any other scheme. There is no need to
|
|
configure a dedicated device for this purpose, which ordinarily is
|
|
the device used for the associated radio clock.
|
|
|
|
The second way uses the LDISC_CLKPPS line discipline and works for
|
|
any architecture supporting a serial port. If after a few seconds
|
|
this driver finds no ppsclock module configured, it attempts to
|
|
open a serial port device /dev/pps%d, where %d is the unit number,
|
|
and assign the LDISC_CLKPPS line discipline to it. If the line
|
|
discipline fails, no harm is done except the accuracy is reduced
|
|
somewhat. The pulse generator in the gadget box is adjusted to
|
|
produce a start bit of length 26 us at 38400 bps (or 104 us at 9600
|
|
bps). Used with the LDISC_CLKPPS line discipline, this produces an
|
|
ASCII DEL character ('\377') followed by a timestamp at each
|
|
seconds epoch.
|
|
|
|
The third way involves an auxiliary radio clock driver which calls
|
|
the PPS driver with a timestamp captured by that driver. This use
|
|
is documented in the source code for the driver(s) involved.
|
|
|
|
Fudge Factors
|
|
|
|
There are no special fudge factors other than the generic and those
|
|
explicitly defined above. The fudge time1 parameter can be used to
|
|
compensate for miscellaneous UART and OS delays. Allow about 247 us
|
|
for uart delays at 38400 bps and about 1 ms for SunOS streams
|
|
nonsense.
|
|
|
|
Appendix B. Mitigation Rules
|
|
|
|
In order to provide robust backup sources, stratum-1 peers are usually
|
|
operated in a diversity configuration, in which the local server
|
|
operates with a number of remote peers in addition with one or more
|
|
radio clocks operating also as local peers. In these configurations the
|
|
suite of algorithms used in NTP to refine the data from each peer
|
|
separately and to select and weight the data from a number of peers can
|
|
be used with the entire ensemble of remote peers and local radios.
|
|
However, Because of small but significant systematic time offsets
|
|
between the peers, it is in general not possible to achieve the lowest
|
|
jitter and highest stability in these configurations. In addition, there
|
|
are a number of special configurations involving auxiliary radio clock
|
|
outputs, telephone backup services and other special cases, so that a
|
|
set of mitigation rules becomes necessary.
|
|
|
|
The mitigation rules are based on a set of special characteristics of
|
|
the various reference clock drivers configured on the server. For
|
|
instance, it is possible to designate a peer as "preferred," in which
|
|
case, all other things being equal, this peer will be selected for
|
|
synchronization over all other eligible candidates in the clock
|
|
selection procedures. The precise characterization of the prefer peer is
|
|
described below. In addition, when a pulse-per-second (PPS) signal is
|
|
connected via the PPS Clock Discipline Driver (type 22), the
|
|
corresponding peer is called the PPS peer. The manner in which this peer
|
|
operates is described below. When the Undisciplined Local Clock Driver
|
|
(type 1) is configured in the server, this becomes the local-clock peer.
|
|
When the Automated Computer Time Service Driver (type 18) is configured
|
|
in the server, this becomes the ACTS peer. Both the local-clock and ACTS
|
|
peers operates in the manner described in Appendix A. Finally, where
|
|
support is available, the PPS signal may be processed directly by the
|
|
kernel. In the following this will be called the kernel discipline.
|
|
|
|
The mitigation rules apply in the clock selection procedures following
|
|
the sanity checks, intersection algorithm and clustering algorithm. The
|
|
survivors at this point represent the subset of all peers which can
|
|
provide the most accurate, stable time. In the general case, with no
|
|
designated prefer peer, PPS peer or local-clock peer, the mitigation
|
|
rules require all survivors be averaged according to a weight depending
|
|
on the reciprocal of the dispersion, as provided in the NTP
|
|
specification.
|
|
|
|
The mitigation rules establish the choice of system peer, which
|
|
determine the stratum, reference identifier and several other system
|
|
variables which are visible to clients of the local server. In addition,
|
|
they establish which source or combination of sources control the local
|
|
clock. In detail, these rules operate as follows:
|
|
|
|
1. If there is a prefer peer and it is the local-clock peer or the
|
|
ACTS peer; or, if there is a prefer peer and the kernel discipline
|
|
is active, choose the prefer peer as the system peer.
|
|
|
|
2. If the above is not the case and there is a PPS peer, then choose
|
|
it as the system peer and its offset as the system clock offset.
|
|
|
|
3. If the above is not the case and there is a prefer peer (not the
|
|
local-clock or ACTS peer in this case), then choose it as the
|
|
system peer and its offset as the system clock offset.
|
|
|
|
4. If the above is not the case and the peer previously chosen as the
|
|
system peer is in the surviving population, then choose it as the
|
|
system peer and average its offset along with the other survivors
|
|
to determine the system clock offset. This behavior is designed to
|
|
avoid excess jitter due to "clockhopping," when switching the
|
|
system peer would not materially improve the time accuracy.
|
|
|
|
5. If the above is not the case, then choose the first candidate in
|
|
the list of survivors ranked in order of synchronization distance
|
|
and average its offset along with the other survivors to determine
|
|
the system clock offset. This is the default case and the only case
|
|
considered in the current NTP specification.
|
|
|
|
The specific interpretation of the prefer peer and PPS peer require some
|
|
explanation, which is given in following sections.
|
|
|
|
B.1. Using the prefer Keyword
|
|
|
|
For the reasons stated previously, a scheme has been implemented in NTP
|
|
to provide an intelligent mitigation between various classes of peers,
|
|
one designed to provide the best quality time without compromising the
|
|
normal operation of the NTP algorithms. This scheme in its present form
|
|
is not an integral component of the NTP specification. but is likely to
|
|
be included in future versions of the specification. The scheme is based
|
|
on the "preferred peer," which is specified by including the prefer
|
|
keyword with the associated server or peer command in the configuration
|
|
file. This keyword can be used with any peer or server, but is most
|
|
commonly used with a radio clock server.
|
|
|
|
The prefer scheme works on the set of peers that have survived the
|
|
sanity and intersection algorithms of the clock select procedures.
|
|
Ordinarily, the members of this set can be considered truechimers and
|
|
any one of them could in principle provide correct time; however, due to
|
|
various error contributions, not all can provide the most stable time.
|
|
The job of the clustering algorithm, which is invoked at this point, is
|
|
to select the best subset of the survivors providing the least variance
|
|
in the combined ensemble compared to the variance in each member of the
|
|
subset. The detailed operation of the clustering algorithm, which are
|
|
given in the specification, are not important here, other than to point
|
|
out it operates in rounds, where a survivor, presumably the worst of the
|
|
lot, is discarded in each round until one of several termination
|
|
conditions is met.
|
|
|
|
In the prefer scheme the clustering algorithm is modified so that the
|
|
prefer peer is never discarded; on the contrary, its potential removal
|
|
becomes a termination condition. If the original algorithm were about to
|
|
toss out the prefer peer, the algorithm terminates right there. The
|
|
prefer peer can still be discarded by the sanity and intersection
|
|
algorithms, of course, but it will always survive the clustering
|
|
algorithm. A preferred peer retains that designation as long as it
|
|
survives the intersection algorithm. If for some reason the prefer peer
|
|
fails to survive the intersection algorithm, either because it was
|
|
declared a falseticker or became unreachable, it loses that designation
|
|
and the clock selection remitigates as described above.
|
|
|
|
Along with this behavior, the clock select procedures are modified so
|
|
that the combining algorithm is not used when a prefer (or PPS) peer is
|
|
present. Instead, the offset of the prefer (or PPS) peer is used
|
|
exclusively as the synchronization source. In the usual case involving a
|
|
radio clock and a flock of remote stratum-1 peers, and with the radio
|
|
clock designated a prefer peer, the result is that the high quality
|
|
radio time disciplines the server clock as long as the radio itself
|
|
remains operational and with valid time, as determined from the remote
|
|
peers, sanity algorithm and intersection algorithm.
|
|
|
|
While the model does not forbid it, it does not seem useful to designate
|
|
more than one peer as preferred, since the additional complexities to
|
|
mitigate among them do not seem justified from on the air experience.
|
|
Note that the prefer peer interacts with the PPS peer discussed in
|
|
Appendix C. It also interacts with the Undisciplined Local Clock Driver
|
|
(type 1), as described in Appendix A. See the main text for the
|
|
mitigation rules applying to the general case.
|
|
|
|
B.2. Using the Pulse-per-Second (PPS) Signal
|
|
|
|
Most radio clocks are connected using a serial port operating at speeds
|
|
of 9600 bps or lower. The accuracy using typical timecode formats, where
|
|
the on-time epoch is indicated by a designated ASCII character, like
|
|
carriage-return <cr>, is limited to a millisecond at best and a few
|
|
milliseconds in typical cases. However, some radios produce a precision
|
|
pulse-per-second (PPS) signal which can be used to improve the accuracy
|
|
in typical workstation servers to the order of a few tens of
|
|
microseconds. The details of how this can be accomplished are discussed
|
|
in the README.magic file; the following discusses how this signal is
|
|
implemented and configured in a typical working server.
|
|
|
|
First, it should be pointed out that the PPS signal is inherently
|
|
ambiguous, in that it provides a precise seconds epoch, but does not
|
|
provide a way to number the seconds. In principle and most commonly,
|
|
another source of synchronization, either the timecode from an
|
|
associated radio clock, or even a set of remote peers, is available to
|
|
perform that function. In all cases a specific, configured peer or
|
|
server must be designated as associated with the PPS signal. This is
|
|
done by including the prefer keyword with the associated server or peer
|
|
command in the configuration file. This PPS signal can be associated in
|
|
this way any peer or server, but is most commonly used with the radio
|
|
clock generating the PPS signal.
|
|
|
|
The PPS signal is processed by a special PPS Clock Discipline Driver
|
|
(type 22) described in Appendix A. That description specifies the
|
|
hardware configurations in which this signal can be connected to the
|
|
server. This driver replaces the former scheme based on conditional
|
|
compilation and the PPS, CLK and PPSCLK compile-time switches.
|
|
Regardless of method, the driver, like all other drivers, is mitigated
|
|
in the manner described for the prefer peer in Appendix B. However, in
|
|
the case of the PPS peer, the behavior is slightly more complex.
|
|
|
|
First, in order for the PPS peer to be considered at all, its associated
|
|
prefer peer must have survived the sanity and intersection algorithms
|
|
and have been designated the prefer peer. This insures that the radio
|
|
clock hardware is operating correctly and that, presumably, the PPS
|
|
signal is operating correctly as well. Second, the absolute time offset
|
|
from that peer must be less than CLOCK_MAX, the gradual-adjustment
|
|
range, which is ordinarily set at 128 ms, or well within the +-0.5-s
|
|
unambiguous range of the PPS signal itself. Finally, the time offsets
|
|
generated by the PPS peer are propagated via the clock filter to the
|
|
clock selection procedures just like any other peer. Should these pass
|
|
the sanity and intersection algorithms, they will show up along with the
|
|
offsets of the prefer peer itself. Note that, unlike the prefer peer,
|
|
the PPS peer samples are not protected from discard by the clustering
|
|
algorithm. These complicated procedures insure that the PPS offsets
|
|
developed in this way are the most accurate, reliable available for
|
|
synchronization.
|
|
|
|
A PPS peer retains that designation as long as it survives the
|
|
intersection algorithm; however, like any other clock driver, it runs a
|
|
reachability algortihm on the PPS signal itself. If for some reason the
|
|
signal fails or displays gross errors, the PPS peer will either become
|
|
unreachable or stray out of the survivor population. In this case the
|
|
clock selection remitigates as described above.
|
|
|
|
Finally, the mitigation procedures described above for the prefer peer
|
|
are modified so that, if the PPS peer survives the clustering algorithm,
|
|
its offset is mitigated over the prefer peer offset; in other words in
|
|
case of ties, the PPS offset wins. See the main text for the mitigation
|
|
rules applying to the general case.
|
|
|
|
B.3. Using the Kernel Discipline
|
|
|
|
Code to implement the kernel discipline is a special feature that can be
|
|
incorporated in the kernel of some workstations as described in the
|
|
README.kernel file. The discipline provides for the control of the local
|
|
clock oscillator time and/or frequency by means of an external PPS
|
|
signal interfaced via a modem control lead. As the PPS signal is derived
|
|
from external equipment, cables, etc., which sometimes fail, a good deal
|
|
of error checking is done in the kernel to detect signal failure and
|
|
excessive noise.
|
|
|
|
In order to operate, the kernel discipline must be enabled and the
|
|
signal must be present and within nominal jitter and wander error
|
|
tolerances. In the NTP daemon the kernel is enabled only when the prefer
|
|
peer is among the survivors of the clustering algorithm, as described
|
|
above. Then, the PPS peer is designated the prefer peer as long as the
|
|
PPS signal is present and operating within tolerances. Under these
|
|
conditions the kernel disregards updates produced by the NTP daemon and
|
|
uses its internal PPS source instead. The kernel maintains a watchdog
|
|
timer for the PPS signal; if the signal has not been heard or is out of
|
|
tolerance for more than some interval, currently two minutes, the kernel
|
|
discipline is declared inoperable and operation continues as if it were
|
|
not present.
|
|
Appendix C. NTP Local Clock Discipline
|
|
|
|
Implementation of the ACTS driver caused somewhat of a shakeup in the
|
|
NTP local clock model and implementation. The model described in the
|
|
specification RFC-1305 is based on a phase-lock loop (PLL) design, which
|
|
is optimum or near optimum for the update intervals used for NTP peers
|
|
and radio clocks, ordinarily in the range 64-1024 s. However, the ACTS
|
|
driver must operate with update intervals in the range well above 1024
|
|
s, where the performance of the PLL model deteriorates. As suggested by
|
|
Judah Levine of NIST and used in his "lockclock" algorithm, a hybrid
|
|
frequency-lock loop (FLL) gives better performance at the longer update
|
|
intervals up to a maximum depending on the acceptable error bound.
|
|
|
|
In a series of experiments and simulations, it was verified that the PLL
|
|
model provides better performance in the regime less than about 1000 s,
|
|
while the FLL model provides better performance above that. The
|
|
parameters of each model were optimized by simulation for the lowest
|
|
time and frequency error using data collected on an undisciplined
|
|
computer clock oscillator over a period of about two weeks. The PLL/FLL
|
|
hybrid loop has been implemented in NTP, along with certain other
|
|
refinements described below. While it was designed primarily with ACTS
|
|
in mind, it can be used with any NTP peer or radio clock, should that
|
|
prove useful.
|
|
|
|
To take advantage of this feature for other than the ACTS driver, where
|
|
it is automatic, note that the default minimum poll interval is 64 s and
|
|
default maximum poll interval 1024 s (for the ACTS driver the default
|
|
minimum is 1024 s and default maximum 16384 s). However, using the
|
|
minpoll and/or maxpoll parameters of the server or peer commands in the
|
|
configuration file, it is possible to set the minimum poll interval as
|
|
low as 16 s and the maximum poll interval as high as 16384 s. Poll
|
|
intervals less than 64 s are useful if an exceptionally quick lock is
|
|
required, like in real-time or portable systems. Poll intervals above
|
|
1024 s, other than ACTS, may be useful to reduce traffic in some
|
|
situations, such as when charges are made on a per-packet basis.
|
|
|
|
Another modification to the stock NTP local clock discipline is to avoid
|
|
errors due to old data. From a study of the stability characteristics of
|
|
typical computer clock oscillators using both experiment and simulation,
|
|
it was determined that data used to discipline the PLL are not generally
|
|
useful if older than about 1000 s. This corresponds roughly to the knee
|
|
in the Allan variance characteristic measured for a typical workstation
|
|
oscillator. The NTP clock filter algorithm was modified to adjust the
|
|
effective length of the shift register so that samples older than about
|
|
1000 s are not used to determine the filtered offset, delay and
|
|
dispersion values. This design has the useful byproduct that the time to
|
|
acquire lock when first coming up and to declare unreachability is
|
|
independent of the poll interval.
|
|
|
|
A problem which has recurred on every occasion a leap second has been
|
|
inserted in the UTC timescale is that not all radio clocks detect and
|
|
implement the leap event. As a result, some radios sail right through
|
|
the leap, become confused for periods up to 15 minutes, then reacquire
|
|
lock. In order to cope with this, as well as other occasions where
|
|
atypically large offsets occur, the NTP clock discipline has been
|
|
modified to disregard offsets over 128 ms, unless (a) first coming up,
|
|
(b) first returning to service after a period when unsynchronized, or
|
|
(c) an interval of about 15 minutes has elapsed since the last update
|
|
less than 128 ms was received. In addition, the discipline has been
|
|
modified so that, if the first offset received after coming up is less
|
|
than 128 ms, the local clock is immediately reset to that offset without
|
|
affecting the PLL variables.
|
|
|
|
It has been the experience of some users that, when first installed in a
|
|
system, the NTP clock discipline fails to reliably lock to other peers
|
|
and servers as configured. The indications are that the daemon locks for
|
|
some period of time, but is unable to stabilize the frequency estimate.
|
|
As the result, the time offsets eventually climb above 128 ms and the
|
|
discipline unlocks again. After the 15-minute timeout, the daemon locks
|
|
again and the cycle repeats. The problem here is that the intrinsic
|
|
frequency error of the local clock exceeds the design capture range of
|
|
the PLL, 100 ppm. This particular limit was selected as a compromise
|
|
between useful maximum error indications and the tolerances found in
|
|
typical computer clock oscillators.
|
|
|
|
In spite of the tolerance assumed in the NTP specification of 100 ppm,
|
|
the NTP daemon for Unix can operate with an intrinsic frequency error of
|
|
over 380 ppm, depending on the values of tick and tickadj selected by
|
|
the tickadj program. However, with errors that large, the PLL will not
|
|
reliably lock, and the behavior noted above can occur. Formerly, the
|
|
only remedial in cases where this happens waas a somewhat painful manual
|
|
process where the nominal oscillator frequency is measured by some other
|
|
means, such as eyeball-and-wristwatch, and a specific drift file
|
|
(ntp.drift) crafted.
|
|
|
|
In order to avoid the above problem, the NTP clock discipline has been
|
|
modified to measure the frequency during periods when not locked to
|
|
another server or radio clock. Such periods occur when the time offset
|
|
wanders through and beyond the 128-ms window as described above. When
|
|
synchronization is reestablished, the working frequency used by NTP is
|
|
initialized with the measured value. Since a precise frequency
|
|
determination is not always possible under these chaotic conditions, it
|
|
may take more than one cycle of this type to get the residual error
|
|
below 100 ppm and reliable lock established.
|
|
|
|
David L. Mills <mills@udel.edu>
|
|
Electrical Engineering Department
|
|
University of Delaware
|
|
Newark, DE 19716
|
|
302 831 8247 fax 302 831 4316
|
|
|
|
3 July 1994
|