network: refuse to configure engines such as DHCP client more than once

This commit is contained in:
Yu Watanabe
2021-04-13 14:38:24 +09:00
parent 54cfe9a75f
commit bc9e40c9a1
6 changed files with 32 additions and 26 deletions
+9 -8
View File
@@ -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,
+1 -1
View File
@@ -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)
+9 -8
View File
@@ -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) {
+9 -8
View File
@@ -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)
+1 -1
View File
@@ -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)
+3
View File
@@ -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;