Run ip link up before adding addresses and routes
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 7 Apr 2024 13:41:04 +0000 (15:41 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 7 Apr 2024 13:41:04 +0000 (15:41 +0200)
On Linux, some iproute2 commands to set addresses and add routes don't work
or have no effect if the link is not up, so make sure we set the link up
first.

src/ifconfig.c

index d4f1386..9913b81 100644 (file)
@@ -28,6 +28,9 @@ static long start;
 #ifndef HAVE_WINDOWS
 void ifconfig_header(FILE *out) {
        fprintf(out, "#!/bin/sh\n");
+#ifdef HAVE_LINUX
+       fprintf(out, "ip link set \"$INTERFACE\" up\n");
+#endif
        start = ftell(out);
 }
 
@@ -50,12 +53,17 @@ void ifconfig_slaac(FILE *out) {
 
 bool ifconfig_footer(FILE *out) {
        if(ftell(out) == start) {
-               fprintf(out, "echo 'Unconfigured tinc-up script, please edit '$0'!'\n\n#ifconfig $INTERFACE <your vpn IP address> netmask <netmask of whole VPN>\n");
-               return false;
-       } else {
+               fprintf(out,
 #ifdef HAVE_LINUX
-               fprintf(out, "ip link set \"$INTERFACE\" up\n");
+                       "#ip addr add <your vpn IP address>/<prefix of whole VPN> dev $INTERFACE\n"
 #else
+                       "#ifconfig $INTERFACE <your vpn IP address>/<prefix of whole VPN>\n"
+#endif
+                       "\n"
+                       "echo \"Unconfigured tinc-up script, please edit '$0'!\" >&2\n");
+               return false;
+       } else {
+#ifndef HAVE_LINUX
                fprintf(out, "ifconfig \"$INTERFACE\" up\n");
 #endif
                return true;