Commit 6ec59010 authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[master] Check failover pools per peer in test mode

    Merges in rt29892
parent 01bfe9c5
......@@ -1102,6 +1102,11 @@ by Eric Young (
at TDS Telecom for reporting this issue.
[ISC-Bugs #35378]
- The server now detects failover peers that are not referenced in at least
one pool when run with the command line option for test mode, -T. Prior to
this the check was performed too far down stream to be detected in test mode.
[ISC-Bugs #29892]
Changes since 4.2.0 (new features)
- If a client renews before 'dhcp-cache-threshold' percent of its lease
......@@ -3540,6 +3540,7 @@ void free_everything (void);
/* failover.c */
extern dhcp_failover_state_t *failover_states;
void dhcp_failover_sanity_check (void);
void dhcp_failover_startup (void);
int dhcp_failover_write_all_states (void);
isc_result_t enter_failover_peer (dhcp_failover_state_t *);
......@@ -820,6 +820,10 @@ main(int argc, char **argv) {
postconf_initialization (quiet);
#if defined(DHCPv6) && defined(DHCP4o6)
if (dhcpv4_over_dhcpv6) {
if ((local_family == AF_INET) && (interfaces != NULL))
......@@ -3,7 +3,7 @@
Failover protocol support code... */
* Copyright (c) 2004-2016 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2004-2017 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1999-2003 by Internet Software Consortium
* Permission to use, copy, modify, and distribute this software for any
......@@ -51,6 +51,38 @@ static inline int secondary_not_hoarding(dhcp_failover_state_t *state,
static void scrub_lease(struct lease* lease, const char *file, int line);
* \brief Performs a "pre-flight" sanity check of failover configuration
* Provides an opportunity to do post-parse pre-startup sanity checking
* of failover configuration. This allows checks to be done under test
* mode (-T), without requiring full startup for validation.
* Currently, it enforces all failover peers be used in at lease one
* pool. This logic was formerly located in dhcp_failover_startup.
* On failure, a fatal error is logged.
void dhcp_failover_sanity_check() {
dhcp_failover_state_t *state;
int fail_count = 0;
for (state = failover_states; state; state = state->next) {
if (state->pool_count == 0) {
log_error ("ERROR: Failover peer, %s, has no referring"
" pools. You must refer to each peer in at"
" least one pool declaration.",
if (fail_count) {
log_fatal ("Failover configuration sanity check failed");
void dhcp_failover_startup ()
dhcp_failover_state_t *state;
......@@ -59,16 +91,6 @@ void dhcp_failover_startup ()
for (state = failover_states; state; state = state -> next) {
dhcp_failover_state_transition (state, "startup");
if (state -> pool_count == 0) {
log_error ("failover peer declaration with no %s",
"referring pools.");
log_error ("In order to use failover, you MUST %s",
"refer to your main failover declaration");
log_error ("in each pool declaration. You MUST %s",
"NOT use range declarations outside");
log_fatal ("of pool declarations.");
/* In case the peer is already running, immediately try
to establish a connection with it. */
status = dhcp_failover_link_initiate ((omapi_object_t *)state);
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