X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface-ip.c;h=6659f8bac16dc0a3ad974250103e0201e7272034;hp=8d1265882f6e16e88d496328679d2d5eac59d4f0;hb=6b4570a107447034b5ae3861a7ca388d3052460a;hpb=732074385389b1bb766a0b09b967d6883c357813 diff --git a/interface-ip.c b/interface-ip.c index 8d12658..6659f8b 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -601,7 +601,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->mtu == route_new->mtu) && (route_old->type == route_new->type) && - !route_old->failed; + (route_old->valid_until == route_new->valid_until) && !route_old->failed; if (node_old) { if (!(route_old->flags & DEVADDR_EXTERNAL) && route_old->enabled && !keep) @@ -1154,9 +1154,11 @@ void interface_ip_set_enabled(struct interface_ip_settings *ip, bool enabled) struct device_addr *addr; struct device_route *route; struct device *dev; + struct interface *iface; ip->enabled = enabled; - dev = ip->iface->l3_dev.dev; + iface = ip->iface; + dev = iface->l3_dev.dev; if (!dev) return; @@ -1164,10 +1166,14 @@ void interface_ip_set_enabled(struct interface_ip_settings *ip, bool enabled) if (addr->enabled == enabled) continue; - if (enabled) + if (enabled) { system_add_address(dev, addr); - else + if ((addr->flags & DEVADDR_OFFLINK) || iface->metric) + interface_handle_subnet_route(iface, addr, true); + } else { + interface_handle_subnet_route(iface, addr, false); system_del_address(dev, addr); + } addr->enabled = enabled; }