From 4645ad47ace6a07011533ccf4e137261f2e466f0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 28 Nov 2018 21:22:42 +0100 Subject: [PATCH] network: use route_remove_handler() as the default callback of route_remove() --- src/network/networkd-dhcp4.c | 9 +++------ src/network/networkd-ipv4ll.c | 2 +- src/network/networkd-link.c | 22 ++-------------------- src/network/networkd-link.h | 2 -- src/network/networkd-route.c | 23 +++++++++++++++++++++-- 5 files changed, 27 insertions(+), 31 deletions(-) diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index c8e07028f2..48c0d3e1e4 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -216,8 +216,7 @@ static int dhcp_lease_lost(Link *link) { assert_se(sd_dhcp_route_get_destination(routes[i], &route->dst.in) >= 0); assert_se(sd_dhcp_route_get_destination_prefix_length(routes[i], &route->dst_prefixlen) >= 0); - route_remove(route, link, - link_route_remove_handler); + route_remove(route, link, NULL); } } } @@ -237,8 +236,7 @@ static int dhcp_lease_lost(Link *link) { route_gw->dst_prefixlen = 32; route_gw->scope = RT_SCOPE_LINK; - route_remove(route_gw, link, - link_route_remove_handler); + route_remove(route_gw, link, NULL); } r = route_new(&route); @@ -246,8 +244,7 @@ static int dhcp_lease_lost(Link *link) { route->family = AF_INET; route->gw.in = gateway; - route_remove(route, link, - link_route_remove_handler); + route_remove(route, link, NULL); } } diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index e0d2ef01f8..926dec9a8a 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -44,7 +44,7 @@ static int ipv4ll_address_lost(Link *link) { route->scope = RT_SCOPE_LINK; route->priority = IPV4LL_ROUTE_METRIC; - route_remove(route, link, link_route_remove_handler); + route_remove(route, link, NULL); link_check_ready(link); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index c4287ff342..f525ba34ff 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -892,24 +892,6 @@ static int link_enter_set_routes(Link *link) { return 0; } -int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) { - Link *link = userdata; - int r; - - assert(m); - assert(link); - assert(link->ifname); - - if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER)) - return 1; - - r = sd_netlink_message_get_errno(m); - if (r < 0 && r != -ESRCH) - log_link_warning_errno(link, r, "Could not drop route: %m"); - - return 1; -} - static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) { Link *link = userdata; int r; @@ -2662,7 +2644,7 @@ static int link_drop_foreign_config(Link *link) { if (r < 0) return r; } else { - r = route_remove(route, link, link_route_remove_handler); + r = route_remove(route, link, NULL); if (r < 0) return r; } @@ -2701,7 +2683,7 @@ static int link_drop_config(Link *link) { if (route->protocol == RTPROT_KERNEL) continue; - r = route_remove(route, link, link_route_remove_handler); + r = route_remove(route, link, NULL); if (r < 0) return r; } diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index a24d83c262..a1f4030971 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -140,8 +140,6 @@ void link_drop(Link *link); int link_up(Link *link); int link_down(Link *link); -int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata); - void link_enter_failed(Link *link); int link_initialized(Link *link, sd_device *device); diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 2f70844d47..edcfa604ed 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -378,6 +378,24 @@ void route_update(Route *route, route->type = type; } +static int route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) { + Link *link = userdata; + int r; + + assert(m); + assert(link); + assert(link->ifname); + + if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER)) + return 1; + + r = sd_netlink_message_get_errno(m); + if (r < 0 && r != -ESRCH) + log_link_warning_errno(link, r, "Could not drop route: %m"); + + return 1; +} + int route_remove(Route *route, Link *link, sd_netlink_message_handler_t callback) { @@ -454,7 +472,8 @@ int route_remove(Route *route, Link *link, return log_error_errno(r, "Could not append RTA_OIF attribute: %m"); } - r = sd_netlink_call_async(link->manager->rtnl, NULL, req, callback, + r = sd_netlink_call_async(link->manager->rtnl, NULL, req, + callback ?: route_remove_handler, link_netlink_destroy_callback, link, 0, __func__); if (r < 0) return log_error_errno(r, "Could not send rtnetlink message: %m"); @@ -470,7 +489,7 @@ int route_expire_handler(sd_event_source *s, uint64_t usec, void *userdata) { assert(route); - r = route_remove(route, route->link, link_route_remove_handler); + r = route_remove(route, route->link, NULL); if (r < 0) log_warning_errno(r, "Could not remove route: %m"); else