Specify maxpoll for HW timestamping (default minpoll + 1) to track the PHC well even when there is little NTP traffic on the interface. After each PHC reading schedule a timeout according to the maxpoll. Polling between minpoll and maxpoll is still triggered by HW timestamps. Wait for the first HW timestamp before adding the timeout to avoid polling PHCs on interfaces that are enabled in the configuration but not used for NTP. Add a new scheduling class to separate polling of different PHCs to avoid too long intervals between processing I/O events.
89 lines
2.6 KiB
Bash
Executable file
89 lines
2.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
. ./test.common
|
|
|
|
test_start "hwtimestamp directive"
|
|
|
|
check_config_h 'HAVE_LINUX_TIMESTAMPING 1' || test_skip
|
|
|
|
export CLKNETSIM_TIMESTAMPING=2
|
|
export CLKNETSIM_PHC_DELAY=1e-6
|
|
export CLKNETSIM_PHC_JITTER=1e-7
|
|
export CLKNETSIM_PHC_JITTER_ASYM=0.4
|
|
|
|
refclock_jitter=1e-8
|
|
refclock_offset=10.0
|
|
min_sync_time=4
|
|
max_sync_time=20
|
|
time_rms_limit=1e-7
|
|
freq_rms_limit=3e-8
|
|
jitter=1e-8
|
|
freq_offset=1e-5
|
|
limit=200
|
|
server_conf="
|
|
clockprecision 1e-9
|
|
hwtimestamp eth0"
|
|
client_server_options="minpoll 0 maxpoll 0 xleave"
|
|
client_chronyd_options="-d"
|
|
|
|
for client_conf in \
|
|
"hwtimestamp eth0 nocrossts
|
|
clockprecision 1e-9" \
|
|
"hwtimestamp eth0
|
|
clockprecision 1e-9
|
|
acquisitionport 123"; do
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_sync || test_fail
|
|
|
|
if check_config_h 'FEAT_DEBUG 1'; then
|
|
check_log_messages "Accepted reading" 0 2 || test_fail
|
|
check_log_messages "Combined .* readings" 190 220 || test_fail
|
|
check_log_messages "HW clock samples" 190 200 || test_fail
|
|
check_log_messages "HW clock reset" 0 0 || test_fail
|
|
check_log_messages "Missing TX timestamp" 1 1 || test_fail
|
|
check_log_messages "Received message.*tss=KH" 195 200 || test_fail
|
|
check_log_messages "Received error.*message.*tss=KH" 195 200 || test_fail
|
|
check_log_messages "Updated RX timestamp.*tss=1" 1 1 || test_fail
|
|
check_log_messages "Updated RX timestamp.*tss=2" 195 200 || test_fail
|
|
check_log_messages "Polling PHC" 195 220 || test_fail
|
|
if echo "$client_conf" | grep -q nocrossts; then
|
|
check_log_messages "update_tx_timestamp.*Updated" 180 200 || test_fail
|
|
check_log_messages "update_tx_timestamp.*Unacceptable" 0 13 || test_fail
|
|
else
|
|
check_log_messages "update_tx_timestamp.*Updated" 50 140 || test_fail
|
|
check_log_messages "update_tx_timestamp.*Unacceptable" 50 140 || test_fail
|
|
fi
|
|
fi
|
|
done
|
|
|
|
server_conf+="
|
|
server 192.168.123.2 minpoll 1 maxpoll 1 noselect"
|
|
|
|
for maxpoll in -1 0 1; do
|
|
client_conf="hwtimestamp eth0 minpoll -1 maxpoll $maxpoll nocrossts"
|
|
run_test || test_fail
|
|
check_chronyd_exit || test_fail
|
|
check_source_selection || test_fail
|
|
check_sync || test_fail
|
|
|
|
if check_config_h 'FEAT_DEBUG 1'; then
|
|
case $maxpoll in
|
|
-1)
|
|
check_log_messages "Polling PHC on eth0$" 360 380 || test_fail
|
|
check_log_messages "Polling PHC.*before" 3 25 || test_fail
|
|
;;
|
|
0)
|
|
check_log_messages "Polling PHC on eth0$" 8 45 || test_fail
|
|
check_log_messages "Polling PHC.*before" 150 190 || test_fail
|
|
;;
|
|
1)
|
|
check_log_messages "Polling PHC on eth0$" 1 1 || test_fail
|
|
check_log_messages "Polling PHC.*before" 194 199 || test_fail
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
|
|
test_pass
|