]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/route: introduce route_get_request() 30975/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 16 Jan 2024 05:19:01 +0000 (14:19 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 19 Jan 2024 01:23:14 +0000 (10:23 +0900)
No functional change, just refactoring and preparation for later
commits.

src/network/networkd-route.c

index 0fbe99f06a268a34514d0d57070c0b6b0dfad2df..f877702efc7b5f0cb3af07812da262ae723aaa8e 100644 (file)
@@ -336,6 +336,29 @@ static int route_get_link(Manager *manager, const Route *route, Link **ret) {
         return route_nexthop_get_link(manager, NULL, &route->nexthop, ret);
 }
 
+static int route_get_request(Link *link, const Route *route, Request **ret) {
+        Request *req;
+
+        assert(link);
+        assert(link->manager);
+        assert(route);
+
+        req = ordered_set_get(link->manager->request_queue,
+                              &(const Request) {
+                                      .link = link,
+                                      .type = REQUEST_TYPE_ROUTE,
+                                      .userdata = (void*) route,
+                                      .hash_func = (hash_func_t) route_hash_func,
+                                      .compare_func = (compare_func_t) route_compare_func,
+                              });
+        if (!req)
+                return -ENOENT;
+
+        if (ret)
+                *ret = req;
+        return 0;
+}
+
 int route_dup(const Route *src, const RouteNextHop *nh, Route **ret) {
         _cleanup_(route_freep) Route *dest = NULL;
         int r;
@@ -1348,29 +1371,17 @@ int link_request_static_routes(Link *link, bool only_ipv4) {
 }
 
 void route_cancel_request(Route *route, Link *link) {
-        Request *req;
-
         assert(route);
 
-        link = route->link ?: link;
-
-        assert(link);
-        assert(link->manager);
+        link = ASSERT_PTR(route->link ?: link);
 
         if (!route_is_requesting(route))
                 return;
 
-        req = ordered_set_get(link->manager->request_queue,
-                              &(Request) {
-                                      .link = link,
-                                      .type = REQUEST_TYPE_ROUTE,
-                                      .userdata = route,
-                                      .hash_func = (hash_func_t) route_hash_func,
-                                      .compare_func = (compare_func_t) route_compare_func,
-                              });
-
-        if (req)
+        Request *req;
+        if (route_get_request(link, route, &req) >= 0)
                 request_detach(req);
+
         route_cancel_requesting(route);
 }