mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-22 18:07:25 +00:00
[master] Check failover pools per peer in test mode
Merges in rt29892
This commit is contained in:
parent
01bfe9c5de
commit
6ec59010ef
5
RELNOTES
5
RELNOTES
@ -1102,6 +1102,11 @@ by Eric Young (eay@cryptsoft.com).
|
||||
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 */
|
||||
#if defined (FAILOVER_PROTOCOL)
|
||||
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 (FAILOVER_PROTOCOL)
|
||||
dhcp_failover_sanity_check();
|
||||
#endif
|
||||
|
||||
#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.",
|
||||
state->name);
|
||||
fail_count++;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user