From d9940a3f8a5a5d4e67e67ff5386c7962e3d4adaa Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 2 Oct 2020 10:08:39 +0900 Subject: [PATCH] network: introduce network_verify_routes() --- src/network/networkd-network.c | 8 +++----- src/network/networkd-route.c | 12 +++++++++++- src/network/networkd-route.h | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index b9b3ed24d2..db192cb475 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -156,7 +156,6 @@ static int network_resolve_stacked_netdevs(Network *network) { int network_verify(Network *network) { Address *address, *address_next; - Route *route, *route_next; TrafficControl *tc; SRIOV *sr_iov; @@ -219,6 +218,8 @@ int network_verify(Network *network) { address_free(address); } if (network->n_static_routes > 0) { + Route *route; + log_warning("%s: Cannot set routes when Bond= is specified, ignoring routes.", network->filename); while ((route = network->static_routes)) @@ -298,10 +299,7 @@ int network_verify(Network *network) { if (address_section_verify(address) < 0) address_free(address); - LIST_FOREACH_SAFE(routes, route, route_next, network->static_routes) - if (route_section_verify(route, network) < 0) - route_free(route); - + network_verify_routes(network); network_verify_nexthops(network); network_verify_fdb_entries(network); network_verify_mdb_entries(network); diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index ad837099c8..65ab7f46c1 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -2162,7 +2162,7 @@ int config_parse_multipath_route( return 0; } -int route_section_verify(Route *route, Network *network) { +static int route_section_verify(Route *route, Network *network) { if (section_is_invalid(route->section)) return -EINVAL; @@ -2202,3 +2202,13 @@ int route_section_verify(Route *route, Network *network) { return 0; } + +void network_verify_routes(Network *network) { + Route *route, *route_next; + + assert(network); + + LIST_FOREACH_SAFE(routes, route, route_next, network->static_routes) + if (route_section_verify(route, network) < 0) + route_free(route); +} diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h index 3cff8bba41..42eda8e762 100644 --- a/src/network/networkd-route.h +++ b/src/network/networkd-route.h @@ -85,12 +85,12 @@ int route_add_foreign(Link *link, Route *in, Route **ret); bool route_equal(Route *r1, Route *r2); int route_expire_handler(sd_event_source *s, uint64_t usec, void *userdata); -int route_section_verify(Route *route, Network *network); DEFINE_NETWORK_SECTION_FUNCTIONS(Route, route_free); int network_add_ipv4ll_route(Network *network); int network_add_default_route_on_device(Network *network); +void network_verify_routes(Network *network); const char* route_type_to_string(int t) _const_; int route_type_from_string(const char *s) _pure_;