mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-23 10:28:08 +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.
|
at TDS Telecom for reporting this issue.
|
||||||
[ISC-Bugs #35378]
|
[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)
|
Changes since 4.2.0 (new features)
|
||||||
|
|
||||||
- If a client renews before 'dhcp-cache-threshold' percent of its lease
|
- If a client renews before 'dhcp-cache-threshold' percent of its lease
|
||||||
|
@ -3540,6 +3540,7 @@ void free_everything (void);
|
|||||||
/* failover.c */
|
/* failover.c */
|
||||||
#if defined (FAILOVER_PROTOCOL)
|
#if defined (FAILOVER_PROTOCOL)
|
||||||
extern dhcp_failover_state_t *failover_states;
|
extern dhcp_failover_state_t *failover_states;
|
||||||
|
void dhcp_failover_sanity_check (void);
|
||||||
void dhcp_failover_startup (void);
|
void dhcp_failover_startup (void);
|
||||||
int dhcp_failover_write_all_states (void);
|
int dhcp_failover_write_all_states (void);
|
||||||
isc_result_t enter_failover_peer (dhcp_failover_state_t *);
|
isc_result_t enter_failover_peer (dhcp_failover_state_t *);
|
||||||
|
@ -820,6 +820,10 @@ main(int argc, char **argv) {
|
|||||||
|
|
||||||
postconf_initialization (quiet);
|
postconf_initialization (quiet);
|
||||||
|
|
||||||
|
#if defined (FAILOVER_PROTOCOL)
|
||||||
|
dhcp_failover_sanity_check();
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(DHCPv6) && defined(DHCP4o6)
|
#if defined(DHCPv6) && defined(DHCP4o6)
|
||||||
if (dhcpv4_over_dhcpv6) {
|
if (dhcpv4_over_dhcpv6) {
|
||||||
if ((local_family == AF_INET) && (interfaces != NULL))
|
if ((local_family == AF_INET) && (interfaces != NULL))
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
Failover protocol support code... */
|
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
|
* Copyright (c) 1999-2003 by Internet Software Consortium
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software for any
|
* 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);
|
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 ()
|
void dhcp_failover_startup ()
|
||||||
{
|
{
|
||||||
dhcp_failover_state_t *state;
|
dhcp_failover_state_t *state;
|
||||||
@ -59,16 +91,6 @@ void dhcp_failover_startup ()
|
|||||||
|
|
||||||
for (state = failover_states; state; state = state -> next) {
|
for (state = failover_states; state; state = state -> next) {
|
||||||
dhcp_failover_state_transition (state, "startup");
|
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
|
/* In case the peer is already running, immediately try
|
||||||
to establish a connection with it. */
|
to establish a connection with it. */
|
||||||
status = dhcp_failover_link_initiate ((omapi_object_t *)state);
|
status = dhcp_failover_link_initiate ((omapi_object_t *)state);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user