summaryrefslogtreecommitdiffstats
path: root/usr.sbin/xntpd/refclocks/rconfig
blob: 75f43fad20872ca29648e7b9713a239daed485a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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 -e '-D..*PPS' "$RCONFIG" >/dev/null 2>&1; then
	PPSOK=0
      fi
    done
    if egrep -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
OpenPOWER on IntegriCloud