network: ignore requested ipv6 route when ipv6 is disabled by sysctl
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 11 Jun 2019 14:26:11 +0000 (23:26 +0900)
committerMichael Biebl <biebl@debian.org>
Wed, 21 Aug 2019 20:09:13 +0000 (21:09 +0100)
(cherry picked from commit c442331750a2a9711036080f7590e190b9b0eb54)

Gbp-Pq: Name network-ignore-requested-ipv6-route-when-ipv6-is-disabled.patch

src/network/networkd-link.c
src/network/networkd-ndisc.c
src/network/networkd-route.c

index d3752b2d3e1b29634c72ac28804b29c4163e0325..4de610b36d4b597691bfa82add30963520b2e0b0 100644 (file)
@@ -967,8 +967,8 @@ static int link_request_set_routes(Link *link) {
                                 link_enter_failed(link);
                                 return r;
                         }
-
-                        link->route_messages++;
+                        if (r > 0)
+                                link->route_messages++;
                 }
 
         if (link->route_messages == 0) {
index 05911bda4380fe7da4a1d902a373d75c34d9e656..fd4f8df02c06506e67a2092753e216ff830b39ea 100644 (file)
@@ -117,8 +117,8 @@ static int ndisc_router_process_default(Link *link, sd_ndisc_router *rt) {
                 link_enter_failed(link);
                 return r;
         }
-
-        link->ndisc_messages++;
+        if (r > 0)
+                link->ndisc_messages++;
 
         return 0;
 }
@@ -255,8 +255,8 @@ static int ndisc_router_process_onlink_prefix(Link *link, sd_ndisc_router *rt) {
                 link_enter_failed(link);
                 return r;
         }
-
-        link->ndisc_messages++;
+        if (r > 0)
+                link->ndisc_messages++;
 
         return 0;
 }
@@ -316,8 +316,8 @@ static int ndisc_router_process_route(Link *link, sd_ndisc_router *rt) {
                 link_enter_failed(link);
                 return r;
         }
-
-        link->ndisc_messages++;
+        if (r > 0)
+                link->ndisc_messages++;
 
         return 0;
 }
index 379077cbfde9c5b17303de832f5228fb9d897c73..56a9c82e092de4081c603e3082082c99579698d5 100644 (file)
@@ -498,6 +498,11 @@ int route_configure(
         assert(IN_SET(route->family, AF_INET, AF_INET6));
         assert(callback);
 
+        if (route->family == AF_INET6 && manager_sysctl_ipv6_enabled(link->manager) == 0) {
+                log_link_warning(link, "An IPv6 route is requested, but IPv6 is disabled by sysctl, ignoring.");
+                return 0;
+        }
+
         if (route_get(link, route->family, &route->dst, route->dst_prefixlen, route->tos, route->priority, route->table, NULL) <= 0 &&
             set_size(link->routes) >= routes_max())
                 return log_link_error_errno(link, SYNTHETIC_ERRNO(E2BIG),
@@ -674,7 +679,7 @@ int route_configure(
         sd_event_source_unref(route->expire);
         route->expire = TAKE_PTR(expire);
 
-        return 0;
+        return 1;
 }
 
 int network_add_ipv4ll_route(Network *network) {