Commit 20c976ba authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[v4_1_esv] Server will move FTS_BACKUP to FTS_FREE when pool has no peer

    Merges in rt36960.  Note that for v4_1_esv a new compile switch,
    CONVERT_BACKUP_TO_FREE, was created which must be defined to
    enable the conversion of leases.  It is off by default.
parent 7726885a
...@@ -143,6 +143,16 @@ by Eric Young (eay@cryptsoft.com). ...@@ -143,6 +143,16 @@ by Eric Young (eay@cryptsoft.com).
components. components.
[ISC-Bugs #20558] [ISC-Bugs #20558]
- During startup, when the server encounters a lease whose binding state is
FTS_BACKUP but whose pool has no configured failover peer, it will reset the
lease's binding state to FTS_FREE. This allows the leases to be reclaimed
by the server after a pool's configuration has changed from failover to
standalone. Prior to this such leases would remain stuck in the backup state
making them unavailable for assignment. This behavior is off by default.
It is enabled by defining CONVERT_BACKUP_TO_FREE in includes/site.h and
will occur whether or not the server is compiled for failover.
[ISC-Bugs #36960]
Changes since 4.1-ESV-R10rc1 Changes since 4.1-ESV-R10rc1
- None - None
......
...@@ -272,3 +272,12 @@ ...@@ -272,3 +272,12 @@
64 indicates that the first 64 bits are the subnet or on-link 64 indicates that the first 64 bits are the subnet or on-link
prefix. */ prefix. */
#define DHCLIENT_DEFAULT_PREFIX_LEN 64 #define DHCLIENT_DEFAULT_PREFIX_LEN 64
/* Enable conversion at startup of leases from FTS_BACKUP to FTS_FREE
when either their pool has no configured failover peer or
FAILOVER_PROTOCOL is not enabled. This allows the leases to be
reclaimed by the server after a pool's configuration has changed
from failover to standalone. Prior to this such leases would remain
stuck in the backup state. */
/* #define CONVERT_BACKUP_TO_FREE */
...@@ -2475,6 +2475,23 @@ lease_instantiate(const void *key, unsigned len, void *object) ...@@ -2475,6 +2475,23 @@ lease_instantiate(const void *key, unsigned len, void *object)
lease->ip_addr.len, MDL); lease->ip_addr.len, MDL);
return ISC_R_SUCCESS; return ISC_R_SUCCESS;
} }
#if defined (CONVERT_BACKUP_TO_FREE)
#if defined (FAILOVER_PROTOCOL)
/* If the lease is in FTS_BACKUP but there is no peer, then the
* pool must have been formerly configured for failover and
* is now configured as standalone. This means we need to
* move the lease to FTS_FREE to make it available. */
if ((lease->binding_state == FTS_BACKUP) &&
(lease->pool->failover_peer == NULL)) {
#else
/* We aren't compiled for failover, so just move to FTS_FREE */
if (lease->binding_state == FTS_BACKUP) {
#endif
lease->binding_state = FTS_FREE;
lease->next_binding_state = FTS_FREE;
}
#endif
/* Put the lease on the right queue. Failure to queue is probably /* Put the lease on the right queue. Failure to queue is probably
* due to a bogus binding state. In such a case, we claim success, * due to a bogus binding state. In such a case, we claim success,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment