X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=interface-ip.c;h=2280266552b3d527e2d80993c0fd33b600e99944;hb=89c6331673054d530b30b8e9e8bdf331639dfcd5;hp=60902f994e41cdb4191f6c5640a4c5527072fdc7;hpb=e93c42c036c4b4df1f65f261def31cf1a429e942;p=project%2Fnetifd.git diff --git a/interface-ip.c b/interface-ip.c index 60902f9..2280266 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -920,7 +920,9 @@ interface_update_prefix(struct vlist_tree *tree, } else if (node_new) { // Set null-route to avoid routing loops system_add_route(NULL, &route); - interface_update_prefix_assignments(prefix_new, true); + + if (!prefix_new->iface || !prefix_new->iface->proto_ip.no_delegation) + interface_update_prefix_assignments(prefix_new, true); } else if (node_old) { // Remove null-route interface_update_prefix_assignments(prefix_old, false); @@ -928,11 +930,12 @@ interface_update_prefix(struct vlist_tree *tree, } if (node_old) { - list_del(&prefix_old->head); + if (prefix_old->head.next) + list_del(&prefix_old->head); free(prefix_old); } - if (node_new) + if (node_new && (!prefix_new->iface || !prefix_new->iface->proto_ip.no_delegation)) list_add(&prefix_new->head, &prefixes); }