]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: rename routing_policy_rule_configure_internal() and make it take callback
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 26 Apr 2021 07:10:39 +0000 (16:10 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 12 May 2021 01:30:45 +0000 (10:30 +0900)
src/network/networkd-routing-policy-rule.c

index 14e079eed30a77892c0012bec9014f12ac4a4b58..18b86fc2d9aa6a4da0d44cde6fe4a09afa29a064 100644 (file)
@@ -574,45 +574,23 @@ static int routing_policy_rule_remove(const RoutingPolicyRule *rule, Manager *ma
         return 0;
 }
 
-static int routing_policy_rule_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
-        int r;
-
-        assert(rtnl);
-        assert(m);
-        assert(link);
-        assert(link->ifname);
-        assert(link->routing_policy_rule_messages > 0);
-
-        link->routing_policy_rule_messages--;
-
-        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
-                return 1;
-
-        r = sd_netlink_message_get_errno(m);
-        if (r < 0 && r != -EEXIST) {
-                log_link_message_warning_errno(link, m, r, "Could not add routing policy rule");
-                link_enter_failed(link);
-                return 1;
-        }
-
-        if (link->routing_policy_rule_messages == 0) {
-                log_link_debug(link, "Routing policy rule configured");
-                link->routing_policy_rules_configured = true;
-                link_check_ready(link);
-        }
-
-        return 1;
-}
+static int routing_policy_rule_configure(
+                const RoutingPolicyRule *rule,
+                int family,
+                Link *link,
+                link_netlink_message_handler_t callback,
+                RoutingPolicyRule **ret) {
 
-static int routing_policy_rule_configure_internal(const RoutingPolicyRule *rule, int family, Link *link) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *m = NULL;
         int r;
 
         assert(rule);
+        assert(IN_SET(family, AF_INET, AF_INET6));
         assert(link);
         assert(link->ifindex > 0);
         assert(link->manager);
         assert(link->manager->rtnl);
+        assert(callback);
 
         log_routing_policy_rule_debug(rule, family, "Configuring", link, link->manager);
 
@@ -624,8 +602,7 @@ static int routing_policy_rule_configure_internal(const RoutingPolicyRule *rule,
         if (r < 0)
                 return r;
 
-        r = netlink_call_async(link->manager->rtnl, NULL, m,
-                               routing_policy_rule_handler,
+        r = netlink_call_async(link->manager->rtnl, NULL, m, callback,
                                link_netlink_destroy_callback, link);
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
@@ -633,34 +610,13 @@ static int routing_policy_rule_configure_internal(const RoutingPolicyRule *rule,
         link_ref(link);
         link->routing_policy_rule_messages++;
 
-        r = routing_policy_rule_add(link->manager, rule, family, NULL);
+        r = routing_policy_rule_add(link->manager, rule, family, ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not add rule: %m");
 
         return r;
 }
 
-static int routing_policy_rule_configure(const RoutingPolicyRule *rule, Link *link) {
-        int r;
-
-        if (IN_SET(rule->family, AF_INET, AF_INET6))
-                return routing_policy_rule_configure_internal(rule, rule->family, link);
-
-        if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV4)) {
-                r = routing_policy_rule_configure_internal(rule, AF_INET, link);
-                if (r < 0)
-                        return r;
-        }
-
-        if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV6)) {
-                r = routing_policy_rule_configure_internal(rule, AF_INET6, link);
-                if (r < 0)
-                        return r;
-        }
-
-        return 0;
-}
-
 static int links_have_routing_policy_rule(const Manager *m, const RoutingPolicyRule *rule, const Link *except) {
         Link *link;
         int r;
@@ -735,6 +691,57 @@ int manager_drop_routing_policy_rules_internal(Manager *m, bool foreign, const L
         return r;
 }
 
+static int static_routing_policy_rule_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+        int r;
+
+        assert(rtnl);
+        assert(m);
+        assert(link);
+        assert(link->ifname);
+        assert(link->routing_policy_rule_messages > 0);
+
+        link->routing_policy_rule_messages--;
+
+        if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+                return 1;
+
+        r = sd_netlink_message_get_errno(m);
+        if (r < 0 && r != -EEXIST) {
+                log_link_message_warning_errno(link, m, r, "Could not add routing policy rule");
+                link_enter_failed(link);
+                return 1;
+        }
+
+        if (link->routing_policy_rule_messages == 0) {
+                log_link_debug(link, "Routing policy rule configured");
+                link->routing_policy_rules_configured = true;
+                link_check_ready(link);
+        }
+
+        return 1;
+}
+
+static int static_routing_policy_rule_configure(const RoutingPolicyRule *rule, Link *link) {
+        int r;
+
+        if (IN_SET(rule->family, AF_INET, AF_INET6))
+                return routing_policy_rule_configure(rule, rule->family, link, static_routing_policy_rule_configure_handler, NULL);
+
+        if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV4)) {
+                r = routing_policy_rule_configure(rule, AF_INET, link, static_routing_policy_rule_configure_handler, NULL);
+                if (r < 0)
+                        return r;
+        }
+
+        if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV6)) {
+                r = routing_policy_rule_configure(rule, AF_INET6, link, static_routing_policy_rule_configure_handler, NULL);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 int link_set_routing_policy_rules(Link *link) {
         RoutingPolicyRule *rule;
         int r;
@@ -750,7 +757,7 @@ int link_set_routing_policy_rules(Link *link) {
         link->routing_policy_rules_configured = false;
 
         HASHMAP_FOREACH(rule, link->network->rules_by_section) {
-                r = routing_policy_rule_configure(rule, link);
+                r = static_routing_policy_rule_configure(rule, link);
                 if (r < 0)
                         return log_link_warning_errno(link, r, "Could not set routing policy rule: %m");
         }