#!/bin/sh /etc/rc.common # Copyright (C) 2006 OpenWrt.org START=60 start() { [ ! -f /var/run/chronyd.pid ] && ( /usr/sbin/chronyd -f /etc/chrony/chrony.conf local NTP_SERVERS local NTP_SERVER local CLIENT_NETWORKS local NETNAME config_load ntpd config_get NTP_SERVERS cfg1 TimeServers config_get CLIENT_NETWORKS cfg1 ClientAccessFrom CHRONY_KEY=$(awk '/^1 / { print $2; }' /etc/chrony/chrony.keys) include /lib/network scan_interfaces # Define servers and do a rapid series of time measurements # to get up to date ( echo password $CHRONY_KEY for NTP_SERVER in $NTP_SERVERS; do echo add server $NTP_SERVER done echo burst 5/5 ) | chronyc > /dev/null 2>&1 # ... wait until a reference ID is found ... while chronyc tracking | grep 'Reference ID.*0.0.0.0' >/dev/null ; do sleep 1; done # ... and finally, adjust the time in a single step # and allow clients to access the server ( echo password $CHRONY_KEY echo makestep for NETNAME in $CLIENT_NETWORKS; do local INTERFACE local IP local NETMASK local BROADCAST local NETWORK local PREFIX config_get INTERFACE "$NETNAME" ifname if [ -n "$INTERFACE" ] ; then eval $(ifconfig $INTERFACE | grep inet | sed -e 's/.*addr:/IP=/' -e 's/ .*Mask:/; NETMASK=/') eval $(ipcalc $IP $NETMASK) echo allow $NETWORK/$PREFIX fi done ) | chronyc > /dev/null 2>&1 ) } stop() { [ -r /var/run/chronyd.pid ] && PID=$(cat /var/run/chronyd.pid) [ -n "$PID" ] && kill $PID } restart() { stop while [ -r /var/run/chronyd.pid ] ; do sleep 1; done start }