Merge branch 'feature/bash-logging-filter/BK-2020-02' of https://zdv2.bktei.com/gitwe...
[EVA-2020-02.git] / doc / time / README.org
1 #+TITLE: Ninfacyzga-1 Time Tracking
2 #+AUTHOR: Steven Baltakatei Sandoval
3 #+EMAIL: baltakatei@gmail.com
4 * Time Tracking
5 ** About
6 This document was created by Steven Baltakatei Sandoval on
7 ~2020-07-23T22:27Z~ under a [[https://creativecommons.org/licenses/by-sa/4.0/][Creative Commons BY-SA 4.0 license]]. It
8 was updated by Steven Baltakatei Sandoval on ~2020-10-16T22:26Z~
9
10 ** Narrative
11 The ~ninfacyzga-01~ device is equipped with an Ozzmaker BerryGPS-IMU
12 module which provides time and location data to ~gpsd~ and ~ntpsec~. The
13 time is provided by GPS satellites which themselves are
14 equipped [fn:nasa_20020408_atomicclock] with atomic clocks. This
15 extremely accurate set of clocks are needed since a GPS receiver
16 calculates its position in space using a General Relativity
17 calculation that uses the small variations in the time stamps received
18 from each satellite. This means that ~gpsd~ may be used to set the
19 system clock without a need for an internet connection to a default
20 Debian time server; ~ninfacyzga-01~ can be its own time server.
21
22 [fn:nasa_20020408_atomicclock] Title:[[https://science.nasa.gov/science-news/science-at-nasa/2002/08apr_atomicclock/][Tick-Tock Atomic Clock]];
23 Date:2002-04-08; Website:NASA.gov; [[https://web.archive.org/web/20100429141752/http://science.nasa.gov/science-news/science-at-nasa/2002/08apr_atomicclock/][Archive-link]]; Archive-date:
24 2010-04-29
25
26 ** Description
27 *** Hardware
28 Ozzmaker BerryGPS-IMU, Version 3 (see [[https://ozzmaker.com/berrygps-berrygps-imu-quick-start-guide/][ref]]).
29 *** Software
30 - [[https://tracker.debian.org/pkg/gpsd][~gpsd~]] : A background daemon app capable of interfacing with the
31 [[https://ozzmaker.com/berrygps-berrygps-imu-quick-start-guide/][Ozzmaker BerryGPS-IMU]]'s GPS submodule. Installed and initialized by
32 ~apt~. Should be installed along with the ~gpsd-clients~
33 package. This procedure was developed with ~gpsd~ version
34
35 - [[https://tracker.debian.org/pkg/ntpsec][~ntpsec~]] : A security-hardned version of [[https://tracker.debian.org/pkg/ntp][~ntp~]] which is a "[[https://en.wikipedia.org/wiki/Network_Time_Protocol][Network
36 Time Protocol]]" app that synchronizes the system clock with local or
37 remote time servers or devices. It is capable of extracting time
38 data from a GPS signal handled by ~gpsd~. It is also capable of
39 using the high precision PPS (pulse-per-second) signal handled by
40 ~gpsd~. Installed via ~apt~. This procedure was developed with
41 ~ntpsec~ version ~1.1.3~.
42
43 ** Operating Procedures
44 *** Initial Startup
45 **** Perform initial setup.
46 See [[file:../setup/README.org][Main Setup]] procedure.
47 **** Install Hardware for time tracking
48 See [[https://ozzmaker.com/forums/topic/connecting-gps-pps-pin/][this]] Ozzmaker forum topic about connecting the BerryGPS-IMU
49 ~T_PULSE~ pin to GPIO 18.
50
51 #+CAPTION: An image showing how to connect the PPS signal from an Ozzmaker BerryGPS-IMU board to a Raspberry Pi Zero W.
52 #+NAME: fig:PPS_BERRYGPS_RASPIZW
53 [[../../img/Compact_Stratum_1_NTP_time_server_hardware,_October_2020.jpg]]
54
55 Connect the ~T_PULSE~ connection on the BerryGPS-IMU-3 to GPIO pin 18
56 (ex: with solder and wire) in order to provide the PPS data signal
57 generated by the BerryGPS-IMU to the Raspberry Pi. Processing of this
58 data signal is handled by adding a line to ~/boot/config.txt~ in the
59 next section ("Install Software").
60
61 Note: If it is desired to specify a custom GPIO pin besides the one
62 recommended, see this [[https://raspberryautomation.com/connect-multiple-ds18b20-temperature-sensors-to-a-raspberry-pi/][Raspberry Autom]] article.
63
64 **** Install Software for time tracking
65 The time tracking function can be performed by two programs: ~gpsd~
66 and ~ntpsec~.
67
68 Basically, two things need to happen:
69
70 1. ~gpsd~ needs to be pointed towards the correct device files for
71 incoming GPS data (in NMEA format) and the PPS signal ("pulse per
72 second"; a high precision time signal).
73
74 2. ~ntpsec~ needs to be pointed towards the correct local IP addresses
75 where ~gpsd~ provides GPS data and the PPS signal.
76
77 ~gpsd~ then will provide GPS and PPS data to ~ntpsec~ via a "shared
78 memory driver".
79
80 ***** Install packages via ~apt~
81 Run the following command to install the required packages.
82 : $ sudo apt install gpsd gpsd-clients python-gps pps-tools ntpsec
83
84 ***** Enable PPS device
85 Modify the ~/boot/config.txt~ file in order to tell the Raspberry Pi
86 to expect PPS data on ~BCM 18~ (pin number 12; see [[https://pinout.xyz/][link]]). This is done
87 by adding the following line to ~/boot/config.txt~ as described on
88 [[https://ozzmaker.com/forums/topic/problems-with-pps-on-a-pi0w-running-raspian-and-attached-to-a-berrygps-imuv3/][this Ozzmaker page]]:
89
90 : dtoverlay=pps-gpio,gpiopin=18
91
92 The ~/boot/config.txt~ file can be modified via:
93
94 : $ sudo nano /boot/config.txt
95
96 PPS data can be confirmed by running:
97
98 #+BEGIN_EXAMPLE
99 $ sudo su -
100 # ppstest /dev/pps0
101 trying PPS source "/dev/pps0"
102 found PPS source "/dev/pps0"
103 ok, found 1 source(s), now start fetching data...
104 source 0 - assert 1595708074.003644641, sequence: 219 - clear 0.000000000, sequence: 0
105 source 0 - assert 1595708075.003709620, sequence: 220 - clear 0.000000000, sequence: 0
106 source 0 - assert 1595708076.003779580, sequence: 221 - clear 0.000000000, sequence: 0
107 source 0 - assert 1595708077.003850580, sequence: 222 - clear 0.000000000, sequence: 0
108 #+END_EXAMPLE
109
110 Note: For older Raspberry Pi models, it may be necessary to enable
111 ~pps-gpio~ via modifications to ~/etc/modules~ (see [[https://www.raspberrypi.org/forums/viewtopic.php?p=757747#p757747][link]]).
112
113 ***** Enable GPS device
114 The Ozzmaker BerryGPS-IMU makes NMEA sentences available via the
115 serial "UART" device ~/dev/ttyAMA0~. If bluetooth has not been
116 disabled, the Raspberry Pi OS automatically creates a software "UART"
117 device at ~/dev/serial0~. See the "[[file:~/git-OC/ninfacyzga-01/doc/setup/README.org::*Disable%20Bluetooth][Disable Bluetooth]]" section in the
118 [[file:../setup/README.org][Main Setup]] Initial Startup procedure for instructions on how to
119 disable bluetooth to free up ~/dev/ttyAMA0~ for use by ~gpsd~.
120
121 Note: Older ~ntp~ documentation indicates that ~ntp~ (and presumably
122 ~ntpsec~ might be able to access GPS data (ex: NMEA sentences) without
123 the aid of ~gpsd~ itself if the data is available at a device named
124 ~/dev/ggp0~. Similarly, the same might apply to PPS data and the
125 ~/dev/gpspps0~ device. However, since the Raspberry Pi OS overlay
126 system automatically creates ~/dev/pps0~ using the modifications to
127 ~/boot/config.txt~ (described [[*Enable PPS device][elsewhere]] in this procedure).
128
129 ***** Setup ~gpsd~
130 See the "[[file:~/git-OC/ninfacyzga-01/doc/location/README.org::*Setup%20~gpsd~][Setup ~gpsd~]]" subsection within the "Initial Startup" section
131 of the Location Logging [[file:~/git-OC/ninfacyzga-01/doc/location/README.org][~README.org~]] file. There is one additional
132 change that must be made which is to add a ~/dev/pps0~ item to the
133 ~DEVICES=~ line in ~/etc/default/gpsd~ like so:
134
135 : DEVICES="/dev/ttyAMA0 /dev/pps0"
136
137 ~/dev/ttyAMA0~ is where ~gpsd~ can get NMEA data from the GPS unit.
138
139 ~/dev/pps0~ is where ~gpsd~ can get a PPS signal.
140
141 As an example, the following lines will be present in
142 ~/etc/default/gpsd~ if both location and time tracking are set up:
143
144 #+BEGIN_EXAMPLE
145 START_DAEMON="true"
146 USBAUTO="false"
147 DEVICES="/dev/ttyAMA0 /dev/pps0"
148 GPSD_OPTIONS="-n"
149 #+END_EXAMPLE
150
151 ***** Setup ~ntpsec~
152 The ~ntpsec~ configuration file at ~/etc/ntpsec/ntp.conf~ must be
153 modified to tell ~ntpsec~ how to retrieve and interpret the GPS and
154 PPS data provided by ~gpsd~.
155
156 In summary, lines need to be added telling ~ntpsec~ how often to poll
157 certain sources (local or remote) for time information as well as how
158 to prioritize and label information from each source.
159
160 ~ntpsec~ uses syntax simplified from that of ~ntp~. Specifically, it
161 recommends use of the ~refclock~ keyword for configuring local
162 hardware clocks such as GPS and PPS devices.
163
164 Below is an example of lines that may be added to
165 ~/etc/ntpsec/ntp.conf~ in order to ensure that the system clock will always have
166
167 #+BEGIN_EXAMPLE
168 # Local time sources
169
170 # Kernel PPS (precision seconds; driver 22)
171 refclock pps unit 0 refid kPPS flag3 1 minpoll 4 maxpoll 4 stratum 1
172
173 # GPS PPS reference (precision seconds; driver 28; root) (NTP1)
174 refclock shm unit 1 refid PPS minpoll 4 maxpoll 4 iburst stratum 1
175
176 # GPS Serial data reference (coarse time; driver28; root) (NTP0)
177 refclock shm unit 0 refid GPS prefer time1 0.109 minpoll 4 maxpoll 4 iburst stratum 1
178
179 # GPS PPS reference (precision seconds; driver 28; user) (NTP2)
180 refclock shm unit 2 refid PPSuser minpoll 4 maxpoll 4 iburst stratum 1
181
182 # Tolerate outliers (useful for coarse clocks)
183 tos mindist 0.500
184 #+END_EXAMPLE
185
186 A complete working example of an ~ntp.conf~ file is found in Appendix
187 A of this document.
188
189 Commands useful for examining the shared memory driver used by ~gpsd~
190 and ~ntpsec~ are:
191
192 - ~sudo ntpshmmon~ : Shows live output of data using the shared memory
193 driver. ([[https://gpsd.gitlab.io/gpsd/gpsd-time-service-howto.html][ref]])
194
195 - ~sudo ipcs -m~ : Show live segments of the shared memory. ([[https://gpsd.gitlab.io/gpsd/gpsd-time-service-howto.html][ref]])
196
197 General references for this configuration file are:
198
199 - "Raspberry Pi as a Stratum-1 NTP Server - Updating to the final NTP
200 configuration file" by David Taylor. [[http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html#ntp-conf][Link]]. Date: 2020-03-24. Note:
201 An example of kernel PPS transfer from ~gpsd~ to ~ntp~ via
202 ~127.127.22.0~.
203
204 - "GPSD Time Service HOWTO" by Garry E. Miller. [[https://gpsd.gitlab.io/gpsd/gpsd-time-service-howto.html][Link]]. Date:
205 2020-06-28. Note: Explains how shared memory segments available at
206 ~127.127.28.0~, ~127.127.28.1~, ~127.127.28.2~, etc. work in context
207 of an ~ntp~ configuration file.
208
209 - "Building a Stratum 1 NTP Server with a Raspberry Pi 4 and Adafruit
210 Ultimate GPS Hat". [[http://www.gregledet.net/computers/building-a-stratum-1-ntp-server-with-a-raspberry-pi-4-and-adafruit-ultimate-gps-hat/][Link]]. Date: 2020-02-23. Note: A concise example
211 between ~gpsd~ and ~ntp~ setup for a Raspberry Pi 4 using
212 ~127.127.28.0~ and ~127.127.28.1~. Recommends use of ~ntpsec~
213 instead of ~ntp~.
214
215 Expalantions of some ~ntpsec~ [[https://docs.ntpsec.org/latest/comdex.html][commands and options]] used in the
216 configuration file include:
217
218 - ~refclock~ : An ~ntpsec~ keyword not present in ~ntp-4.2.8~ that is
219 meant to simplify configuration of reference clocks that use certain
220 [[https://docs.ntpsec.org/latest/refclock.html][drivers]] including ~pps~ ([[https://docs.ntpsec.org/latest/driver_pps.html][PPS Clock Discipline]]), ~shm~ ([[https://docs.ntpsec.org/latest/driver_shm.html][Shared Memory
221 Driver]]) . In ~ntp-4.2.8~ and earlier, in order to configure a clock,
222 instead of ~ntpsec~'s one keyword (~refclock~), two keywords would
223 be required (~server~ and ~fudge~).
224
225 - ~server [address]~ : Tells ~ntpsec~ the address to query for time
226 information. May be IP address or URL. Additional options such as
227 ~minpoll~, ~maxpoll~, ~prefer~, and ~true~ may be added.
228
229 - ~prefer~ : Indicates the source should be prioritized in some
230 way. How exactly the ~ntpsec~ mitigation rules (see [[https://docs.ntpsec.org/latest/prefer.html][ref]]) use the
231 ~prefer~ option is complicated but in the context of dealing with a
232 GPS source and a PPS source, the GPS source should have a ~prefer~
233 option. The PPS source may have a ~prefer~ option but it is not
234 necessary; adding ~prefer~ to a PPS source is useful in the corner
235 case that the GPS source is less reliable than another source (ex: a
236 remote clock specified by ~server~).
237
238 - ~... shm ... flag1 1~ : For an ~shm~ driver, tells ~ntpsec~ to
239 ignore the default sanity check that discards any time that is more
240 than 4-hours off from the system clock. Note that ~ntpsec~ treats
241 ~shm flag1 1~ in the opposite manner as ~ntp~ (see [[https://docs.ntpsec.org/latest/driver_shm.html][ref]]).
242
243 - ~... shm ... time1 [float]~ : Tells ~ntpsec~ that a latency
244 time of ~[float]~ seconds is required for data to travel from the
245 address to ~ntpsec~ (ex: a USB hub in the case of a GPS device that
246 connects via USB). (see [[https://gpsd.gitlab.io/gpsd/gpsd-time-service-howto.html#_feeding_ntpd_from_gpsd][ref]]) This number of seconds should be
247 adjusted to reduce the `offset` time of the address indicated in the
248 output of the ~ntpq -pn~ command to near ~0.000~. Note that the
249 units of ~offset~ displayed by ~ntpq -pn~ are in milliseconds.
250
251 - ~... refid [string]~ : Tells ~ntpsec~ a string used to label the source.
252
253 - ~fudge~ : An ~ntp~ keyword that ~ntpsec~ developers do not recommend
254 using; ~ntpsec~ documentation for ~fudge~ is widthdrawn. For local
255 hardware providing GPS and PPS time information, ~fudge~ can mostly
256 be replaced with use of the ~refclock~ keyword instead.
257
258 - ~fudge [address]~ : Tells ~ntpsec~ to consider additional options
259 when evaluating the accuracy of time from a given address.
260
261 - ~fudge [address] ... flag3 1~ : An option that tells ~ntpsec~ to
262 enable "kernel PPS discipline" when interpreting the PPS signal at
263 the address. (see [[http://doc.ntp.org/4.2.8p7/drivers/driver22.html][ref]]).
264
265 - ~stratum 1~ : Tells ~ntpsec~ to label the source as a "stratum 1"
266 time server. This means that it is a clock using NTP that is a
267 canonical (?) time source. For example, a stratum 0 NTP time server
268 would be an atomic clock. A stratum 1 NTP time server could be a
269 clock that uses a GPS receiver to synchronize to said atomic clock.
270
271 - ~iburst~ : Tells ~ntpsec~ how often to query a source.
272
273 - ~fudge [address] ... flag1 [float]~ : See description of ~... shm
274 ... time1 [float]~.
275
276 - ~tos mindist [float]~ : Tells ~ntpsec~ to increase the tolerance for
277 outliers in the clock selection algorithm. Units of ~[float]~ are
278 seconds. The default value is ~0.001~ seconds. This [[http://doc.ntp.org/4.2.6/miscopt.html][reference]]
279 indicates that it is acceptable to raise this value for "clocks with
280 high jitter and a PPS signal". For the device being configured in
281 this guide, this is the case. ~ntpsec~ receives a kernel PPS signal
282 on ~127.127.22.0~ indicating when each second occurs but without
283 information about which second of the day is being ticked. ~ntpsec~
284 receives a coarse time from ~127.127.28.0~ supplied by ~gpsd~ that
285 is derived from the NMEA sentences generated by the GPS receiver;
286 this coarse time (high jitter) lacks the precision of the PPS signal
287 since NMEA sentence transmission times are not well-controlled.
288
289 ****** Disable DHCP services affecting ~ntpsec~
290 Some processes that use [[https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol][DHCP]] (Dynamic Host Configuration Protocol) may
291 cause configuration changes to configuration files of ~ntp~. Since
292 ~ntpsec~ is similar to ~ntp~, it is reasonable to take action to
293 prevent this.
294
295 Remove some files:
296
297 : $ sudo rm /etc/dhcp/dhclient-exit-hooks.d/ntp
298 : $ sudo rm /lib/dhcpcd/dhcpcd-hooks/50-ntp.conf
299
300 In the "request" block of ~dhclient.conf~, remove ~dhcp6.sntp-servers~
301 and ~ntp-servers~.
302
303 : $ sudo nano /etc/dhcp/dhclient.conf
304
305 For example, the following section of ~dhclient.conf~:
306
307 #+BEGIN_EXAMPLE
308 send host-name = gethostname();
309 request subnet-mask, broadcast-address, time-offset, routers,
310 domain-name, domain-name-servers, domain-search, host-name,
311 dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
312 netbios-name-servers, netbios-scope, interface-mtu,
313 rfc3442-classless-static-routes, ntp-servers;
314 #+END_EXAMPLE
315
316 should be changed to:
317
318 #+BEGIN_EXAMPLE
319 send host-name = gethostname();
320 request subnet-mask, broadcast-address, time-offset, routers,
321 domain-name, domain-name-servers, domain-search, host-name,
322 dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn,
323 netbios-name-servers, netbios-scope, interface-mtu,
324 rfc3442-classless-static-routes;
325 #+END_EXAMPLE
326
327 ***** Disable CPU power saving
328 Power saving featurs of the Raspberry Pi Zero W may also be disabled
329 in order to improve accuracy.
330
331 ****** Configure CPU ~scaling_governor~
332 If additional precision is required, the PPS signal may be made more
333 reliable at the cost of increasing CPU power by configuring the CPU to
334 always run at maximum frequency.[fn:se_20180320_raspicpugov] This
335 change can be performed by modifying the following file as root:
336
337 : /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
338
339 The file should consist of one line. Change
340
341 : ondemand
342
343 to
344
345 : performance
346
347 .
348
349 This change can be performed via the ~nano~ text editor by running the
350 following commands:
351
352 : $ sudo su -
353 : # nano /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
354
355 Additionally, in order to prevent the ~raspi-config~ init script from
356 reverting this text file back to ~ondemand~ after a reboot, this
357 script must be disabled via:
358
359 : $ sudo systemctl disable raspi-config
360
361 ****** Configure ~/boot/config.txt~
362 Modify ~/boot/config.txt~ so that it contains these lines in order to
363 disable power saving functions:
364
365 #+BEGIN_EXAMPLE
366 # Disable power saving
367 nohz=off
368 #+END_EXAMPLE
369
370 [fn:se_20180320_raspicpugov] Title:[[https://raspberrypi.stackexchange.com/questions/9034/how-to-change-the-default-governor]["How to change the default governor?"]]; Author:[[https://raspberrypi.stackexchange.com/users/5538/goldilocks][goldilocks]]; Date: 2018-03-20; Website:stackexchange.com;
371
372 *** Normal Startup
373 *** Normal Operation
374 *** Normal Shutdown
375 *** Unscheduled Shutdown
376 ** Appendix A
377 *** Example ~ntp.conf~ for ~ntpsec~
378 Below is an example ~ntp.conf~ file for use with ~ntpsec~.
379
380 #+BEGIN_EXAMPLE
381 # /etc/ntpsec/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
382
383 # Drift file
384 driftfile /var/lib/ntpsec/ntp.drift
385
386 # Leap seconds definition provided by tzdata
387 leapfile /usr/share/zoneinfo/leap-seconds.list
388
389 # Log file
390 #logfile /var/log/ntp.log
391
392
393 # You must create /var/log/ntpsec (owned by ntpsec:ntpsec) to enable logging.
394 #statsdir /var/log/ntpsec/
395 #statistics loopstats peerstats clockstats
396 #filegen loopstats file loopstats type day enable
397 #filegen peerstats file peerstats type day enable
398 #filegen clockstats file clockstats type day enable
399
400
401 # Comment this out if you have a refclock and want it to be able to discipline
402 # the clock by itself (e.g. if the system is not connected to the network).
403 #tos minclock 4 minsane 3
404
405
406 # Local time sources
407
408 # Kernel PPS (precision seconds; driver 22)
409 refclock pps unit 0 refid kPPS flag3 1 minpoll 4 maxpoll 4 stratum 1
410
411 # GPS PPS reference (precision seconds; driver 28; root) (NTP1)
412 refclock shm unit 1 refid PPS minpoll 4 maxpoll 4 iburst stratum 1
413
414 # GPS Serial data reference (coarse time; driver28; root) (NTP0)
415 refclock shm unit 0 refid GPS prefer time1 0.109 minpoll 4 maxpoll 4 iburst stratum 1
416
417 # GPS PPS reference (precision seconds; driver 28; user) (NTP2)
418 refclock shm unit 2 refid PPSuser minpoll 4 maxpoll 4 iburst stratum 1
419
420 # Tolerate outliers (useful for coarse clocks)
421 tos mindist 0.500
422
423
424 # Specify one or more NTP servers.
425
426 # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
427 # pick a different set every time it starts up. Please consider joining the
428 # pool: <https://www.pool.ntp.org/join.html>
429 server time.nist.gov iburst
430 server tick.usno.navy.mil iburst
431 server 0.us.pool.ntp.org iburst
432 #server 0.us.pool.ntp.org iburst
433 #server 0.us.pool.ntp.org iburst
434 #server 0.us.pool.ntp.org iburst
435 pool 0.debian.pool.ntp.org iburst
436 #pool 1.debian.pool.ntp.org iburst
437 #pool 2.debian.pool.ntp.org iburst
438 #pool 3.debian.pool.ntp.org iburst
439
440
441 # Access control configuration; see /usr/share/doc/ntpsec-doc/html/accopt.html
442 # for details.
443 #
444 # Note that "restrict" applies to both servers and clients, so a configuration
445 # that might be intended to block requests from certain clients could also end
446 # up blocking replies from your own upstream servers.
447
448 # By default, exchange time with everybody, but don't allow configuration.
449 restrict default kod nomodify nopeer noquery limited
450
451 # Local users may interrogate the ntp server more closely.
452 restrict 127.0.0.1
453 restrict ::1
454 #+END_EXAMPLE
455
456 * Discard
457
458 ** Transitional ntp to ntpsec config file snippet
459 # Kernel PPS (precision seconds; driver 22)
460 #server 127.127.22.0 minpoll 4 maxpoll 4 true
461 #fudge 127.127.22.0 flag3 1 refid kPPS stratum 1
462 refclock pps unit 0 refid kPPS flag3 1 minpoll 4 maxpoll 4 stratum 1
463
464 # GPS PPS reference (precision seconds; driver 28; root) (NTP1)
465 #server 127.127.28.1 minpoll 4 maxpoll 4 iburst
466 #fudge 127.127.28.1 flag1 1 refid PPS
467 refclock shm unit 1 refid PPS minpoll 4 maxpoll 4 iburst stratum 1
468
469 # GPS Serial data reference (coarse time; driver28; root) (NTP0)
470 #server 127.127.28.0 minpoll 4 maxpoll 4 iburst prefer
471 #fudge 127.127.28.0 flag1 1 time1 0.109 refid GPS stratum 1
472 refclock shm unit 0 refid GPS prefer time1 0.109 minpoll 4 maxpoll 4 iburst stratum 1
473
474 # GPS PPS reference (precision seconds; driver 28; user) (NTP2)
475 #server 127.127.28.2 minpoll 4 maxpoll 4 iburst
476 #fudge 127.127.28.2 flag1 1 refid PPSuser stratum 1
477 refclock shm unit 2 refid PPSuser minpoll 4 maxpoll 4 iburst stratum 1
478
479 # Tolerate outliers (useful for coarse clocks)
480 tos mindist 0.500