diff options
Diffstat (limited to 'net/wireguard-tools/files/patch-wg-quick_freebsd.bash')
-rw-r--r-- | net/wireguard-tools/files/patch-wg-quick_freebsd.bash | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/net/wireguard-tools/files/patch-wg-quick_freebsd.bash b/net/wireguard-tools/files/patch-wg-quick_freebsd.bash new file mode 100644 index 000000000000..83254d7abac3 --- /dev/null +++ b/net/wireguard-tools/files/patch-wg-quick_freebsd.bash @@ -0,0 +1,43 @@ +--- wg-quick/freebsd.bash.orig 2021-09-13 22:43:31 UTC ++++ wg-quick/freebsd.bash +@@ -27,6 +27,7 @@ SAVE_CONFIG=0 + CONFIG_FILE="" + PROGRAM="${0##*/}" + ARGS=( "$@" ) ++FREEBSD_MAJOR_VERSION=$(freebsd-version | cut -d. -f1) + + cmd() { + echo "[#] $*" >&3 +@@ -283,20 +284,28 @@ monitor_daemon() { + echo "[+] Backgrounding route monitor" >&2 + (make_temp + trap 'del_routes; clean_temp; exit 0' INT TERM EXIT ++ local event grep_for pid ++ if [[ "$FREEBSD_MAJOR_VERSION" -lt 14 ]]; then ++ grep_for="RTM_" ++ elif [[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]]; then ++ grep_for="iface" # needs refinement ++ else ++ grep_for="(add/repl|delete) iface iface#[0-9]{1,4} $INTERFACE " ++ fi + exec >/dev/null 2>&1 +- exec 19< <(exec route -n monitor) +- local event pid=$! ++ exec 19< <(exec sh -c "route -n monitor | grep -E --line-buffered '$grep_for'") ++ monitor_ppid=$! + # TODO: this should also check to see if the endpoint actually changes + # in response to incoming packets, and then call set_endpoint_direct_route + # then too. That function should be able to gracefully cleanup if the + # endpoints change. + while read -u 19 -r event; do +- [[ $event == RTM_* ]] || continue + ifconfig "$INTERFACE" >/dev/null 2>&1 || break + [[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route + # TODO: set the mtu as well, but only if up + done +- kill $pid) & disown ++ pkill -P "$monitor_ppid" route || true ++ ) & disown + } + + HAVE_SET_DNS=0 |