diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-03-10 21:17:59 -0700 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-03-11 09:05:14 -0700 |
commit | 576e40056d78b236578fa03db46527926d891d14 (patch) | |
tree | a806e023e6855566dd162bd3fcb6620b8f7188f5 | |
parent | wireguard-tools: drag in headers for prototypes (diff) | |
download | wireguard-tools-576e40056d78b236578fa03db46527926d891d14.tar.xz wireguard-tools-576e40056d78b236578fa03db46527926d891d14.zip |
wg-quick: freebsd: add kernel support
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rwxr-xr-x | src/wg-quick/freebsd.bash | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/wg-quick/freebsd.bash b/src/wg-quick/freebsd.bash index e1ee67f..c6744d3 100755 --- a/src/wg-quick/freebsd.bash +++ b/src/wg-quick/freebsd.bash @@ -8,6 +8,7 @@ set -e -o pipefail shopt -s extglob export LC_ALL=C +exec 3>&2 SELF="$(readlink -f "${BASH_SOURCE[0]}")" export PATH="${SELF%/*}:$PATH" @@ -28,7 +29,7 @@ PROGRAM="${0##*/}" ARGS=( "$@" ) cmd() { - echo "[#] $*" >&2 + echo "[#] $*" >&3 "$@" } @@ -114,6 +115,16 @@ auto_su() { } add_if() { + local ret rc + if ret="$(cmd ifconfig wg create name "$INTERFACE" 2>&1 >/dev/null)"; then + return 0 + 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 cmd "${WG_QUICK_USERSPACE_IMPLEMENTATION:-wireguard-go}" "$INTERFACE" } @@ -157,7 +168,11 @@ if_exists() { del_if() { [[ $HAVE_SET_DNS -eq 0 ]] || unset_dns - cmd rm -f "/var/run/wireguard/$INTERFACE.sock" + if [[ -f /var/run/wireguard/$INTERFACE.sock ]]; then + cmd rm -f "/var/run/wireguard/$INTERFACE.sock" + else + cmd ifconfig "$INTERFACE" destroy + fi while if_exists; 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 @@ -290,7 +305,6 @@ monitor_daemon() { # endpoints change. while read -r event; do [[ $event == RTM_* ]] || continue - [[ -e /var/run/wireguard/$INTERFACE.sock ]] || break if_exists || break [[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route # TODO: set the mtu as well, but only if up |