#!/bin/sh next_port () { local port_start=$1 local port_end=$2 ports=$(wg show all listen-port | awk '{print $2}') for i in $(seq $port_start $port_end); do if ! echo $ports | grep -q "$i"; then echo $i return 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 delete=0 break fi done if [ $delete -eq 1 ]; then delete_wg_interface "$phy" fi done } case $1 in cleanup_wginterfaces) "$@" exit ;; esac