From 565194127a92fe80b6254b4ed9482c8473197586 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 2 Oct 2020 11:56:12 +0900 Subject: [PATCH] network: introduce link_serialize_routes() --- src/network/networkd-link.c | 20 +++----------------- src/network/networkd-route.c | 25 +++++++++++++++++++++++++ src/network/networkd-route.h | 1 + 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 0217300be6..4daefb8dbe 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -3975,7 +3975,6 @@ int link_save(Link *link) { const char *admin_state, *oper_state, *carrier_state, *address_state; _cleanup_free_ char *temp_path = NULL; _cleanup_fclose_ FILE *f = NULL; - Route *route; Address *a; int r; @@ -4210,22 +4209,9 @@ int link_save(Link *link) { /************************************************************/ - fputs("ROUTES=", f); - space = false; - SET_FOREACH(route, link->routes) { - _cleanup_free_ char *route_str = NULL; - - r = in_addr_to_string(route->family, &route->dst, &route_str); - if (r < 0) - goto fail; - - fprintf(f, "%s%s/%hhu/%hhu/%"PRIu32"/%"PRIu32"/"USEC_FMT, - space ? " " : "", route_str, - route->dst_prefixlen, route->tos, route->priority, route->table, route->lifetime); - space = true; - } - - fputc('\n', f); + r = link_serialize_routes(link, f); + if (r < 0) + goto fail; } print_link_hashmap(f, "CARRIER_BOUND_TO=", link->bound_to_links); diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 0ac6ccd794..ad837099c8 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -1234,6 +1234,31 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Ma return 1; } +int link_serialize_routes(Link *link, FILE *f) { + bool space = false; + Route *route; + + assert(link); + assert(link->network); + assert(f); + + fputs("ROUTES=", f); + SET_FOREACH(route, link->routes) { + _cleanup_free_ char *route_str = NULL; + + if (in_addr_to_string(route->family, &route->dst, &route_str) < 0) + continue; + + fprintf(f, "%s%s/%hhu/%hhu/%"PRIu32"/%"PRIu32"/"USEC_FMT, + space ? " " : "", route_str, + route->dst_prefixlen, route->tos, route->priority, route->table, route->lifetime); + space = true; + } + fputc('\n', f); + + return 0; +} + int link_deserialize_routes(Link *link, const char *routes) { int r; diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h index 02b7c1b3ad..3cff8bba41 100644 --- a/src/network/networkd-route.h +++ b/src/network/networkd-route.h @@ -74,6 +74,7 @@ int route_remove(Route *route, Link *link, link_netlink_message_handler_t callba int link_set_routes(Link *link); int link_drop_routes(Link *link); int link_drop_foreign_routes(Link *link); +int link_serialize_routes(Link *link, FILE *f); int link_deserialize_routes(Link *link, const char *routes); int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);