aboutsummaryrefslogtreecommitdiff
path: root/net/wireguard-tools/files/patch-wg-quick_freebsd.bash
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireguard-tools/files/patch-wg-quick_freebsd.bash')
-rw-r--r--net/wireguard-tools/files/patch-wg-quick_freebsd.bash43
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