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
master
Jo-Philipp Wich 2015-02-08 22:20:38 +00:00
parent c48a26ef7e
commit 5eb79fdc7b
2 changed files with 28 additions and 8 deletions

View File

@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=6in4 PKG_NAME:=6in4
PKG_VERSION:=19 PKG_VERSION:=20
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0 PKG_LICENSE:=GPL-2.0

View File

@ -9,6 +9,19 @@
init_proto "$@" 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() { proto_6in4_setup() {
local cfg="$1" local cfg="$1"
local iface="$2" local iface="$2"
@ -97,13 +110,20 @@ proto_6in4_setup() {
local try=0 local try=0
local max=3 local max=3
while [ $((++try)) -le $max ]; do (
( exec $urlget $urlget_opts "$url" | logger -t "$link" ) & set -o pipefail
local pid=$! while [ $((++try)) -le $max ]; do
( sleep 20; kill $pid 2>/dev/null ) & if proto_6in4_update $urlget $urlget_opts "$url" 2>&1 | \
wait $pid && break sed -e 's,^Killed$,timeout,' -e "s,^,update $try/$max: ," | \
sleep 20; logger -t "$link";
done then
logger -t "$link" "updated"
return 0
fi
sleep 5
done
logger -t "$link" "update failed"
)
} }
} }