summaryrefslogtreecommitdiffstats
path: root/usr.sbin/xntpd/refclocks/rconfig
blob: e49c559bf797e961586456811891d61819160dbd (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
120
121
122
123
124
125
126
127
128
129
130
#!/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;'`"
  DEFSLOCAL="`egrep '^[ 	]*DEFS_LOCAL[ 	]*=' Config.local | sed 's/\([^#]*\)#.*$/\1/g; s/[ 	]*DEFS_LOCAL[ 	]*=//g; s/-D//g; s/[ 	][ 	]*/ /g; s/^ *//g; s/ *$//g;'`"
  if [ ! "$REFCONF" ]; then
    echo
    echo "Current configuration"
    echo
    if check "$DEFSLOCAL" '$0 ~ /MCAST/'; then
      echo "==> MULTICAST SUPPORT (if available)"
      echo
    fi
    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
    if (check "$REFCONF" '$0 ~ /MCAST/' ||
	( [ ! "$REFCONF" ] && query "Do you want allow for multicast support (if available) ?" y)); then
	MCAST="-DMCAST"
      else
	MCAST=""
    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 $MCAST"'/;' \
	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 $MCAST"
      echo
      echo "Configuration updated"
    else
      echo "Configuration update FAILED"
    fi
    rm -f "$RCONFIG"
  else
    :;
  fi
fi
OpenPOWER on IntegriCloud