diff options
Diffstat (limited to 'net/wireguard.sh')
-rw-r--r-- | net/wireguard.sh | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/net/wireguard.sh b/net/wireguard.sh new file mode 100644 index 0000000..efa45b0 --- /dev/null +++ b/net/wireguard.sh @@ -0,0 +1,53 @@ +# Copyright (c) 2016 Gentoo Foundation +# Released under the 2-clause BSD license. + +wireguard_depend() +{ + program /usr/bin/wg + after interface +} + +wireguard_pre_start() +{ + [ "${IFACE#wg}" != "$IFACE" ] || return 0 + + ip link delete dev "$IFACE" type wireguard 2>/dev/null + ebegin "Creating WireGuard interface $IFACE" + if ! ip link add dev "$IFACE" type wireguard; then + e=$? + eend $e + return $e + fi + eend 0 + + ebegin "Configuring WireGuard interface $IFACE" + set -- $(_get_array "wireguard_$IFVAR") + if [ $# -eq 1 ]; then + /usr/bin/wg setconf "$IFACE" "$1" + else + eval /usr/bin/wg set "$IFACE" "$@" + fi + e=$? + if [ $e -eq 0 ]; then + _up + e=$? + if [ $e -eq 0 ]; then + eend $e + return $e + fi + fi + ip link delete dev "$IFACE" type wireguard 2>/dev/null + eend $e + return $e +} + +wireguard_post_stop() +{ + [ "${IFACE#wg}" != "$IFACE" ] || return 0 + + ebegin "Removing WireGuard interface $IFACE" + ip link delete dev "$IFACE" type wireguard + e=$? + eend $e + return $e +} |