From 3518ff4a4229f4d870c49ad4a5df427a17314a95 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 13 Jan 2024 15:39:06 +0900 Subject: [PATCH] network/route: introduce route_get_link() and use it in log_route_debug() No functional change, just refactoring and preparation for later commits. --- src/network/networkd-route.c | 49 ++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index ed40af3ac6..48b8af2f06 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -293,6 +293,25 @@ int route_get(Manager *manager, Link *link, const Route *in, Route **ret) { return 0; } +static int route_get_link(Manager *manager, const Route *route, Link **ret) { + int r; + + assert(manager); + assert(route); + + if (route->nexthop_id != 0) { + NextHop *nh; + + r = nexthop_get_by_id(manager, route->nexthop_id, &nh); + if (r < 0) + return r; + + return link_get_by_index(manager, nh->ifindex, ret); + } + + return route_nexthop_get_link(manager, NULL, &route->nexthop, ret); +} + int route_dup(const Route *src, Route **ret) { _cleanup_(route_freep) Route *dest = NULL; int r; @@ -510,20 +529,21 @@ void link_mark_routes(Link *link, NetworkConfigSource source) { } } -static void log_route_debug(const Route *route, const char *str, const Link *link, const Manager *manager) { +static void log_route_debug(const Route *route, const char *str, Manager *manager) { _cleanup_free_ char *state = NULL, *nexthop = NULL, *prefsrc = NULL, *table = NULL, *scope = NULL, *proto = NULL, *flags = NULL; const char *dst, *src; + Link *link = NULL; assert(route); assert(str); assert(manager); - /* link may be NULL. */ - if (!DEBUG_LOGGING) return; + (void) route_get_link(manager, route, &link); + (void) network_config_state_to_string_alloc(route->state, &state); dst = in_addr_is_set(route->family, &route->dst) || route->dst_prefixlen > 0 ? @@ -654,7 +674,7 @@ int route_remove(Route *route) { link = route->link; manager = route->manager ?: link->manager; - log_route_debug(route, "Removing", link, manager); + log_route_debug(route, "Removing", manager); r = sd_rtnl_message_new_route(manager->rtnl, &req, RTM_DELROUTE, route->family, @@ -961,7 +981,7 @@ static int route_setup_timer(Route *route, const struct rta_cacheinfo *cacheinfo if (r < 0) return log_link_warning_errno(route->link, r, "Failed to configure expiration timer for route, ignoring: %m"); - log_route_debug(route, "Configured expiration timer for", route->link, manager); + log_route_debug(route, "Configured expiration timer for", manager); return 1; } @@ -999,14 +1019,11 @@ static int route_configure(const Route *route, uint32_t lifetime_sec, Link *link int r; assert(route); - assert(IN_SET(route->family, AF_INET, AF_INET6)); assert(link); assert(link->manager); - assert(link->manager->rtnl); - assert(link->ifindex > 0); assert(req); - log_route_debug(route, "Configuring", link, link->manager); + log_route_debug(route, "Configuring", link->manager); r = sd_rtnl_message_new_route(link->manager->rtnl, &m, RTM_NEWROUTE, route->family, route->protocol); if (r < 0) @@ -1188,7 +1205,7 @@ int link_request_route( route_free(route); } - log_route_debug(existing, "Requesting", link, link->manager); + log_route_debug(existing, "Requesting", link->manager); r = link_queue_request_safe(link, REQUEST_TYPE_ROUTE, existing, NULL, route_hash_func, @@ -1229,7 +1246,7 @@ static int link_request_static_route(Link *link, Route *route) { return link_request_route(link, route, false, &link->static_route_messages, static_route_handler, NULL); - log_route_debug(route, "Requesting", link, link->manager); + log_route_debug(route, "Requesting", link->manager); return link_queue_request_safe(link, REQUEST_TYPE_ROUTE, route, NULL, route_hash_func, route_compare_func, route_process_request, @@ -1350,7 +1367,7 @@ static int process_route_one( if (!route) { if (!manager->manage_foreign_routes) { route_enter_configured(tmp); - log_route_debug(tmp, "Ignoring received", link, manager); + log_route_debug(tmp, "Ignoring received", manager); return 0; } @@ -1369,7 +1386,7 @@ static int process_route_one( route->flags = tmp->flags; route_enter_configured(route); - log_route_debug(route, is_new ? "Received new" : "Received remembered", link, manager); + log_route_debug(route, is_new ? "Received new" : "Received remembered", manager); (void) route_setup_timer(route, cacheinfo); @@ -1379,14 +1396,14 @@ static int process_route_one( if (route) { route_enter_removed(route); if (route->state == 0) { - log_route_debug(route, "Forgetting", link, manager); + log_route_debug(route, "Forgetting", manager); route_free(route); } else - log_route_debug(route, "Removed", link, manager); + log_route_debug(route, "Removed", manager); } else log_route_debug(tmp, manager->manage_foreign_routes ? "Kernel removed unknown" : "Ignoring received", - link, manager); + manager); break;