diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index e9c46187ad..cd1aa73f46 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -1559,7 +1559,7 @@
UseDNS=
UseNTP=
- As in the [DHCP] section.
+ As in the [DHCPv4] section.
diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c
index 7905e09a48..d6262a3885 100644
--- a/src/network/networkd-dhcp6.c
+++ b/src/network/networkd-dhcp6.c
@@ -405,21 +405,10 @@ static int dhcp6_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -EEXIST) {
- if (link->rtnl_extended_attrs) {
- log_link_warning(link, "Could not set extended netlink attributes, reverting to fallback mechanism");
-
- link->rtnl_extended_attrs = false;
- dhcp6_lease_address_acquired(link->dhcp6_client, link);
-
- return 1;
- }
-
log_link_error_errno(link, r, "Could not set DHCPv6 address: %m");
-
link_enter_failed(link);
return 1;
- }
- if (r >= 0)
+ } else if (r >= 0)
(void) manager_rtnl_process_address(rtnl, m, link->manager);
r = link_request_set_routes(link);
@@ -447,10 +436,8 @@ static int dhcp6_address_change(
addr->family = AF_INET6;
addr->in_addr.in6 = *ip6_addr;
-
addr->flags = IFA_F_NOPREFIXROUTE;
addr->prefixlen = 128;
-
addr->cinfo.ifa_prefered = lifetime_preferred;
addr->cinfo.ifa_valid = lifetime_valid;
@@ -510,6 +497,7 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) {
(void) dhcp6_lease_pd_prefix_lost(client, link);
(void) dhcp6_prefix_remove_all(link->manager, link);
+ link_dirty(link);
link->dhcp6_configured = false;
break;
@@ -532,6 +520,7 @@ static void dhcp6_handler(sd_dhcp6_client *client, int event, void *userdata) {
return;
}
+ link_dirty(link);
link->dhcp6_configured = true;
break;
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index a08ad80f15..63f7422096 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -605,7 +605,6 @@ static int link_new(Manager *manager, sd_netlink_message *message, Link **ret) {
.n_ref = 1,
.manager = manager,
.state = LINK_STATE_PENDING,
- .rtnl_extended_attrs = true,
.ifindex = ifindex,
.iftype = iftype,
.sysctl_ipv6_enabled = -1,
diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
index e8680bbb1f..bfdcef0e50 100644
--- a/src/network/networkd-link.h
+++ b/src/network/networkd-link.h
@@ -113,7 +113,6 @@ typedef struct Link {
sd_radv *radv;
sd_dhcp6_client *dhcp6_client;
- bool rtnl_extended_attrs;
/* This is about LLDP reception */
sd_lldp *lldp;
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index 51cc8f654b..6037e8564f 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -1395,7 +1395,7 @@ void manager_free(Manager *m) {
while ((a = hashmap_first_key(m->dhcp6_prefixes)))
(void) dhcp6_prefix_remove(m, a);
- hashmap_free(m->dhcp6_prefixes);
+ m->dhcp6_prefixes = hashmap_free(m->dhcp6_prefixes);
while ((link = hashmap_steal_first(m->links))) {
if (link->dhcp6_client)
diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py
index 7d059f47e7..9ef9b023e9 100755
--- a/test/test-network/systemd-networkd-tests.py
+++ b/test/test-network/systemd-networkd-tests.py
@@ -2905,7 +2905,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4')
self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6')
- time.sleep(10)
+ time.sleep(3)
output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env)
print(output)
self.assertRegex(output, '192.168.5.1')
@@ -2923,7 +2923,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4')
self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6')
- time.sleep(10)
+ time.sleep(3)
output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env)
print(output)
self.assertNotRegex(output, '192.168.5.1')
@@ -2941,7 +2941,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4')
self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6')
- time.sleep(10)
+ time.sleep(3)
output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env)
print(output)
self.assertRegex(output, '192.168.5.1')
@@ -2959,7 +2959,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
self.wait_address('veth99', r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global dynamic', ipv='-4')
self.wait_address('veth99', r'inet6 2600::[0-9a-f]*/128 scope global (?:dynamic noprefixroute|noprefixroute dynamic)', ipv='-6')
- time.sleep(10)
+ time.sleep(3)
output = check_output(*resolvectl_cmd, 'dns', 'veth99', env=env)
print(output)
self.assertRegex(output, '192.168.5.1')