Replace hardcoded sleep with wait with timeout
This commit is contained in:
parent
ba4bbfa18c
commit
37b120d2e5
35
tunsocks.sh
35
tunsocks.sh
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
set -xeuo pipefail
|
set -xeuo pipefail
|
||||||
|
|
||||||
pidfile=${RUNTIME_DIRECTORY:-/tmp}/tunsocks.pid
|
rtdir=${RUNTIME_DIRECTORY:-/tmp}
|
||||||
|
pidfile="$rtdir/tunsocks.pid"
|
||||||
|
|
||||||
nsname="$1"
|
nsname="$1"
|
||||||
device="tun${nsname}"
|
device="tun${nsname}"
|
||||||
@ -18,9 +19,28 @@ fi
|
|||||||
setup() {
|
setup() {
|
||||||
ip tuntap add mode tun dev "$device"
|
ip tuntap add mode tun dev "$device"
|
||||||
|
|
||||||
/usr/bin/tun2socks -device "$device" -proxy "$proxy" &
|
chan="$rtdir/chan"
|
||||||
|
mkfifo "$chan"
|
||||||
|
|
||||||
|
{
|
||||||
|
sleep 10
|
||||||
|
echo TIMEOUT >"$chan"
|
||||||
|
} &
|
||||||
|
timeout_pid=$!
|
||||||
|
|
||||||
|
done_cmd="sh -c 'echo DONE > \"$chan\"'"
|
||||||
|
|
||||||
|
/usr/bin/tun2socks -device "$device" -proxy "$proxy" -tun-post-up "$done_cmd" &
|
||||||
echo "$!" >"$pidfile"
|
echo "$!" >"$pidfile"
|
||||||
sleep 5
|
|
||||||
|
read -r status <"$chan"
|
||||||
|
|
||||||
|
if [ "$status" = DONE ]; then
|
||||||
|
kill "$timeout_pid"
|
||||||
|
else
|
||||||
|
echo "Failed: $status"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
ip netns add "$ns"
|
ip netns add "$ns"
|
||||||
ip link set "$device" netns "$ns"
|
ip link set "$device" netns "$ns"
|
||||||
@ -29,12 +49,19 @@ setup() {
|
|||||||
ip -n "$ns" link set dev "$device" up
|
ip -n "$ns" link set dev "$device" up
|
||||||
ip -n "$ns" route add default via 198.19.1.1 dev "$device" metric 100
|
ip -n "$ns" route add default via 198.19.1.1 dev "$device" metric 100
|
||||||
ip -n "$ns" link set lo up
|
ip -n "$ns" link set lo up
|
||||||
|
|
||||||
systemd-notify --ready
|
systemd-notify --ready
|
||||||
wait
|
wait
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
ip tuntap del mode tun dev "$device" || true
|
# Cleanup as much as possible. Don't stop on first error
|
||||||
|
set +e
|
||||||
|
|
||||||
|
# If the script failed after creating the device before moving it to namespace
|
||||||
|
ip tuntap del mode tun dev "$device"
|
||||||
|
|
||||||
|
# Regular cleanup when when shutdown normally
|
||||||
kill "$(cat "$pidfile")"
|
kill "$(cat "$pidfile")"
|
||||||
ip -n "$ns" tuntap del mode tun dev "$device"
|
ip -n "$ns" tuntap del mode tun dev "$device"
|
||||||
ip netns del "$ns"
|
ip netns del "$ns"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user