summaryrefslogtreecommitdiff
path: root/src/network/networkd-route.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/networkd-route.c')
-rw-r--r--src/network/networkd-route.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
index 7c89e66ab9..1f613b6e0b 100644
--- a/src/network/networkd-route.c
+++ b/src/network/networkd-route.c
@@ -1709,14 +1709,21 @@ static int route_is_ready_to_configure(const Route *route, Link *link) {
if (manager_get_nexthop_by_id(link->manager, route->nexthop_id, &nh) < 0)
return false;
- HASHMAP_FOREACH(nhg, nh->group)
- if (manager_get_nexthop_by_id(link->manager, nhg->id, NULL) < 0)
+ if (!nexthop_exists(nh))
+ return false;
+
+ HASHMAP_FOREACH(nhg, nh->group) {
+ NextHop *g;
+
+ if (manager_get_nexthop_by_id(link->manager, nhg->id, &g) < 0)
return false;
+
+ if (!nexthop_exists(g))
+ return false;
+ }
}
- if (route_type_is_reject(route) || (nh && nh->blackhole)) {
- if (nh && link->manager->nexthop_remove_messages > 0)
- return false;
+ if (route_type_is_reject(route)) {
if (link->manager->route_remove_messages > 0)
return false;
} else {
@@ -1725,8 +1732,6 @@ static int route_is_ready_to_configure(const Route *route, Link *link) {
HASHMAP_FOREACH(l, link->manager->links_by_index) {
if (l->address_remove_messages > 0)
return false;
- if (l->nexthop_remove_messages > 0)
- return false;
if (l->route_remove_messages > 0)
return false;
}