}
void dhcp6_pd_prefix_lost(Link *dhcp6_link) {
+ Route *route;
Link *link;
int r;
link_enter_failed(link);
}
+ SET_FOREACH(route, dhcp6_link->manager->routes) {
+ if (route->source != NETWORK_CONFIG_SOURCE_DHCP6)
+ continue;
+ if (route->family != AF_INET6)
+ continue;
+ if (route->type != RTN_UNREACHABLE)
+ continue;
+ if (!set_contains(dhcp6_link->dhcp6_pd_prefixes,
+ &(struct in_addr_prefix) {
+ .family = AF_INET6,
+ .prefixlen = route->dst_prefixlen,
+ .address = route->dst }))
+ continue;
+
+ (void) route_remove(route);
+
+ route_cancel_request(route, dhcp6_link);
+ }
+
set_clear(dhcp6_link->dhcp6_pd_prefixes);
}