aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/ipv6/6in4/files/6in4.sh
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/ipv6/6in4/files/6in4.sh')
-rwxr-xr-xpackage/network/ipv6/6in4/files/6in4.sh34
1 files changed, 27 insertions, 7 deletions
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"
+ )
}
}