netifd: Add interface config support to enable/disable IPv6 in the kernel per device
[project/netifd.git] / interface-ip.c
index 6f42015..208ec3f 100644 (file)
@@ -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");