#!/usr/bin/env sh # args: /path/to/interface-config /path/to/output.conf inter="$1" configfile="$3" if [ -z "$configfile" ]; then configfile=/run/inet2/inet2.conf fi getval() { /usr/local/bin/config.awk "$configfile" "$@" } k() { while read -r line; do echo "$1 = $line" done } ( echo "[Interface]" getval "interface $inter" ListenPort | k ListenPort getval "interface $inter" PrivateKey | k PrivateKey getval PrivateKey | k PrivateKey echo getval "interface $inter" peer | while read -r peer; do echo "[Peer]" getval "interface $inter" "peer $peer" PublicKey | k PublicKey getval "interface $inter" "peer $peer" AllowedIPs | k AllowedIPs domain="$(getval "interface $inter" "peer $peer" Domain)" if [ -n "$domain" ]; then # it doesn't like domain names in the Endpoint field, so resolve dns here v4="$(dig +short "$domain")" [ ! "$?" = "0" ] && v4="" v6="$(dig +short -t aaaa "$domain")" [ ! "$?" = "0" ] && v6="" if getval "interface $inter" "peer $peer" IPv4; then v6="" fi addr="[$v6]" [ "$addr" = "[]" ] && addr="$v4" echo "Endpoint = $addr:$(getval "interface $inter" "peer $peer" Port)" else getval "interface $inter" "peer $peer" Endpoint | k Endpoint fi getval "interface $inter" "peer $peer" PersistentKeepalive | k PersistentKeepalive echo done ) > "$2"