summaryrefslogtreecommitdiffstats
path: root/debian/patches/network-ignore-requested-ipv6-addresses-when-ipv6-is-disa.patch
blob: 5b6ea17fd2b01bcc3d04a5622018928b6de7b9e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Tue, 11 Jun 2019 23:20:56 +0900
Subject: network: ignore requested ipv6 addresses when ipv6 is disabled by
 sysctl

(cherry picked from commit 54a1a535bd60f13964bbddd8f381601e33e8e56f)
---
 src/network/networkd-address.c | 7 ++++++-
 src/network/networkd-link.c    | 4 ++--
 src/network/networkd-ndisc.c   | 4 ++--
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index 3cdbd9e..a9f65e5 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -565,6 +565,11 @@ int address_configure(
         assert(link->manager->rtnl);
         assert(callback);
 
+        if (address->family == AF_INET6 && manager_sysctl_ipv6_enabled(link->manager) == 0) {
+                log_link_warning(link, "An IPv6 address is requested, but IPv6 is disabled by sysctl, ignoring.");
+                return 0;
+        }
+
         /* If this is a new address, then refuse adding more than the limit */
         if (address_get(link, address->family, &address->in_addr, address->prefixlen, NULL) <= 0 &&
             set_size(link->addresses) >= ADDRESSES_PER_LINK_MAX)
@@ -669,7 +674,7 @@ int address_configure(
                 return log_error_errno(r, "Could not add address: %m");
         }
 
-        return 0;
+        return 1;
 }
 
 int config_parse_broadcast(
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 322e701..638aae0 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -1123,8 +1123,8 @@ static int link_request_set_addresses(Link *link) {
                         link_enter_failed(link);
                         return r;
                 }
-
-                link->address_messages++;
+                if (r > 0)
+                        link->address_messages++;
         }
 
         LIST_FOREACH(labels, label, link->network->address_labels) {
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index e5b8d11..78c98a0 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -205,8 +205,8 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r
                 link_enter_failed(link);
                 return r;
         }
-
-        link->ndisc_messages++;
+        if (r > 0)
+                link->ndisc_messages++;
 
         return 0;
 }