From: Yu Watanabe Date: Tue, 21 Jul 2020 16:03:16 +0000 (+0900) Subject: network: compare with peer address if it is specified X-Git-Tag: v246-rc2~9 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fsystemd.git;a=commitdiff_plain;h=6f5d73aba6b61b450949ed968e65b2b52a02f0f3 network: compare with peer address if it is specified Follow-ups for dfef713f3e390ced671ce0ee87782cc373c937d0. --- diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 092d130a44d..dd98bf26856 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -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; }