Use the onlink flag when adding routes on Linux.
authorGuus Sliepen <guus@tinc-vpn.org>
Thu, 18 Oct 2018 14:10:32 +0000 (16:10 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Thu, 18 Oct 2018 14:10:32 +0000 (16:10 +0200)
As reported by iczero, adding gateway routes on Linux can fail if the
gateway address is not reachable yet, either because the interface is
down, or if the gateway address is not inside any route that already is
added or is being added to that interface. By adding the onlink flag,
iproute2 will just add the route without questions.

src/ifconfig.c

index 5f6146181994a9bf05f67a4aa0275316852089d0..76092a7b268c52fd83621a07d2c3852377698e93 100644 (file)
@@ -199,11 +199,11 @@ void ifconfig_route(FILE *out, const char *value) {
        if(*gateway_str) {
                switch(subnet.type) {
                case SUBNET_IPV4:
-                       fprintf(out, "ip route add %s via %s dev \"$INTERFACE\"\n", subnet_str, gateway_str);
+                       fprintf(out, "ip route add %s via %s dev \"$INTERFACE\" onlink\n", subnet_str, gateway_str);
                        break;
 
                case SUBNET_IPV6:
-                       fprintf(out, "ip route add %s via %s dev \"$INTERFACE\"\n", subnet_str, gateway_str);
+                       fprintf(out, "ip route add %s via %s dev \"$INTERFACE\" onlink\n", subnet_str, gateway_str);
                        break;
 
                default: