Add "local" option to specify that the reference clock is an unsynchronized clock which is more stable than the system clock (e.g. TCXO, OCXO, or atomic clock) and it should be used as a local standard to stabilize the system clock. Handle the local refclock as a PPS refclock locked to itself which gives the unsynchronized status to be ignored in the source selection. Wait for the refclock to get at least minsamples samples and adjust the clock directly to follow changes in the refclock's sourcestats frequency and offset. There should be at most one refclock specified with this option.
136 lines
3.4 KiB
Bash
Executable file
136 lines
3.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
. ./test.common
|
|
test_start "SHM refclock"
|
|
|
|
check_config_h 'FEAT_REFCLOCK 1' || test_skip
|
|
check_config_h 'FEAT_PHC 1' || test_skip
|
|
check_config_h 'FEAT_CMDMON 1' || test_skip
|
|
|
|
servers=0
|
|
limit=1000
|
|
refclock_jitter=$jitter
|
|
min_sync_time=45
|
|
max_sync_time=70
|
|
chronyc_start=70
|
|
chronyc_conf="tracking"
|
|
|
|
for refclock in "SHM 0" "PHC /dev/ptp0"; do
|
|
client_conf="refclock $refclock stratum 3 delay 1e-3 refid GPS
|
|
logdir tmp
|
|
log refclocks"
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_sync || test_fail
|
|
check_chronyc_output "^Reference ID.*47505300 \(GPS\)
|
|
Stratum.*: 4
|
|
.*
|
|
Root delay : 0.001000000 seconds
|
|
.*
|
|
Update interval : 16\.. seconds
|
|
.*$" || test_fail
|
|
|
|
check_file_messages "20.* GPS.*[0-9] N " 997 1001 refclocks.log || test_fail
|
|
check_file_messages "20.* GPS.*- N " 61 63 refclocks.log || test_fail
|
|
rm -f tmp/refclocks.log
|
|
done
|
|
|
|
if check_config_h 'FEAT_PPS 1'; then
|
|
refclock_offset=0.35
|
|
refclock_jitter=0.05
|
|
|
|
client_conf="
|
|
refclock SHM 0 refid NMEA noselect
|
|
refclock PPS /dev/pps0 lock NMEA
|
|
logdir tmp
|
|
log refclocks"
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_sync || test_fail
|
|
check_chronyc_output "^Reference ID.*50505331 \(PPS1\)
|
|
Stratum.*: 1
|
|
.*
|
|
Root delay : 0\.000000001 seconds
|
|
.*$" || test_fail
|
|
|
|
check_file_messages "20.* PPS1.*[0-9] N " 620 740 refclocks.log || test_fail
|
|
check_file_messages "20.* PPS1.*- N " 60 63 refclocks.log || test_fail
|
|
rm -f tmp/refclocks.log
|
|
|
|
client_conf="
|
|
refclock SHM 0 noselect
|
|
refclock PPS /dev/pps0
|
|
local
|
|
logdir tmp
|
|
log refclocks"
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_sync || test_fail
|
|
check_chronyc_output "^Reference ID.*50505331 \(PPS1\)
|
|
Stratum.*: 10
|
|
.*
|
|
Root delay : 0\.000000001 seconds
|
|
.*$" || test_fail
|
|
|
|
check_file_messages "20.* PPS1.*[0-9] N " 997 1001 refclocks.log || test_fail
|
|
check_file_messages "20.* PPS1.*- N " 60 63 refclocks.log || test_fail
|
|
rm -f tmp/refclocks.log
|
|
|
|
min_sync_time=100
|
|
max_sync_time=220
|
|
chronyc_start=220
|
|
client_conf="
|
|
refclock SHM 0 refid NMEA offset 0.35 delay 0.1
|
|
refclock PPS /dev/pps0
|
|
logdir tmp
|
|
log refclocks"
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_sync || test_fail
|
|
check_chronyc_output "^Reference ID.*50505331 \(PPS1\)
|
|
Stratum.*: 1
|
|
.*
|
|
Root delay : 0\.000000001 seconds
|
|
.*$" || test_fail
|
|
|
|
check_file_messages "20.* PPS1.*[0-9] N " 800 940 refclocks.log || test_fail
|
|
check_file_messages "20.* PPS1.*- N " 50 63 refclocks.log || test_fail
|
|
rm -f tmp/refclocks.log
|
|
fi
|
|
|
|
refclock_offset="(+ 0.399 (sum 1e-3))"
|
|
refclock_jitter=1e-6
|
|
servers=1
|
|
freq_offset="(* 1e-4 (sine 1000))"
|
|
base_delay="(* -1.0 (equal 0.1 (min time 5000) 5000))"
|
|
client_server_options="minpoll 4 maxpoll 4 filter 5 minsamples 64"
|
|
client_conf="
|
|
refclock PHC /dev/ptp0 local poll 2
|
|
logdir tmp
|
|
log refclocks tracking"
|
|
chronyc_conf=""
|
|
limit=10000
|
|
max_sync_time=5000
|
|
time_max_limit=1e-3
|
|
time_rms_limit=5e-4
|
|
freq_max_limit=2e-5
|
|
freq_rms_limit=5e-6
|
|
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_sync || test_fail
|
|
|
|
check_file_messages "20.* PHC0 .* [0-9] ? " 9999 10001 refclocks.log || test_fail
|
|
check_file_messages "20.* PHC0 .* - ? " 2499 2501 refclocks.log || test_fail
|
|
check_file_messages "20.* PHC0 " 0 0 tracking.log || test_fail
|
|
rm -f tmp/refclocks.log tmp/tracking.log
|
|
|
|
test_pass
|