From 4eca221ab8d1ce3b95596aef5b56e784d18d41cc Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 7 Nov 2024 03:43:50 +0900 Subject: [PATCH] network: keep all dynamically acquired configurations when KeepConfiguration=dhcp-on-stop By the previous commit, configuration source of addresses and routes are saved on stop and restored on start. Hence, we can keep dynamic configurations on stop. Co-authored-by: Jian Zhang --- src/network/networkd-link.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 082c7d1c38..9d903b7057 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -386,6 +386,24 @@ int link_stop_engines(Link *link, bool may_keep_dhcp) { r = sd_dhcp_client_stop(link->dhcp_client); if (r < 0) RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop DHCPv4 client: %m")); + + r = sd_ipv4ll_stop(link->ipv4ll); + if (r < 0) + RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop IPv4 link-local: %m")); + + r = sd_dhcp6_client_stop(link->dhcp6_client); + if (r < 0) + RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop DHCPv6 client: %m")); + + r = dhcp_pd_remove(link, /* only_marked = */ false); + if (r < 0) + RET_GATHER(ret, log_link_warning_errno(link, r, "Could not remove DHCPv6 PD addresses and routes: %m")); + + r = ndisc_stop(link); + if (r < 0) + RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop IPv6 Router Discovery: %m")); + + ndisc_flush(link); } r = sd_dhcp_server_stop(link->dhcp_server); @@ -400,28 +418,10 @@ int link_stop_engines(Link *link, bool may_keep_dhcp) { if (r < 0) RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop LLDP Tx: %m")); - r = sd_ipv4ll_stop(link->ipv4ll); - if (r < 0) - RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop IPv4 link-local: %m")); - r = ipv4acd_stop(link); if (r < 0) RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop IPv4 ACD client: %m")); - r = sd_dhcp6_client_stop(link->dhcp6_client); - if (r < 0) - RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop DHCPv6 client: %m")); - - r = dhcp_pd_remove(link, /* only_marked = */ false); - if (r < 0) - RET_GATHER(ret, log_link_warning_errno(link, r, "Could not remove DHCPv6 PD addresses and routes: %m")); - - r = ndisc_stop(link); - if (r < 0) - RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop IPv6 Router Discovery: %m")); - - ndisc_flush(link); - r = sd_radv_stop(link->radv); if (r < 0) RET_GATHER(ret, log_link_warning_errno(link, r, "Could not stop IPv6 Router Advertisement: %m")); -- 2.25.1