diff options
Diffstat (limited to 'net/amnezia-tools/files/patch-wg-quick_freebsd.bash')
| -rw-r--r-- | net/amnezia-tools/files/patch-wg-quick_freebsd.bash | 152 |
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 |
