From 88a965fba399c2012eac77e5c3c4f28c9113c5ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Thu, 12 Jun 2025 13:35:49 +0200 Subject: [PATCH] interface-ip: install routes after IPv6 prefix address setup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In interface_ip_set_enabled(), routes are currently installed after IP addresses are set up, but before IPv6 prefix addresses are set up. This prevents configured static IPv6 routes that have next hops set to addresses belonging to those prefixes from being installed during interface setup as the relevant netlink requests return -EHOSTUNREACH (No route to host). Fix by deferring route installation until after IPv6 prefix addresses are configured. Signed-off-by: Michał Kępień --- interface-ip.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/interface-ip.c b/interface-ip.c index 7e60f64..683029e 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -1727,12 +1727,6 @@ void interface_ip_set_enabled(struct interface_ip_settings *ip, bool enabled) addr->enabled = enabled; } - vlist_for_each_element(&ip->route, route, node) - interface_ip_set_route_enabled(ip, route, enabled); - if (ip == &iface->proto_ip) - vlist_for_each_element(&iface->host_routes, route, node) - interface_ip_set_route_enabled(ip, route, enabled); - vlist_for_each_element(&ip->neighbor, neighbor, node) { if (neighbor->enabled == enabled) continue; @@ -1753,6 +1747,12 @@ void interface_ip_set_enabled(struct interface_ip_settings *ip, bool enabled) if (!strcmp(a->name, ip->iface->name)) interface_set_prefix_address(a, c, ip->iface, enabled); + vlist_for_each_element(&ip->route, route, node) + interface_ip_set_route_enabled(ip, route, enabled); + if (ip == &iface->proto_ip) + vlist_for_each_element(&iface->host_routes, route, node) + interface_ip_set_route_enabled(ip, route, enabled); + if (ip->iface->policy_rules_set != enabled && ip->iface->l3_dev.dev) { if (ip->iface->l3_dev.dev->settings.ipv6) {