]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce {address,route}_remove_and_drop()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 3 Oct 2022 03:39:56 +0000 (12:39 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 3 Oct 2022 15:25:14 +0000 (00:25 +0900)
Preparation for later commits.

src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-route.c
src/network/networkd-route.h

index bb1eedc6f1d99c91bcdf3473c1bd444bfc4a4e54..60d3c6286ed800b42b25faa863f6628d0607d85a 100644 (file)
@@ -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;
 
index ef29caf4e78d5152035841d5fc615ce6499c5ada..7a1e44632d5d207c56e77f0695a72f019717fce1 100644 (file)
@@ -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);
index f1fba4ff4259816a11e292db51f0ef1920760350..2b17959ca2ebb6bba3c64b8fba715d3e9c729e9b 100644 (file)
@@ -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;
index 071803cefbd8b05475f81e548577bb45b170ac62..5fc76b17f8549a87e7c9cba1303539a699e06b04 100644 (file)
@@ -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);