diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 6f06e2218d..66568c87fb 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1294,15 +1294,16 @@ int dhcp4_configure(Link *link) { if (!link_dhcp4_enabled(link)) return 0; - if (!link->dhcp_client) { - r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize); - if (r < 0) - return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to allocate DHCP4 client: %m"); + if (link->dhcp_client) + return -EBUSY; /* Already configured. */ - r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0); - if (r < 0) - return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to attach event to DHCP4 client: %m"); - } + r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize); + if (r < 0) + return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to allocate DHCP4 client: %m"); + + r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0); + if (r < 0) + return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to attach event to DHCP4 client: %m"); r = sd_dhcp_client_set_mac(link->dhcp_client, link->hw_addr.addr.bytes, diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index aa077d6219..f5e66b9457 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -1456,7 +1456,7 @@ int dhcp6_configure(Link *link) { return 0; if (link->dhcp6_client) - return 0; + return -EBUSY; r = sd_dhcp6_client_new(&client); if (r == -ENOMEM) diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index 65266633e3..7aad2131fd 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -151,15 +151,16 @@ int ipv4ll_configure(Link *link) { if (!link_ipv4ll_enabled(link)) return 0; - if (!link->ipv4ll) { - r = sd_ipv4ll_new(&link->ipv4ll); - if (r < 0) - return r; + if (link->ipv4ll) + return -EBUSY; - r = sd_ipv4ll_attach_event(link->ipv4ll, link->manager->event, 0); - if (r < 0) - return r; - } + r = sd_ipv4ll_new(&link->ipv4ll); + if (r < 0) + return r; + + r = sd_ipv4ll_attach_event(link->ipv4ll, link->manager->event, 0); + if (r < 0) + return r; if (link->sd_device && net_get_unique_predictable_data(link->sd_device, true, &seed) >= 0) { diff --git a/src/network/networkd-lldp-rx.c b/src/network/networkd-lldp-rx.c index bf1dd045b8..5b1b90cdd3 100644 --- a/src/network/networkd-lldp-rx.c +++ b/src/network/networkd-lldp-rx.c @@ -73,15 +73,16 @@ int link_lldp_rx_configure(Link *link) { if (!link_lldp_rx_enabled(link)) return 0; - if (!link->lldp) { - r = sd_lldp_new(&link->lldp); - if (r < 0) - return r; + if (link->lldp) + return -EBUSY; - r = sd_lldp_attach_event(link->lldp, link->manager->event, 0); - if (r < 0) - return r; - } + r = sd_lldp_new(&link->lldp); + if (r < 0) + return r; + + r = sd_lldp_attach_event(link->lldp, link->manager->event, 0); + if (r < 0) + return r; r = sd_lldp_set_ifindex(link->lldp, link->ifindex); if (r < 0) diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 6830cf592e..7a975f3a91 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -1316,7 +1316,7 @@ int ndisc_configure(Link *link) { return 0; if (link->ndisc) - return 0; /* Already configured. */ + return -EBUSY; /* Already configured. */ r = sd_ndisc_new(&link->ndisc); if (r < 0) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 8d8c21c0d8..19f75e01da 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -644,6 +644,9 @@ int radv_configure(Link *link) { if (!link_radv_enabled(link)) return 0; + if (link->radv) + return -EBUSY; + r = sd_radv_new(&link->radv); if (r < 0) return r;