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: 21495
master
Jo-Philipp Wich 15 years ago
parent 80bd4f6603
commit da55c9639a
  1. 2
      package/base-files/Makefile
  2. 8
      package/base-files/files/etc/config/system
  3. 24
      package/base-files/files/etc/config/timeserver
  4. 87
      package/base-files/files/etc/hotplug.d/iface/40-rdate

@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=base-files PKG_NAME:=base-files
PKG_RELEASE:=43 PKG_RELEASE:=44
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/

@ -3,10 +3,4 @@ config system
option timezone UTC option timezone UTC
config rdate config rdate
list server ac-ntp0.net.cmu.edu option interface wan
list server ptbtime1.ptb.de
list server ac-ntp1.net.cmu.edu
list server ntp.xs4all.nl
list server ptbtime2.ptb.de
list server cudns.cit.cornell.edu
list server ptbtime3.ptb.de

@ -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…
Cancel
Save