diff options
Diffstat (limited to 'package')
| -rw-r--r-- | package/base-files/Makefile | 2 | ||||
| -rw-r--r-- | package/base-files/files/etc/config/system | 8 | ||||
| -rw-r--r-- | package/base-files/files/etc/config/timeserver | 24 | ||||
| -rw-r--r-- | package/base-files/files/etc/hotplug.d/iface/40-rdate | 87 | 
4 files changed, 78 insertions, 43 deletions
| diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 2c9b387e5..1a92a59d9 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk  include $(INCLUDE_DIR)/kernel.mk  PKG_NAME:=base-files -PKG_RELEASE:=43 +PKG_RELEASE:=44  PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ diff --git a/package/base-files/files/etc/config/system b/package/base-files/files/etc/config/system index 3f121bd4d..30055eaf3 100644 --- a/package/base-files/files/etc/config/system +++ b/package/base-files/files/etc/config/system @@ -3,10 +3,4 @@ config system  	option timezone	UTC  config rdate -	list server ac-ntp0.net.cmu.edu -	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 +	option interface	wan diff --git a/package/base-files/files/etc/config/timeserver b/package/base-files/files/etc/config/timeserver new file mode 100644 index 000000000..d8db08857 --- /dev/null +++ b/package/base-files/files/etc/config/timeserver @@ -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 diff --git a/package/base-files/files/etc/hotplug.d/iface/40-rdate b/package/base-files/files/etc/hotplug.d/iface/40-rdate index cf56c02ac..c5abaf011 100644 --- a/package/base-files/files/etc/hotplug.d/iface/40-rdate +++ b/package/base-files/files/etc/hotplug.d/iface/40-rdate @@ -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 -		uci -P /var/state get "$var" 2>/dev/null && break -	done +	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" +	}  } -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" \ -		"system.@rdate[0].server") - -	if [ -n "$servers" ]; then -		match=0 -		tries=3 -		rand - -		while [ $match = 0 ] && [ $tries != 0 ]; do -			for server in $servers; do -				if [ $((--random)) = 0 ]; then -					rdate -s $server >/dev/null 2>/dev/null && { -						logger -t rdate "Synced with $server" -						match=1 -					} || { -						logger -t rdate "Failed to sync with $server" -						let tries="$tries - 1" -						rand -					} - -					break -				fi -			done +	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 -	else -		logger -t rdate "No usable time server found" -	fi +		SERVERS="${servers}"; : $((MAX--)) +	done + +	[ -z "$SYNCED" ] && logger -t rdate "No usable time server for $INTERFACE found"  } -case "$ACTION" in -	ifup) route -n | grep -q ^0.0.0.0 && sync_rdate;; +case "${ACTION:-ifup}" in +	ifup) +		sync_time +	;;  esac | 
