]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
wg-quick: determine IPs when saving interface
authorJason A. Donenfeld <Jason@zx2c4.com>
Sun, 27 May 2018 00:42:04 +0000 (02:42 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Sun, 27 May 2018 00:42:31 +0000 (02:42 +0200)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/wg-quick/darwin.bash
src/wg-quick/freebsd.bash
src/wg-quick/openbsd.bash

index 8e0a71fdbd307cb97c1fa8bad83ea0d37ac882e7..18b92ea3ca0cc8604302d1368dda74d15f4ecfbe 100755 (executable)
@@ -335,12 +335,12 @@ set_config() {
 }
 
 save_config() {
-       # TODO: actually save addresses and DNS by running ifconfig and networksetup
        local old_umask new_config current_config address cmd
        new_config=$'[Interface]\n'
-       for address in "${ADDRESSES[@]}"; do
-               new_config+="Address = $address"$'\n'
-       done
+       while read -r address; do
+               [[ $address =~ inet6?\ ([^ ]+) ]] && new_config+="Address = ${BASH_REMATCH[1]}"$'\n'
+       done < <(ifconfig "$REAL_INTERFACE")
+       # TODO: actually determine current DNS for interface
        for address in "${DNS[@]}"; do
                new_config+="DNS = $address"$'\n'
        done
index 6e949833a5f7b2105a2dc53af53f051e7e1b1c9c..d9a0b032e1815c9232a21a5b34ea9ac8b73be2de 100755 (executable)
@@ -309,12 +309,14 @@ set_config() {
 }
 
 save_config() {
-       # TODO: actually save addresses by running ifconfig
        local old_umask new_config current_config address cmd
        new_config=$'[Interface]\n'
-       for address in "${ADDRESSES[@]}"; do
+       { read -r _; while read -r _ _ _ address _; do
                new_config+="Address = $address"$'\n'
-       done
+       done } < <(netstat -I "$INTERFACE" -n -W -f inet)
+       { read -r _; while read -r _ _ _ address _; do
+               new_config+="Address = $address"$'\n'
+       done } < <(netstat -I "$INTERFACE" -n -W -f inet6)
        while read -r address; do
                [[ $address =~ ^nameserver\ ([a-zA-Z0-9_=+:%.-]+)$ ]] && new_config+="DNS = ${BASH_REMATCH[1]}"$'\n'
        done < <(resolvconf -l "$INTERFACE" 2>/dev/null)
index d37e250e2cb9defe07e0d5e71fd9f26681e4a64e..786d145d2199649d3a9b86c81dbe43cc648646d3 100755 (executable)
@@ -315,12 +315,12 @@ set_config() {
 }
 
 save_config() {
-       # TODO: actually save addresses by running ifconfig and dnses too
-       local old_umask new_config current_config address cmd
+       local old_umask new_config current_config address network cmd
        new_config=$'[Interface]\n'
-       for address in "${ADDRESSES[@]}"; do
-               new_config+="Address = $address"$'\n'
-       done
+       { read -r _; while read -r _ _ network address _; do
+               [[ $network == *Link* ]] || new_config+="Address = $address"$'\n'
+       done } < <(netstat -I "$REAL_INTERFACE" -n -v)
+       # TODO: actually determine current DNS for interface
        for address in "${DNS[@]}"; do
                new_config+="DNS = $address"$'\n'
        done