diff options
Diffstat (limited to 'usr.sbin/xntpd/refclocks/rconfig')
-rw-r--r-- | usr.sbin/xntpd/refclocks/rconfig | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/usr.sbin/xntpd/refclocks/rconfig b/usr.sbin/xntpd/refclocks/rconfig new file mode 100644 index 0000000..727f0a8 --- /dev/null +++ b/usr.sbin/xntpd/refclocks/rconfig @@ -0,0 +1,119 @@ +#!/bin/sh - +# +# Refclock configuration script +# +# batch configuration options (optional arg 1) +# pps related +# PPS - general PPS support +# CLK - CLK line discipline or streams module +# CD - ppsclock or ppsclockd streams module +# LINE - dedicated line +PATH=refclocks:${PATH} +export PATH +RCONFIG=rconf +DLOCAL=dlocal +REFCONF=${1-""} + +. refclocks/setup + +rcfg="`echo refclocks/rclk.*`" + +if [ "$rcfg" = "refclocks/rclk.*" ]; then + echo "no reference clock configuration information available" +else + config="`egrep '^[ ]*CLOCKDEFS[ ]*=' Config.local | sed 's/\([^#]*\)#.*$/\1/g; s/[ ]*CLOCKDEFS[ ]*=//g; s/-D//g; s/[ ][ ]*/ /g; s/^ *//g; s/ *$//g;'`" + DEFS="`egrep '^[ ]*DEFS[ ]*=' Config | sed 's/\([^#]*\)#.*$/\1/g; s/[ ]*DEFS[ ]*=//g; s/-D//g; s/[ ][ ]*/ /g; s/^ *//g; s/ *$//g;'`" + if [ ! "$REFCONF" ]; then + echo + echo "Current configuration" + echo + for i in $rcfg + do + sh $i check "$config" "" "" "$DEFS" "$REFCONF" + done + echo + fi + if [ "$REFCONF" ] || query "Change Configuration" n; then + if [ ! "$REFCONF" ]; then + echo + echo 'Available reference clock drivers' + for i in $rcfg + do + sh $i info "" "" "" "$DEFS" "$REFCONF" + done + echo + fi + :>"$RCONFIG" + PPS="" + PPSFEATURES="" + PPSOK=0 + if check "$REFCONF" '$0 ~ /PLL/' || + ( [ ! "$REFCONF" ] && query "Include support for Kernel PLL" n); then + PPS="-DKERNEL_PLL $PPS" + fi + if check "$REFCONF" '$0 ~ /[^A-Za-z]PPS/' || + ( [ ! "$REFCONF" ] && query "Do you have a PPS (pulse per second) signal" n); then + if check "$DEFS" '$0 ~ /HAVE_BSD_TTYS|STREAM/' && + (check "$REFCONF" '$0 ~ /CLK/' || + ( [ ! "$REFCONF" ] && query "Is the clk line discipline available" n)); then + PPSFEATURES="CLK" + else + if check "$DEFS" '$0 ~ /STREAM/' && + (check "$REFCONF" '$0 ~ /CD/' || + ( [ ! "$REFCONF" ] && query "Is the ppsclock or ppsclocd STREAMS module available" n)); then + PPSFEATURES="CD $PPSFEATURES" + fi + fi + if check "$PPSFEATURES" '$0 ~ /CLK|CD/' && + (check "$REFCONF" '$0 ~ /LINE/' || + ( [ ! "$REFCONF" ] && query "Do you want to use a dedicated serial port for PPS signal" n)); then + if check "$PPSFEATURES" '$0 ~ /CLK/'; then + PPS="-DPPSCLK $PPS" + fi + if check "$PPSFEATURES" '$0 ~ /CD/'; then + PPS="-DPPSCD $PPS" + fi + else + PPSOK=1 + PPS="-DPPS $PPS" + fi + fi + for i in $rcfg + do + sh $i config "$RCONFIG" "$PPSFEATURES" "$PPSOK" "$DEFS" "$REFCONF" + if [ "$PPSOK" -eq 1 ] && egrep -s -e '-D..*PPS' "$RCONFIG" >/dev/null 2>&1; then + PPSOK=0 + fi + done + if egrep -s -e '-D..*PPS' "$RCONFIG" >/dev/null 2>&1; then + PPS="-DPPSPPS $PPS" + fi + CLOCKDEFS="`tr '\012' ' ' < $RCONFIG`" + if check "$CLOCKDEFS" '$0 !~ /^[ ]*$/'; then + PPS="-DREFCLOCK $PPS" + if [ ! "$REFCONF" ]; then + echo + echo "Do not forget to set up the appropriate device links in the /dev directory" + echo + fi + fi + if sed -e 's/^[ ]*CLOCKDEFS[ ]*=.*$/CLOCKDEFS='"$CLOCKDEFS"'/;' \ + -e 's/^[ ]*DEFS_LOCAL[ ]*=.*$/DEFS_LOCAL= $(DEFS_OPT) '"$PPS"'/;' \ + Config.local > Config.local.new; then + mv Config.local Config.local.old && + mv Config.local.new Config.local && + rm -f Config.local.old + echo + echo "New configuration defines:" + echo " CLOCKDEFS=$CLOCKDEFS" + echo " DEFS_LOCAL="'$(DEFS_OPT)'" $PPS" + echo + echo "Configuration updated" + else + echo "Configuration update FAILED" + fi + rm -f "$RCONFIG" + else + :; + fi +fi |