X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=interface-ip.c;h=208ec3f0e723dd65ae0dafd8d738538228c03e2b;hp=6f4201592068fc597c3c69779f73e3421fd6000a;hb=98ca67469da70accd710b14c28e77be2126170a8;hpb=235a02424c3ab1b59308895c4f00395dacf2557c diff --git a/interface-ip.c b/interface-ip.c index 6f42015..208ec3f 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -400,6 +400,9 @@ route_cmp(const void *k1, const void *k2, void *ptr) if (r1->sourcemask != r2->sourcemask) return r1->sourcemask - r2->sourcemask; + if (r1->table != r2->table) + return r1->table - r2->table; + int maskcmp = memcmp(&r1->source, &r2->source, sizeof(r1->source)); if (maskcmp) return maskcmp; @@ -661,8 +664,8 @@ interface_set_prefix_address(struct device_prefix_assignment *assignment, } assignment->enabled = false; - } else if (add && (iface->state == IFS_UP || iface->state == IFS_SETUP)) { - system_add_address(l3_downlink, &addr); + } else if (add && (iface->state == IFS_UP || iface->state == IFS_SETUP) && + !system_add_address(l3_downlink, &addr)) { if (prefix->iface && !assignment->enabled) { set_ip_source_policy(true, true, IPRULE_PRIORITY_REJECT, &addr.addr, addr.mask, 0, iface, "unreachable");