From bd5146c67eedcfaea054ae569d1621cb511b20da Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 16 Jun 2021 08:33:04 +0900 Subject: [PATCH 1/3] network: IFA_F_NODAD flag is only for IPv6 addresses --- src/network/networkd-address.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index b84181892e..afcbb12473 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -2111,7 +2111,8 @@ static int address_section_verify(Address *address) { address->scope = RT_SCOPE_HOST; } - if (!FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6)) + if (address->family == AF_INET6 && + !FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6)) address->flags |= IFA_F_NODAD; return 0; From f4c48492fe3dfa268b6d2457c9ae425b685ca4e0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 16 Jun 2021 10:32:28 +0900 Subject: [PATCH 2/3] man: fix RFC number and its title --- man/systemd.network.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 8d3d65024c..3e85edec6d 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1098,8 +1098,8 @@ IPv6Token=prefixstable:2002:da8:1:: Takes one of ipv4, ipv6, both, none. When ipv4, - performs IPv4 Duplicate Address Detection. See - RFC 5224. + performs IPv4 Address Conflict Detection. See + RFC 5227. When ipv6, performs IPv6 Duplicate Address Detection. See RFC 4862. Defaults to ipv6. From 1cf4ed142d6c1e2b9dc6a0bc74b6a83ae30b0f8e Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 16 Jun 2021 06:54:47 +0900 Subject: [PATCH 3/3] network: always enable IPv4 ACD for statically configured IPv4LL address --- src/network/networkd-address.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index afcbb12473..04ad2aa69d 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -2115,6 +2115,13 @@ static int address_section_verify(Address *address) { !FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV6)) address->flags |= IFA_F_NODAD; + if (address->family == AF_INET && in4_addr_is_link_local(&address->in_addr.in) && + !FLAGS_SET(address->duplicate_address_detection, ADDRESS_FAMILY_IPV4)) { + log_debug("%s: An IPv4 link-local address is specified, enabling IPv4 Address Conflict Detection (ACD).", + address->section->filename); + address->duplicate_address_detection |= ADDRESS_FAMILY_IPV4; + } + return 0; }