Merge pull request #19290 from yuwata/network-dhcp-do-not-configure-twice

network: refuse to configure DHCP client more than once
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2021-04-16 12:36:23 +02:00
committed by GitHub
8 changed files with 39 additions and 27 deletions
+9 -8
View File
@@ -1319,15 +1319,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) {
+6
View File
@@ -2834,6 +2834,12 @@ static int link_update(Link *link, sd_netlink_message *m) {
return log_link_warning_errno(link, r, "Could not update MAC for NDisc: %m");
}
if (link->lldp) {
r = sd_lldp_set_filter_address(link->lldp, &link->hw_addr.addr.ether);
if (r < 0)
return log_link_warning_errno(link, r, "Could not update MAC address for LLDP: %m");
}
r = ipv4_dad_update_mac(link);
if (r < 0)
return log_link_warning_errno(link, r, "Could not update MAC address in IPv4 ACD client: %m");
+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
@@ -378,7 +378,7 @@ int link_lldp_emit_start(Link *link) {
link->lldp_tx_fast = LLDP_TX_FAST_INIT;
next = usec_add(usec_add(now(clock_boottime_or_monotonic()), LLDP_FAST_TX_USEC),
(usec_t) random_u64() % LLDP_JITTER_USEC);
(usec_t) random_u64() % LLDP_JITTER_USEC);
if (link->lldp_emit_event_source) {
usec_t old;
+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;