summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package/network/ipv6/6in4/Makefile2
-rwxr-xr-xpackage/network/ipv6/6in4/files/6in4.sh34
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"
+ )
}
}