-COMMAND=/usr/bin/chronyc
+#!/bin/sh
+# Set chronyd online/offline status, allow NTP access and add servers from DHCP
-[ -x $COMMAND ] || exit 0
+[ "$ACTION" = ifup -o "$ACTION" = ifdown ] || exit 0
-[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && $COMMAND online
-[ "$ACTION" = "ifdown" -a "$INTERFACE" = "wan" ] && $COMMAND offline
+run_command() {
+ /usr/bin/chronyc -n "$*" > /dev/null 2>&1
+}
+
+run_command tracking || exit 0
+
+. /lib/functions/network.sh
+
+network_find_wan iface4
+network_find_wan6 iface6
+run_command $([ -n "$iface4" ] && echo online || echo offline) 0.0.0.0/0.0.0.0
+run_command $([ -n "$iface6" ] && echo online || echo offline) ::/0
+
+[ "$ACTION" = ifup ] || exit 0
+
+. /lib/functions.sh
+. /etc/init.d/chronyd
+
+config_load chrony
+
+config_foreach handle_allow allow | while read command; do
+ run_command "$command"
+done
+
+# Add servers from DHCP only if the config has a dhcp_ntp_server section
+[ -z "$(config_foreach echo dhcp_ntp_server)" ] && exit 0
+
+. /usr/share/libubox/jshn.sh
+
+for iface in $iface4 $iface6; do
+ json_load "$(ifstatus $iface)"
+ json_select data
+ json_get_var dhcp_ntp_servers ntpserver
+
+ for server in $dhcp_ntp_servers; do
+ run_command add $(NTP_SOURCE_HOSTNAME=$server config_foreach \
+ handle_source dhcp_ntp_server server)
+ done
+done
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006-2015 OpenWrt.org
-START=60
+START=15
USE_PROCD=1
PROG=/usr/sbin/chronyd
CONFIGFILE=/var/etc/chrony.conf
+INCLUDEFILE=/etc/chrony/chrony.conf
handle_source() {
local cfg=$1 sourcetype=$2 hostname minpoll maxpoll iburst
- config_get hostname "$cfg" hostname
+ hostname=$NTP_SOURCE_HOSTNAME
+ [ -z "$hostname" ] && config_get hostname "$cfg" hostname
[ -z "$hostname" ] && return
config_get minpoll "$cfg" minpoll
config_get maxpoll "$cfg" maxpoll
[ -n "$minpoll" ] && echo minpoll $minpoll
[ -n "$maxpoll" ] && echo maxpoll $maxpoll
[ "$iburst" = "1" ] && echo iburst
- ) >> $CONFIGFILE
+ )
}
handle_allow() {
config_get iface "$cfg" interface
if [ "$wan_iface" = "$iface" ]; then
- echo allow >> $CONFIGFILE
+ echo allow 0/0
+ elif [ "$wan6_iface" = "$iface" ]; then
+ echo allow ::/0
else
network_get_subnets subnets $iface || \
network_get_subnets subnets6 $iface || continue
for subnet in $subnets $subnets6; do
- echo allow $subnet >> $CONFIGFILE
+ echo allow $subnet
done
fi
}
config_get threshold "$cfg" threshold
config_get limit "$cfg" limit
[ -z "$threshold" -o -z "$limit" ] && return
- echo makestep $threshold $limit >> $CONFIGFILE
+ echo makestep $threshold $limit
}
start_service() {
procd_open_instance
procd_set_param command $PROG -n -f $CONFIGFILE
procd_set_param file $CONFIGFILE
- procd_set_param file /etc/chrony/chrony.conf
+ procd_set_param file $INCLUDEFILE
procd_close_instance
- echo include /etc/chrony/chrony.conf > $CONFIGFILE
+ config_load chrony
+ mkdir -p $(dirname $CONFIGFILE)
- config_load ntpd
- config_foreach handle_source server server
- config_foreach handle_source pool pool
- config_foreach handle_source peer peer
- config_foreach handle_allow allow
- config_foreach handle_makestep makestep
+ (
+ echo include $INCLUDEFILE
+ config_foreach handle_source server server
+ config_foreach handle_source pool pool
+ config_foreach handle_source peer peer
+ config_foreach handle_allow allow
+ config_foreach handle_makestep makestep
+ ) > $CONFIGFILE
}