]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: compare with peer address if it is specified
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 21 Jul 2020 16:03:16 +0000 (01:03 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 23 Jul 2020 14:37:56 +0000 (16:37 +0200)
Follow-ups for dfef713f3e390ced671ce0ee87782cc373c937d0.

src/network/networkd-link.c

index 092d130a44d90476adf5a44af3881f7f9cc5827e..dd98bf26856802f9e4f3fd2ba51f250185cd81c0 100644 (file)
@@ -1297,7 +1297,10 @@ static int link_request_set_addresses(Link *link) {
         LIST_FOREACH(addresses, ad, link->network->static_addresses) {
                 bool update;
 
-                update = address_get(link, ad->family, &ad->in_addr, ad->prefixlen, NULL) > 0;
+                if (ad->family == AF_INET6 && !in_addr_is_null(ad->family, &ad->in_addr_peer))
+                        update = address_get(link, ad->family, &ad->in_addr_peer, ad->prefixlen, NULL) > 0;
+                else
+                        update = address_get(link, ad->family, &ad->in_addr, ad->prefixlen, NULL) > 0;
 
                 r = address_configure(ad, link, address_handler, update);
                 if (r < 0)
@@ -2603,6 +2606,9 @@ static bool link_is_static_address_configured(Link *link, Address *address) {
         LIST_FOREACH(addresses, net_address, link->network->static_addresses)
                 if (address_equal(net_address, address))
                         return true;
+                else if (address->family == AF_INET6 && net_address->family == AF_INET6 &&
+                         in_addr_equal(AF_INET6, &address->in_addr, &net_address->in_addr_peer) > 0)
+                        return true;
 
         return false;
 }