wg-quick: freebsd: add kernel support
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									396b85280a
								
							
						
					
					
						commit
						576e40056d
					
				@ -8,6 +8,7 @@ set -e -o pipefail
 | 
				
			|||||||
shopt -s extglob
 | 
					shopt -s extglob
 | 
				
			||||||
export LC_ALL=C
 | 
					export LC_ALL=C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec 3>&2
 | 
				
			||||||
SELF="$(readlink -f "${BASH_SOURCE[0]}")"
 | 
					SELF="$(readlink -f "${BASH_SOURCE[0]}")"
 | 
				
			||||||
export PATH="${SELF%/*}:$PATH"
 | 
					export PATH="${SELF%/*}:$PATH"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,7 +29,7 @@ PROGRAM="${0##*/}"
 | 
				
			|||||||
ARGS=( "$@" )
 | 
					ARGS=( "$@" )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cmd() {
 | 
					cmd() {
 | 
				
			||||||
	echo "[#] $*" >&2
 | 
						echo "[#] $*" >&3
 | 
				
			||||||
	"$@"
 | 
						"$@"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -114,6 +115,16 @@ auto_su() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_if() {
 | 
					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"
 | 
						cmd "${WG_QUICK_USERSPACE_IMPLEMENTATION:-wireguard-go}" "$INTERFACE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -157,7 +168,11 @@ if_exists() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
del_if() {
 | 
					del_if() {
 | 
				
			||||||
	[[ $HAVE_SET_DNS -eq 0 ]] || unset_dns
 | 
						[[ $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
 | 
						while if_exists; do
 | 
				
			||||||
		# HACK: it would be nice to `route monitor` here and wait for RTM_IFANNOUNCE
 | 
							# 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
 | 
							# but it turns out that the announcement is made before the interface
 | 
				
			||||||
@ -290,7 +305,6 @@ monitor_daemon() {
 | 
				
			|||||||
	# endpoints change.
 | 
						# endpoints change.
 | 
				
			||||||
	while read -r event; do
 | 
						while read -r event; do
 | 
				
			||||||
		[[ $event == RTM_* ]] || continue
 | 
							[[ $event == RTM_* ]] || continue
 | 
				
			||||||
		[[ -e /var/run/wireguard/$INTERFACE.sock ]] || break
 | 
					 | 
				
			||||||
		if_exists || break
 | 
							if_exists || break
 | 
				
			||||||
		[[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route
 | 
							[[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route
 | 
				
			||||||
		# TODO: set the mtu as well, but only if up
 | 
							# TODO: set the mtu as well, but only if up
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user