netifd: Check interface state only when main device is set during interface_change_config
[project/netifd.git] / interface-ip.c
index 018b657..33b5d43 100644 (file)
@@ -581,7 +581,7 @@ interface_update_proto_route(struct vlist_tree *tree,
 
        if (node_old && node_new)
                keep = !memcmp(&route_old->nexthop, &route_new->nexthop, sizeof(route_old->nexthop)) &&
-                       (route_old->table == route_new->table) && !route_old->failed;
+                       (route_old->mtu == route_new->mtu) && !route_old->failed;
 
        if (node_old) {
                if (!(route_old->flags & DEVADDR_EXTERNAL) && route_old->enabled && !keep)
@@ -622,8 +622,10 @@ interface_update_host_route(struct vlist_tree *tree,
                free(route_old);
        }
 
-       if (node_new)
-               system_add_route(dev, route_new);
+       if (node_new) {
+               if (system_add_route(dev, route_new))
+                       route_new->failed = true;
+       }
 }
 
 
@@ -1140,7 +1142,8 @@ void interface_ip_set_enabled(struct interface_ip_settings *ip, bool enabled)
                        if (!(route->flags & DEVROUTE_METRIC))
                                route->metric = ip->iface->metric;
 
-                       system_add_route(dev, route);
+                       if (system_add_route(dev, route))
+                               route->failed = true;
                } else
                        system_del_route(dev, route);
                route->enabled = _enabled;