diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2015-02-08 22:20:38 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2015-02-08 22:20:38 +0000 |
commit | 5eb79fdc7bafbf21075085fe8705825c28908ba8 (patch) | |
tree | e776f4ed9d4c35124c99e8901733692eeb93e103 /package/network/ipv6/6in4 | |
parent | c48a26ef7ef3fa6e74c6ad7ca8310b24b92cd2b0 (diff) | |
download | master-187ad058-5eb79fdc7bafbf21075085fe8705825c28908ba8.tar.gz master-187ad058-5eb79fdc7bafbf21075085fe8705825c28908ba8.tar.bz2 master-187ad058-5eb79fdc7bafbf21075085fe8705825c28908ba8.zip |
6in4: fix update timeout
The recent rework of the 6in4 endpoint update broke the retry mechanism.
Rework the timeout handling and make the update status more verbose.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@44327 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/network/ipv6/6in4')
-rw-r--r-- | package/network/ipv6/6in4/Makefile | 2 | ||||
-rwxr-xr-x | package/network/ipv6/6in4/files/6in4.sh | 34 |
2 files changed, 28 insertions, 8 deletions
diff --git a/package/network/ipv6/6in4/Makefile b/package/network/ipv6/6in4/Makefile index 0dc1068b3f..ef9691227a 100644 --- a/package/network/ipv6/6in4/Makefile +++ b/package/network/ipv6/6in4/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=6in4 -PKG_VERSION:=19 +PKG_VERSION:=20 PKG_RELEASE:=1 PKG_LICENSE:=GPL-2.0 diff --git a/package/network/ipv6/6in4/files/6in4.sh b/package/network/ipv6/6in4/files/6in4.sh index 00b6e3550d..f8a43ce24b 100755 --- a/package/network/ipv6/6in4/files/6in4.sh +++ b/package/network/ipv6/6in4/files/6in4.sh @@ -9,6 +9,19 @@ init_proto "$@" } +proto_6in4_update() { + sh -c ' + local timeout=5 + + (while [ $((timeout--)) -gt 0 ]; do + sleep 1 + kill -0 $$ || exit 0 + done; kill -9 $$) 2>/dev/null & + + exec "$@" + ' "$1" "$@" +} + proto_6in4_setup() { local cfg="$1" local iface="$2" @@ -97,13 +110,20 @@ proto_6in4_setup() { local try=0 local max=3 - while [ $((++try)) -le $max ]; do - ( exec $urlget $urlget_opts "$url" | logger -t "$link" ) & - local pid=$! - ( sleep 20; kill $pid 2>/dev/null ) & - wait $pid && break - sleep 20; - done + ( + set -o pipefail + while [ $((++try)) -le $max ]; do + if proto_6in4_update $urlget $urlget_opts "$url" 2>&1 | \ + sed -e 's,^Killed$,timeout,' -e "s,^,update $try/$max: ," | \ + logger -t "$link"; + then + logger -t "$link" "updated" + return 0 + fi + sleep 5 + done + logger -t "$link" "update failed" + ) } } |