network/nexthop: drop dependent routes on removal

If a nexthop is removed, dependent routes are silently removed by the kernel.
Hence, networkd may be confused that routes that depends on the nexthop still
exist, and may fail to configure other routes or so.

This is the one for routes of 3cbbe8635a.
This commit is contained in:
Yu Watanabe
2024-01-25 16:43:44 +09:00
parent 6f09031e4d
commit b91743e019
+6 -1
View File
@@ -12,6 +12,7 @@
#include "networkd-network.h"
#include "networkd-nexthop.h"
#include "networkd-queue.h"
#include "networkd-route.h"
#include "networkd-route-util.h"
#include "parse-util.h"
#include "set.h"
@@ -489,7 +490,7 @@ static int nexthop_remove_dependents(NextHop *nexthop, Manager *manager) {
assert(nexthop);
assert(manager);
/* If a nexthop is removed, the kernel silently removes nexthops that depend on the
/* If a nexthop is removed, the kernel silently removes nexthops and routes that depend on the
* removed nexthop. Let's remove them for safety (though, they are already removed in the kernel,
* hence that should fail), and forget them. */
@@ -503,6 +504,10 @@ static int nexthop_remove_dependents(NextHop *nexthop, Manager *manager) {
RET_GATHER(r, nexthop_remove(nh, manager));
}
Route *route;
SET_FOREACH(route, nexthop->routes)
RET_GATHER(r, route_remove(route, manager));
return r;
}