summaryrefslogtreecommitdiff
path: root/src/network
diff options
context:
space:
mode:
authorLuca Boccassi <bluca@debian.org>2022-10-31 21:01:57 +0100
committerGitHub <noreply@github.com>2022-10-31 21:01:57 +0100
commit7319adcd1ba0582850adb49ae6cce69ddb41b7e2 (patch)
tree19e96a599c8ede010a5644aaac0c35f2a2d82bed /src/network
parent4b9cfe08bafe24f685b153b89e7bd8d94eebec56 (diff)
parent14805b1468dc73bc10d90b69975a5c8914609bb7 (diff)
downloadsystemd-7319adcd1ba0582850adb49ae6cce69ddb41b7e2.tar.gz
Merge pull request #25142 from yuwata/network-fix-race-in-device-renaming-vs-dhcp
network,dhcp: fix theoretical race in device renaming
Diffstat (limited to 'src/network')
-rw-r--r--src/network/networkd-dhcp4.c4
-rw-r--r--src/network/networkd-dhcp6.c4
-rw-r--r--src/network/networkd-link.c12
3 files changed, 20 insertions, 0 deletions
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
index c5bddb60fd..e4005719d0 100644
--- a/src/network/networkd-dhcp4.c
+++ b/src/network/networkd-dhcp4.c
@@ -1357,6 +1357,10 @@ static int dhcp4_configure(Link *link) {
if (r < 0)
return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to attach event to DHCPv4 client: %m");
+ r = sd_dhcp_client_attach_device(link->dhcp_client, link->dev);
+ if (r < 0)
+ return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to attach device: %m");
+
r = sd_dhcp_client_set_mac(link->dhcp_client,
link->hw_addr.bytes,
link->bcast_addr.length > 0 ? link->bcast_addr.bytes : NULL,
diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c
index 789868c26a..d6ec233351 100644
--- a/src/network/networkd-dhcp6.c
+++ b/src/network/networkd-dhcp6.c
@@ -594,6 +594,10 @@ static int dhcp6_configure(Link *link) {
if (r < 0)
return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to attach event: %m");
+ r = sd_dhcp6_client_attach_device(client, link->dev);
+ if (r < 0)
+ return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to attach device: %m");
+
r = dhcp6_set_identifier(link, client);
if (r < 0)
return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set identifier: %m");
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 00e4e451ef..04e3432c94 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -1410,6 +1410,18 @@ static int link_initialized(Link *link, sd_device *device) {
* or sysattrs) may be outdated. */
device_unref_and_replace(link->dev, device);
+ if (link->dhcp_client) {
+ r = sd_dhcp_client_attach_device(link->dhcp_client, link->dev);
+ if (r < 0)
+ log_link_warning_errno(link, r, "Failed to attach device to DHCPv4 client, ignoring: %m");
+ }
+
+ if (link->dhcp6_client) {
+ r = sd_dhcp6_client_attach_device(link->dhcp6_client, link->dev);
+ if (r < 0)
+ log_link_warning_errno(link, r, "Failed to attach device to DHCPv6 client, ignoring: %m");
+ }
+
r = link_set_sr_iov_ifindices(link);
if (r < 0)
log_link_warning_errno(link, r, "Failed to manage SR-IOV PF and VF ports, ignoring: %m");