wg-quick: darwin: set DNS servers after delay on route change
This works around a race condition in macOS's network daemons, while also adding one in the form of possibly calling kill -ALRM on a stale PID; unfortunately bash can't wait from a trap. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
d532074ef5
commit
206e8f08e2
1 changed files with 6 additions and 2 deletions
|
@ -293,7 +293,8 @@ monitor_daemon() {
|
||||||
echo "[+] Backgrounding route monitor" >&2
|
echo "[+] Backgrounding route monitor" >&2
|
||||||
(trap 'del_routes; del_dns; exit 0' INT TERM EXIT
|
(trap 'del_routes; del_dns; exit 0' INT TERM EXIT
|
||||||
exec >/dev/null 2>&1
|
exec >/dev/null 2>&1
|
||||||
local event
|
local event pid=$BASHPID
|
||||||
|
[[ ${#DNS[@]} -gt 0 ]] && trap set_dns ALRM
|
||||||
# TODO: this should also check to see if the endpoint actually changes
|
# TODO: this should also check to see if the endpoint actually changes
|
||||||
# in response to incoming packets, and then call set_endpoint_direct_route
|
# in response to incoming packets, and then call set_endpoint_direct_route
|
||||||
# then too. That function should be able to gracefully cleanup if the
|
# then too. That function should be able to gracefully cleanup if the
|
||||||
|
@ -303,7 +304,10 @@ monitor_daemon() {
|
||||||
ifconfig "$REAL_INTERFACE" >/dev/null 2>&1 || break
|
ifconfig "$REAL_INTERFACE" >/dev/null 2>&1 || break
|
||||||
[[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route
|
[[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route
|
||||||
[[ -z $MTU ]] && set_mtu
|
[[ -z $MTU ]] && set_mtu
|
||||||
[[ ${#DNS[@]} -gt 0 ]] && set_dns
|
if [[ ${#DNS[@]} -gt 0 ]]; then
|
||||||
|
set_dns
|
||||||
|
sleep 2 && kill -ALRM $pid 2>/dev/null &
|
||||||
|
fi
|
||||||
done < <(route -n monitor)) & disown
|
done < <(route -n monitor)) & disown
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue