mirror of
https://github.com/systemd/systemd
synced 2024-10-15 12:34:37 +00:00
network/dhcp-server: use the pinned fd of persistent storge
This commit is contained in:
parent
e1254d0616
commit
7eafdbeb00
|
@ -156,12 +156,25 @@ int link_start_dhcp4_server(Link *link) {
|
|||
if (!link_has_carrier(link))
|
||||
return 0;
|
||||
|
||||
if (sd_dhcp_server_is_running(link->dhcp_server))
|
||||
return 0; /* already started. */
|
||||
|
||||
/* TODO: Maybe, also check the system time is synced. If the system does not have RTC battery, then
|
||||
* the realtime clock in not usable in the early boot stage, and all saved leases may be wrongly
|
||||
* handled as expired and dropped. */
|
||||
if (!sd_dhcp_server_is_in_relay_mode(link->dhcp_server) &&
|
||||
link->manager->persistent_storage_fd < 0)
|
||||
return 0;
|
||||
if (!sd_dhcp_server_is_in_relay_mode(link->dhcp_server)) {
|
||||
|
||||
if (link->manager->persistent_storage_fd < 0)
|
||||
return 0; /* persistent storage is not ready. */
|
||||
|
||||
_cleanup_free_ char *lease_file = path_join("dhcp-server-lease", link->ifname);
|
||||
if (!lease_file)
|
||||
return -ENOMEM;
|
||||
|
||||
r = sd_dhcp_server_set_lease_file(link->dhcp_server, link->manager->persistent_storage_fd, lease_file);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_dhcp_server_start(link->dhcp_server);
|
||||
if (r < 0)
|
||||
|
@ -183,13 +196,18 @@ void manager_toggle_dhcp4_server_state(Manager *manager, bool start) {
|
|||
if (sd_dhcp_server_is_in_relay_mode(link->dhcp_server))
|
||||
continue;
|
||||
|
||||
if (start)
|
||||
r = link_start_dhcp4_server(link);
|
||||
else
|
||||
r = sd_dhcp_server_stop(link->dhcp_server);
|
||||
/* Even if 'start' is true, first we need to stop the server. Otherwise, we cannot (re)set
|
||||
* the lease file in link_start_dhcp4_server(). */
|
||||
r = sd_dhcp_server_stop(link->dhcp_server);
|
||||
if (r < 0)
|
||||
log_link_debug_errno(link, r, "Failed to %s DHCP server, ignoring: %m",
|
||||
start ? "start" : "stop");
|
||||
log_link_debug_errno(link, r, "Failed to stop DHCP server, ignoring: %m");
|
||||
|
||||
if (!start)
|
||||
continue;
|
||||
|
||||
r = link_start_dhcp4_server(link);
|
||||
if (r < 0)
|
||||
log_link_debug_errno(link, r, "Failed to start DHCP server, ignoring: %m");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -572,16 +590,6 @@ static int dhcp4_server_configure(Link *link) {
|
|||
return log_link_error_errno(link, r, "Failed to set DHCPv4 static lease for DHCP server: %m");
|
||||
}
|
||||
|
||||
if (!sd_dhcp_server_is_in_relay_mode(link->dhcp_server)) {
|
||||
_cleanup_free_ char *lease_file = path_join("/var/lib/systemd/network/dhcp-server-lease/", link->ifname);
|
||||
if (!lease_file)
|
||||
return log_oom();
|
||||
|
||||
r = sd_dhcp_server_set_lease_file(link->dhcp_server, AT_FDCWD, lease_file);
|
||||
if (r < 0)
|
||||
log_link_warning_errno(link, r, "Failed to load DHCPv4 server leases, ignoring: %m");
|
||||
}
|
||||
|
||||
r = link_start_dhcp4_server(link);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not start DHCPv4 server instance: %m");
|
||||
|
|
Loading…
Reference in a new issue