From: Yu Watanabe Date: Mon, 3 Oct 2022 03:39:56 +0000 (+0900) Subject: network: introduce {address,route}_remove_and_drop() X-Git-Tag: v252-rc1~16^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4b7631468e0a28da1366d7f2d6f616b35acce70;p=thirdparty%2Fsystemd.git network: introduce {address,route}_remove_and_drop() Preparation for later commits. --- diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index bb1eedc6f1d..60d3c6286ed 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -765,6 +765,18 @@ int address_remove(Address *address) { return 0; } +int address_remove_and_drop(Address *address) { + if (!address) + return 0; + + address_cancel_request(address); + + if (address_exists(address)) + return address_remove(address); + + return address_drop(address); +} + bool link_address_is_dynamic(const Link *link, const Address *address) { Route *route; diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h index ef29caf4e78..7a1e44632d5 100644 --- a/src/network/networkd-address.h +++ b/src/network/networkd-address.h @@ -78,6 +78,7 @@ Address* address_free(Address *address); int address_get(Link *link, const Address *in, Address **ret); int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg); int address_remove(Address *address); +int address_remove_and_drop(Address *address); int address_dup(const Address *src, Address **ret); bool address_is_ready(const Address *a); void address_set_broadcast(Address *a, Link *link); diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index f1fba4ff425..2b17959ca2e 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -781,6 +781,21 @@ int route_remove(Route *route) { return 0; } +int route_remove_and_drop(Route *route) { + if (!route) + return 0; + + route_cancel_request(route, NULL); + + if (route_exists(route)) + return route_remove(route); + + if (route->state == 0) + route_free(route); + + return 0; +} + static void manager_mark_routes(Manager *manager, bool foreign, const Link *except) { Route *route; Link *link; diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h index 071803cefbd..5fc76b17f85 100644 --- a/src/network/networkd-route.h +++ b/src/network/networkd-route.h @@ -85,6 +85,7 @@ int route_dup(const Route *src, Route **ret); int route_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg); int route_remove(Route *route); +int route_remove_and_drop(Route *route); int route_get(Manager *manager, Link *link, const Route *in, Route **ret);