wg-installer: add cleanup script
authorNick Hainke <vincent@systemli.org>
Sun, 9 Jan 2022 09:04:48 +0000 (10:04 +0100)
committerNick Hainke <vincent@systemli.org>
Sun, 9 Jan 2022 09:21:44 +0000 (10:21 +0100)
Add script to cleanup unused wireguard interfaces.

Signed-off-by: Nick Hainke <vincent@systemli.org>
net/wg-installer/common/wg.sh

index 372d7f4cacaae0290ebba6795347a1aa45e54e71..6a9ac9c65a896fea899919e8b89a7ff76d4992b4 100644 (file)
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 next_port () {
        local port_start=$1
        local port_end=$2
@@ -11,3 +13,38 @@ next_port () {
                fi
        done
 }
+
+cleanup_wginterfaces() {
+    neighbors_available
+}
+
+delete_wg_interface() {
+    ip link del dev "$1"
+}
+
+check_wg_neighbors() {
+    local phy
+
+    wg_interfaces=$(ip link | grep wg | awk '{print $2}' | sed 's/://')
+    for phy in $wg_interfaces; do
+        linklocal=$(ip -6 a list dev $phy | grep "scope link" | awk '{print $2}' | sed 's/\/64//') 2>/dev/null
+        ips=$(ping ff02::1%$phy -w5 -W5 -c10 | awk '/from/{print($4)}' | sed 's/.$//') 2>/dev/null
+        delete=1
+        for ip in $ips; do
+            if [ $ip != $linklocal ] && [ $(owipcalc $ip linklocal) -eq 1 ]; then
+                delte=0
+                break
+            fi
+        done
+        if [ $delete -eq 1 ]; then
+            delete_wg_interface "$phy"
+        fi
+    done
+}
+
+case $1 in
+cleanup_wginterfaces)
+    "$@"
+    exit
+    ;;
+esac