network: refuse to configure engines such as DHCP client more than once
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user