network: ignore requested ipv6 routing policy rule when ipv6 is disabled by sysctl
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 11 Jun 2019 14:29:57 +0000 (23:29 +0900)
committerMichael Biebl <biebl@debian.org>
Mon, 27 Apr 2020 17:02:57 +0000 (18:02 +0100)
(cherry picked from commit 7ef7e5509b637e660e89ba8a938930ec01de6e54)

Gbp-Pq: Name network-ignore-requested-ipv6-routing-policy-rule-when-ip.patch

src/network/networkd-link.c
src/network/networkd-routing-policy-rule.c

index 5a181c2c3f83bfbbb2cc378f5bda1a4336aacffb..13852af7043cc85634891107692a4b4765a6a568 100644 (file)
@@ -765,8 +765,8 @@ static int link_request_set_routing_policy_rule(Link *link) {
                         link_enter_failed(link);
                         return r;
                 }
-
-                link->routing_policy_rule_messages++;
+                if (r > 0)
+                        link->routing_policy_rule_messages++;
         }
 
         routing_policy_rule_purge(link->manager, link);
index 65a9af2c1945817543c02095c64235dbb4b10b42..0b62a0e638f186e710ee60d7e056f76c25ea2dad 100644 (file)
@@ -492,6 +492,11 @@ int routing_policy_rule_configure(RoutingPolicyRule *rule, Link *link, link_netl
         assert(link->manager);
         assert(link->manager->rtnl);
 
+        if (rule->family == AF_INET6 && manager_sysctl_ipv6_enabled(link->manager) == 0) {
+                log_link_warning(link, "An IPv6 routing policy rule is requested, but IPv6 is disabled by sysctl, ignoring.");
+                return 0;
+        }
+
         r = sd_rtnl_message_new_routing_policy_rule(link->manager->rtnl, &m, RTM_NEWRULE, rule->family);
         if (r < 0)
                 return log_error_errno(r, "Could not allocate RTM_NEWRULE message: %m");
@@ -609,7 +614,7 @@ int routing_policy_rule_configure(RoutingPolicyRule *rule, Link *link, link_netl
         if (r < 0)
                 return log_error_errno(r, "Could not add rule: %m");
 
-        return 0;
+        return 1;
 }
 
 static int parse_fwmark_fwmask(const char *s, uint32_t *fwmark, uint32_t *fwmask) {