mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-24 21:22:49 +02:00
5d18a177d8
- improve rdate reliability - make rdate config more ntp like - move time server list to /etc/config/timeserver - bump package revision git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21495 3c298f89-4303-0410-b956-a3cf2f4a3e73
64 lines
1.3 KiB
Plaintext
64 lines
1.3 KiB
Plaintext
IFACE_GLOBAL=$(uci_get "system.@rdate[0].interface")
|
|
SERVERS=
|
|
MAX=0
|
|
SYNCED=
|
|
|
|
do_rdate()
|
|
{
|
|
local server="$1"
|
|
|
|
rdate -s "$server" >/dev/null 2>/dev/null && {
|
|
logger -t rdate "Synced with $server"
|
|
SYNCED="$server"
|
|
} || {
|
|
logger -t rdate "Failed to sync with $server"
|
|
}
|
|
}
|
|
|
|
add_server()
|
|
{
|
|
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_time()
|
|
{
|
|
local server
|
|
server=$(uci_get_state "network.$INTERFACE.lease_timesrv")
|
|
[ -n "$server" ] && do_rdate "$server"
|
|
[ -n "$SYNCED" ] && return
|
|
|
|
config_load timeserver
|
|
config_foreach add_server timeserver
|
|
|
|
local servers
|
|
while [ $MAX -gt 0 ] && [ -z "$SYNCED" ]; do
|
|
unset servers; random=$(awk "BEGIN { srand(); print int(rand() * $MAX + 1); }")
|
|
for server in $SERVERS; do
|
|
[ $((--random)) -eq 0 ] && { do_rdate "$server"; continue; }
|
|
servers="${servers} $server"
|
|
done
|
|
SERVERS="${servers}"; : $((MAX--))
|
|
done
|
|
|
|
[ -z "$SYNCED" ] && logger -t rdate "No usable time server for $INTERFACE found"
|
|
}
|
|
|
|
case "${ACTION:-ifup}" in
|
|
ifup)
|
|
sync_time
|
|
;;
|
|
esac
|