From 3124afbea3c7e04e89ad98db4d1d621f491b531a Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sun, 18 Apr 2021 20:40:02 -0600 Subject: wg-quick: freebsd: use ifconfig for determining if interface is up We no longer need the arp hack, as these bugs have been fixed in the FreeBSD kernel. This partially reverts 090639ae90fb45ac05e3158e1e31e5bf15fd9559. Signed-off-by: Jason A. Donenfeld --- src/wg-quick/freebsd.bash | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) (limited to 'src/wg-quick/freebsd.bash') diff --git a/src/wg-quick/freebsd.bash b/src/wg-quick/freebsd.bash index e00f1e1..e731384 100755 --- a/src/wg-quick/freebsd.bash +++ b/src/wg-quick/freebsd.bash @@ -152,20 +152,6 @@ del_routes() { done } -if_exists() { - # HACK: The goal is simply to determine whether or not the interface exists. The - # straight-forward way of doing this would be `ifconfig $INTERFACE`, but this - # invokes the SIOCGIFSTATUS ioctl, which races with interface shutdown inside - # the tun driver, resulting in a kernel panic. So we work around it the stupid - # way by using the one utility that appears to call if_nametoindex fairly early - # and fails if it doesn't exist: `arp`. - if arp -i "$INTERFACE" -a -n >/dev/null 2>&1; then - return 0 - else - return 1 - fi -} - del_if() { [[ $HAVE_SET_DNS -eq 0 ]] || unset_dns if [[ -S /var/run/wireguard/$INTERFACE.sock ]]; then @@ -173,7 +159,7 @@ del_if() { else cmd ifconfig "$INTERFACE" destroy fi - while if_exists; do + while ifconfig "$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 @@ -305,7 +291,7 @@ monitor_daemon() { # endpoints change. while read -r event; do [[ $event == RTM_* ]] || continue - if_exists || break + 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 < <(route -n monitor)) & disown -- cgit v1.2.3-59-g8ed1b