From da10d2d5846963ed8ce2e9db4d1c4e57e3d80705 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 5 Dec 2021 05:03:09 +0900 Subject: [PATCH] network: dhcp6pd: drop unreachable routes when lease lost --- src/network/networkd-dhcp-prefix-delegation.c | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/network/networkd-dhcp-prefix-delegation.c b/src/network/networkd-dhcp-prefix-delegation.c index 2b2f7877950..24bafb8b4ab 100644 --- a/src/network/networkd-dhcp-prefix-delegation.c +++ b/src/network/networkd-dhcp-prefix-delegation.c @@ -655,6 +655,7 @@ static int dhcp6_pd_finalize(Link *link) { } void dhcp6_pd_prefix_lost(Link *dhcp6_link) { + Route *route; Link *link; int r; @@ -670,6 +671,25 @@ void dhcp6_pd_prefix_lost(Link *dhcp6_link) { 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); } -- 2.47.3