base-files (#7316) - improve rdate reliability - make rdate config more ntp like - move time server list to /etc/config/timeserver - bump package revision
SVN-Revision: 21495master
parent
80bd4f6603
commit
da55c9639a
@ -0,0 +1,24 @@ |
|||||||
|
config timeserver |
||||||
|
option hostname ac-ntp0.net.cmu.edu |
||||||
|
# option interface wan |
||||||
|
|
||||||
|
config timeserver |
||||||
|
option hostname ptbtime1.ptb.de |
||||||
|
|
||||||
|
config timeserver |
||||||
|
option hostname ac-ntp1.net.cmu.edu |
||||||
|
|
||||||
|
config timeserver |
||||||
|
option hostname tick.greyware.com |
||||||
|
|
||||||
|
config timeserver |
||||||
|
option hostname ntp.xs4all.nl |
||||||
|
|
||||||
|
config timeserver |
||||||
|
option hostname ptbtime2.ptb.de |
||||||
|
|
||||||
|
config timeserver |
||||||
|
option hostname cudns.cit.cornell.edu |
||||||
|
|
||||||
|
config timeserver |
||||||
|
option hostname ptbtime3.ptb.de |
@ -1,46 +1,63 @@ |
|||||||
uci_get_one() |
IFACE_GLOBAL=$(uci_get "system.@rdate[0].interface") |
||||||
|
SERVERS= |
||||||
|
MAX=0 |
||||||
|
SYNCED= |
||||||
|
|
||||||
|
do_rdate() |
||||||
{ |
{ |
||||||
for var in "$@"; do |
local server="$1" |
||||||
uci -P /var/state get "$var" 2>/dev/null && break |
|
||||||
done |
rdate -s "$server" >/dev/null 2>/dev/null && { |
||||||
|
logger -t rdate "Synced with $server" |
||||||
|
SYNCED="$server" |
||||||
|
} || { |
||||||
|
logger -t rdate "Failed to sync with $server" |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
rand() |
add_server() |
||||||
{ |
{ |
||||||
random=$(awk 'BEGIN { srand(); print int(rand() * 10 + 1); }') |
local section="$1" |
||||||
|
|
||||||
|
local server |
||||||
|
config_get server "$section" hostname |
||||||
|
[ -z "$server" ] && return |
||||||
|
|
||||||
|
local iface |
||||||
|
config_get iface "$section" interface |
||||||
|
[ -z "$iface" ] && iface=$IFACE_GLOBAL |
||||||
|
[ -n "$iface" ] && { |
||||||
|
[ "$iface" = "$INTERFACE" ] || return |
||||||
|
} |
||||||
|
|
||||||
|
SERVERS="${SERVERS} $server"; : $((MAX++)) |
||||||
} |
} |
||||||
|
|
||||||
sync_rdate() |
sync_time() |
||||||
{ |
{ |
||||||
local servers=$(uci_get_one "network.$INTERFACE.lease_timesrv" \ |
local server |
||||||
"system.@rdate[0].server") |
server=$(uci_get_state "network.$INTERFACE.lease_timesrv") |
||||||
|
[ -n "$server" ] && do_rdate "$server" |
||||||
if [ -n "$servers" ]; then |
[ -n "$SYNCED" ] && return |
||||||
match=0 |
|
||||||
tries=3 |
config_load timeserver |
||||||
rand |
config_foreach add_server timeserver |
||||||
|
|
||||||
while [ $match = 0 ] && [ $tries != 0 ]; do |
local servers |
||||||
for server in $servers; do |
while [ $MAX -gt 0 ] && [ -z "$SYNCED" ]; do |
||||||
if [ $((--random)) = 0 ]; then |
unset servers; random=$(awk "BEGIN { srand(); print int(rand() * $MAX + 1); }") |
||||||
rdate -s $server >/dev/null 2>/dev/null && { |
for server in $SERVERS; do |
||||||
logger -t rdate "Synced with $server" |
[ $((--random)) -eq 0 ] && { do_rdate "$server"; continue; } |
||||||
match=1 |
servers="${servers} $server" |
||||||
} || { |
|
||||||
logger -t rdate "Failed to sync with $server" |
|
||||||
let tries="$tries - 1" |
|
||||||
rand |
|
||||||
} |
|
||||||
|
|
||||||
break |
|
||||||
fi |
|
||||||
done |
|
||||||
done |
done |
||||||
else |
SERVERS="${servers}"; : $((MAX--)) |
||||||
logger -t rdate "No usable time server found" |
done |
||||||
fi |
|
||||||
|
[ -z "$SYNCED" ] && logger -t rdate "No usable time server for $INTERFACE found" |
||||||
} |
} |
||||||
|
|
||||||
case "$ACTION" in |
case "${ACTION:-ifup}" in |
||||||
ifup) route -n | grep -q ^0.0.0.0 && sync_rdate;; |
ifup) |
||||||
|
sync_time |
||||||
|
;; |
||||||
esac |
esac |
||||||
|
Loading…
Reference in new issue