summaryrefslogtreecommitdiff
path: root/net/amnezia-tools/files/patch-wg-quick_freebsd.bash
diff options
context:
space:
mode:
Diffstat (limited to 'net/amnezia-tools/files/patch-wg-quick_freebsd.bash')
-rw-r--r--net/amnezia-tools/files/patch-wg-quick_freebsd.bash152
1 files changed, 108 insertions, 44 deletions
diff --git a/net/amnezia-tools/files/patch-wg-quick_freebsd.bash b/net/amnezia-tools/files/patch-wg-quick_freebsd.bash
index e4f2cfe40c0a..cc582319c260 100644
--- a/net/amnezia-tools/files/patch-wg-quick_freebsd.bash
+++ b/net/amnezia-tools/files/patch-wg-quick_freebsd.bash
@@ -1,6 +1,6 @@
---- wg-quick/freebsd.bash.orig 2025-12-03 19:32:16 UTC
+--- wg-quick/freebsd.bash.orig 2025-12-12 22:28:42 UTC
+++ wg-quick/freebsd.bash
-@@ -25,11 +25,20 @@ CONFIG_FILE=""
+@@ -25,11 +25,18 @@ CONFIG_FILE=""
POST_DOWN=( )
SAVE_CONFIG=0
CONFIG_FILE=""
@@ -11,17 +11,15 @@
PROGRAM="${0##*/}"
ARGS=( "$@" )
- IS_ASESCURITY_ON=0
+ IS_AWG_ON=0
-+
+declare -A ROUTES
+declare -A ENDPOINTS_MAP
+
-+
cmd() {
echo "[#] $*" >&3
"$@"
-@@ -40,7 +49,7 @@ die() {
+@@ -40,7 +47,7 @@ die() {
exit 1
}
@@ -30,7 +28,7 @@
unset ORIGINAL_TMPDIR
make_temp() {
-@@ -64,7 +73,7 @@ parse_options() {
+@@ -64,7 +71,7 @@ parse_options() {
}
parse_options() {
@@ -39,7 +37,7 @@
CONFIG_FILE="$1"
if [[ $CONFIG_FILE =~ ^[a-zA-Z0-9_=+.-]{1,15}$ ]]; then
for path in "${CONFIG_SEARCH_PATHS[@]}"; do
-@@ -82,7 +91,7 @@ parse_options() {
+@@ -82,7 +89,7 @@ parse_options() {
stripped="${line%%\#*}"
key="${stripped%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}"
value="${stripped#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}"
@@ -48,7 +46,7 @@
[[ $key == "[Interface]" ]] && interface_section=1
if [[ $interface_section -eq 1 ]]; then
case "$key" in
-@@ -96,9 +105,14 @@ parse_options() {
+@@ -96,9 +103,14 @@ parse_options() {
PreDown) PRE_DOWN+=( "$value" ); continue ;;
PostUp) POST_UP+=( "$value" ); continue ;;
PostDown) POST_DOWN+=( "$value" ); continue ;;
@@ -63,9 +61,9 @@
Jc);&
Jmin);&
Jmax);&
-@@ -109,6 +123,17 @@ parse_options() {
- H3);&
- H4) IS_ASESCURITY_ON=1;;
+@@ -116,6 +128,17 @@ parse_options() {
+ I4);&
+ I5) IS_AWG_ON=1;;
esac
+ else
+ case "$key" in
@@ -81,44 +79,105 @@
fi
WG_CONFIG+="$line"$'\n'
done < "$CONFIG_FILE"
-@@ -129,19 +154,22 @@ add_if() {
+@@ -136,20 +159,24 @@ add_if() {
add_if() {
local ret rc
- local cmd="ifconfig wg create name "$INTERFACE""
-- if [[ $IS_ASESCURITY_ON == 1 ]]; then
-+ local cmd="ifconfig amn create name "$INTERFACE""
-+ if [[ $USERLAND == 1 ]]; then
- cmd="amneziawg-go "$INTERFACE"";
- fi
+- if [[ $IS_AWG_ON == 1 ]]; then
+- cmd="amneziawg-go "$INTERFACE"";
+- fi
- if ret="$(cmd $cmd 2>&1 >/dev/null)"; then
- return 0
-+ if [ -n "$DESCRIPTION" ]; then
-+ ret="$(cmd $cmd description "$DESCRIPTION" 2>&1 >/dev/null)" && return 0
-+ else
-+
-+ ret="$(cmd $cmd 2>&1 >/dev/null)" && return 0
- fi
- rc=$?
- if [[ $ret == *"ifconfig: ioctl SIOCSIFNAME (set name): File exists"* ]]; then
- echo "$ret" >&3
- return $rc
- fi
+- fi
+- rc=$?
+- if [[ $ret == *"ifconfig: ioctl SIOCSIFNAME (set name): File exists"* ]]; then
+- echo "$ret" >&3
+- return $rc
+- fi
- echo "[!] Missing WireGuard kernel support ($ret). Falling back to slow userspace implementation." >&3
++ local cmd="ifconfig amn create name "$INTERFACE""
++ if [[ $USERLAND == 0 ]]; then
++ if [ -n "$DESCRIPTION" ]; then
++ ret="$(cmd $cmd description "$DESCRIPTION" 2>&1 >/dev/null)" && return 0
++ else
++ ret="$(cmd $cmd 2>&1 >/dev/null)" && return 0
++ fi
++ rc=$?
++ if [[ $ret == *"ifconfig: ioctl SIOCSIFNAME (set name): File exists"* ]]; then
++ echo "$ret" >&3
++ return $rc
++ fi
++ fi
+ echo "[!] Missing Amnezia kernel support ($ret). Falling back to slow userspace implementation." >&3
cmd "${WG_QUICK_USERSPACE_IMPLEMENTATION:-amneziawg-go}" "$INTERFACE"
++ if [ -n "$DESCRIPTION" ]; then
++ cmd ifconfig $INTERFACE description "$DESCRIPTION"
++ fi
+ }
+
+ del_routes() {
+@@ -181,9 +208,9 @@ del_if() {
+ if [[ -S /var/run/amneziawg/$INTERFACE.sock ]]; then
+ cmd rm -f "/var/run/amneziawg/$INTERFACE.sock"
+ else
+- cmd ifconfig "$INTERFACE" destroy
++ cmd ifconfig -n "$INTERFACE" destroy
+ fi
+- while ifconfig "$INTERFACE" >/dev/null 2>&1; do
++ while ifconfig -n "$INTERFACE" >/dev/null 2>&1; do
+ # HACK: it would be nice to `route monitor` here and wait for RTM_IFANNOUNCE
+ # but it turns out that the announcement is made before the interface
+ # disappears so we sometimes get a hang. So, we're instead left with polling
+@@ -193,21 +220,21 @@ up_if() {
}
-@@ -209,7 +237,7 @@ set_mtu() {
+ up_if() {
+- cmd ifconfig "$INTERFACE" up
++ cmd ifconfig -n "$INTERFACE" up
+ }
+
+ add_addr() {
+ if [[ $1 == *:* ]]; then
+- cmd ifconfig "$INTERFACE" inet6 "$1" alias
++ cmd ifconfig -n "$INTERFACE" inet6 "$1" alias
+ else
+- cmd ifconfig "$INTERFACE" inet "$1" alias
++ cmd ifconfig -n "$INTERFACE" inet "$1" alias
+ fi
+ }
+
+ set_mtu() {
+ local mtu=0 endpoint output family
+ if [[ -n $MTU ]]; then
+- cmd ifconfig "$INTERFACE" mtu "$MTU"
++ cmd ifconfig -n "$INTERFACE" mtu "$MTU"
+ return
+ fi
+ while read -r _ endpoint; do
+@@ -215,14 +242,16 @@ set_mtu() {
+ family=inet
[[ ${BASH_REMATCH[1]} == *:* ]] && family=inet6
output="$(route -n get "-$family" "${BASH_REMATCH[1]}" || true)"
- [[ $output =~ interface:\ ([^ ]+)$'\n' && $(ifconfig "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
+- [[ $output =~ interface:\ ([^ ]+)$'\n' && $(ifconfig "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
- done < <(wg show "$INTERFACE" endpoints)
++ [[ $output =~ interface:\ ([^ ]+)$'\n' && $(ifconfig -n "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
+ done < <(awg show "$INTERFACE" endpoints)
if [[ $mtu -eq 0 ]]; then
read -r output < <(route -n get default || true) || true
- [[ $output =~ interface:\ ([^ ]+)$'\n' && $(ifconfig "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
-@@ -242,7 +270,7 @@ collect_endpoints() {
+- [[ $output =~ interface:\ ([^ ]+)$'\n' && $(ifconfig "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
++ [[ $output =~ interface:\ ([^ ]+)$'\n' && $(ifconfig -n "${BASH_REMATCH[1]}") =~ mtu\ ([0-9]+) && ${BASH_REMATCH[1]} -gt $mtu ]] && mtu="${BASH_REMATCH[1]}"
+ fi
+- [[ $mtu -gt 0 ]] || mtu=1500
+- cmd ifconfig "$INTERFACE" mtu $(( mtu - 80 ))
++ if [[ $mtu -gt 0 && $mtu -lt 1420 ]]; then
++ # setup MTU only if discovered MTU is less then default
++ cmd ifconfig -n "$INTERFACE" mtu $(( mtu - 80 )) || true
++ fi
+ }
+
+
+@@ -249,7 +278,7 @@ collect_endpoints() {
while read -r _ endpoint; do
[[ $endpoint =~ ^\[?([a-z0-9:.]+)\]?:[0-9]+$ ]] || continue
ENDPOINTS+=( "${BASH_REMATCH[1]}" )
@@ -127,7 +186,7 @@
}
set_endpoint_direct_route() {
-@@ -297,18 +325,25 @@ monitor_daemon() {
+@@ -304,25 +333,108 @@ monitor_daemon() {
}
monitor_daemon() {
@@ -153,10 +212,11 @@
# endpoints change.
while read -u 19 -r event; do
- [[ $event == RTM_* ]] || continue
- ifconfig "$INTERFACE" >/dev/null 2>&1 || break
+- ifconfig "$INTERFACE" >/dev/null 2>&1 || break
++ ifconfig -n "$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
-@@ -316,6 +351,82 @@ monitor_daemon() {
+ done
kill $pid) & disown
}
@@ -239,7 +299,7 @@
HAVE_SET_DNS=0
set_dns() {
[[ ${#DNS[@]} -gt 0 ]] || return 0
-@@ -354,7 +465,7 @@ set_config() {
+@@ -361,7 +473,7 @@ set_config() {
}
set_config() {
@@ -248,7 +308,7 @@
}
save_config() {
-@@ -386,7 +497,7 @@ save_config() {
+@@ -393,7 +505,7 @@ save_config() {
done
old_umask="$(umask)"
umask 077
@@ -257,7 +317,7 @@
trap 'rm -f "$CONFIG_FILE.tmp"; clean_temp; exit' INT TERM EXIT
echo "${current_config/\[Interface\]$'\n'/$new_config}" > "$CONFIG_FILE.tmp" || die "Could not write configuration file"
sync "$CONFIG_FILE.tmp"
-@@ -412,7 +523,7 @@ cmd_usage() {
+@@ -419,7 +531,7 @@ cmd_usage() {
followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
configuration found at:
${CONFIG_SEARCH_PATHS[@]/%//INTERFACE.conf}.
@@ -266,7 +326,7 @@
of the following additions to the [Interface] section, which are handled
by $PROGRAM:
-@@ -429,10 +540,24 @@ cmd_usage() {
+@@ -436,13 +548,27 @@ cmd_usage() {
- SaveConfig: if set to \`true', the configuration is saved from the current
state of the interface upon shutdown.
@@ -291,8 +351,12 @@
+
cmd_up() {
local i
- [[ -z $(ifconfig "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
-@@ -446,26 +571,31 @@ cmd_up() {
+- [[ -z $(ifconfig "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
++ [[ -z $(ifconfig -n "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
+ trap 'del_if; del_routes; clean_temp; exit' INT TERM EXIT
+ add_if
+ execute_hooks "${PRE_UP[@]}"
+@@ -453,26 +579,31 @@ cmd_up() {
set_mtu
up_if
set_dns
@@ -328,7 +392,7 @@
save_config
}
-@@ -473,6 +603,10 @@ cmd_strip() {
+@@ -480,6 +611,10 @@ cmd_strip() {
echo "$WG_CONFIG"
}
@@ -339,7 +403,7 @@
# ~~ function override insertion point ~~
make_temp
-@@ -496,6 +630,18 @@ elif [[ $# -eq 2 && $1 == strip ]]; then
+@@ -503,6 +638,18 @@ elif [[ $# -eq 2 && $1 == strip ]]; then
auto_su
parse_options "$2"
cmd_strip