mirror of
https://github.com/systemd/systemd.git
synced 2025-02-07 05:57:46 +03:00
network: directly compare with in_addr element for IPv4 case
When peer address is set, address_compare_func() (or address_equal()) does not work in link_is_static_address_configured(), as an Address object stored in a Link does not contain peer addresses. So, we need to also compare with in_addr element for IPv4 case. Fixes #17304.
This commit is contained in:
parent
a8cfc17962
commit
9b9c5fff16
@ -550,6 +550,15 @@ static bool link_is_static_address_configured(Link *link, 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)
|
||||
/* When Peer= is set, then address_equal() in the above returns false, as
|
||||
* address->in_addr is the peer address. */
|
||||
return true;
|
||||
else if (address->family == AF_INET && net_address->family == AF_INET &&
|
||||
in_addr_equal(AF_INET, &address->in_addr, &net_address->in_addr) > 0)
|
||||
/* Even if both in_addr elements are equivalent, address_equal() may return
|
||||
* false when Peer= is set, as Address object in Network contains the peer
|
||||
* address but Address stored in Link does not, and address_prefix() in
|
||||
* address_compare_func() may provide different prefix. */
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user