summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2020-07-22 01:03:16 +0900
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-07-23 16:37:56 +0200
commit6f5d73aba6b61b450949ed968e65b2b52a02f0f3 (patch)
tree470b0afdec66de354f583b3195d0b78c585d543a
parent01b92946c5bc4be0ca1e2f6c2519f7162c25bb80 (diff)
downloadsystemd-6f5d73aba6b61b450949ed968e65b2b52a02f0f3.tar.gz
network: compare with peer address if it is specified
Follow-ups for dfef713f3e390ced671ce0ee87782cc373c937d0.
-rw-r--r--src/network/networkd-link.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 092d130a44..dd98bf2685 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;
}