From bc9e40c9a1534ee737d4131d7ba8dcc36d1d5f05 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 9 Apr 2021 20:16:35 +0900 Subject: [PATCH 1/3] network: refuse to configure engines such as DHCP client more than once --- src/network/networkd-dhcp4.c | 17 +++++++++-------- src/network/networkd-dhcp6.c | 2 +- src/network/networkd-ipv4ll.c | 17 +++++++++-------- src/network/networkd-lldp-rx.c | 17 +++++++++-------- src/network/networkd-ndisc.c | 2 +- src/network/networkd-radv.c | 3 +++ 6 files changed, 32 insertions(+), 26 deletions(-) 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; From dfc58b474063fb05fdc45a3d54ef5e873369830f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 13 Apr 2021 14:45:54 +0900 Subject: [PATCH 2/3] network: lldp: update mac address --- src/network/networkd-link.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 6c08203c54..542c4e36be 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -2806,6 +2806,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"); From 57442d2dfe11f0743b4b073fb3e5c21a1c744ca3 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 13 Apr 2021 14:50:44 +0900 Subject: [PATCH 3/3] network: fix indentation --- src/network/networkd-lldp-tx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/networkd-lldp-tx.c b/src/network/networkd-lldp-tx.c index 1b97e6584e..bd77b78852 100644 --- a/src/network/networkd-lldp-tx.c +++ b/src/network/networkd-lldp-tx.c @@ -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;