network: drop IPv6LL address when LinkLocalAddressing=no|ipv4
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 15 Sep 2019 21:07:38 +0000 (06:07 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 17 Sep 2019 00:45:22 +0000 (09:45 +0900)
C.f. disscussion in #13533.

Hopefully fixes #12886.

src/network/networkd-link.c

index a05971c..f1aeb72 100644 (file)
@@ -2389,7 +2389,7 @@ static int link_drop_foreign_config(Link *link) {
 
         SET_FOREACH(address, link->addresses_foreign, i) {
                 /* we consider IPv6LL addresses to be managed by the kernel */
-                if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1)
+                if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1 && link_ipv6ll_enabled(link))
                         continue;
 
                 if (link_address_is_dynamic(link, address)) {
@@ -2466,7 +2466,7 @@ static int link_drop_config(Link *link) {
 
         SET_FOREACH(address, link->addresses, i) {
                 /* we consider IPv6LL addresses to be managed by the kernel */
-                if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1)
+                if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1 && link_ipv6ll_enabled(link))
                         continue;
 
                 r = address_remove(address, link, NULL);