udhcpd: keep expired leases at startup
Let udhcpd retain the information about expired leases when restarting so that the leases are reserved until they possibly become the oldest expired lease. This reduces the frequency of IP address changes for example when the DHCP server and a group of clients, who do not store and request their previously offered IP address across restarts, are collectively restarted and the startup order of the clients are not guaranteed. Signed-off-by: Christian Lindeberg <christian.lindeberg@axis.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
e5aba88712
commit
ea2b71be66
@ -195,7 +195,11 @@ void FAST_FUNC read_leases(const char *file)
|
||||
uint32_t static_nip;
|
||||
|
||||
if (expires <= 0)
|
||||
continue;
|
||||
/* We keep expired leases: add_lease() will add
|
||||
* a lease with 0 seconds remaining.
|
||||
* Fewer IP address changes this way for mass reboot scenario.
|
||||
*/
|
||||
expires = 0;
|
||||
|
||||
/* Check if there is a different static lease for this IP or MAC */
|
||||
static_nip = get_static_nip_by_mac(server_config.static_leases, lease.lease_mac);
|
||||
|
@ -17,7 +17,9 @@ static struct dyn_lease *oldest_expired_lease(void)
|
||||
/* Unexpired leases have g_leases[i].expires >= current time
|
||||
* and therefore can't ever match */
|
||||
for (i = 0; i < server_config.max_leases; i++) {
|
||||
if (g_leases[i].expires < oldest_time) {
|
||||
if (g_leases[i].expires == 0 /* empty entry */
|
||||
|| g_leases[i].expires < oldest_time
|
||||
) {
|
||||
oldest_time = g_leases[i].expires;
|
||||
oldest_lease = &g_leases[i];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user