2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-22 09:57:20 +00:00

[master] Check failover pools per peer in test mode

Merges in rt29892
This commit is contained in:
Thomas Markwalder 2017-06-27 10:10:26 -04:00
parent 01bfe9c5de
commit 6ec59010ef
4 changed files with 124 additions and 92 deletions

View File

@ -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

View File

@ -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 *);

View File

@ -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))

View File

@ -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);
@ -479,7 +501,7 @@ isc_result_t dhcp_failover_link_signal (omapi_object_t *h,
link -> imsg_count));
link -> imsg_count = link -> imsg_payoff;
}
/* Now start sucking options off the wire. */
while (link -> imsg_count < link -> imsg_len) {
status = do_a_failover_option (c, link);
@ -621,7 +643,7 @@ static isc_result_t do_a_failover_option (c, link)
unsigned op_size;
unsigned op_count;
int i;
if (link -> imsg_count + 2 > link -> imsg_len) {
log_error ("FAILOVER: message overflow at option code.");
return DHCP_R_PROTOCOLERROR;
@ -636,7 +658,7 @@ static isc_result_t do_a_failover_option (c, link)
/* Get option code. */
omapi_connection_get_uint16 (c, &option_code);
link -> imsg_count += 2;
if (link -> imsg_count + 2 > link -> imsg_len) {
log_error ("FAILOVER: message overflow at length.");
return DHCP_R_PROTOCOLERROR;
@ -680,7 +702,7 @@ static isc_result_t do_a_failover_option (c, link)
omapi_connection_copyout ((unsigned char *)0, c, option_len);
return ISC_R_SUCCESS;
}
/* Only accept an option once. */
if (link -> imsg -> options_present & ft_options [option_code].bit) {
log_error ("FAILOVER: duplicate option %s",
@ -700,7 +722,7 @@ static isc_result_t do_a_failover_option (c, link)
omapi_connection_copyout ((unsigned char *)0, c, option_len);
link -> imsg_count += option_len;
return ISC_R_SUCCESS;
}
}
/* Figure out how many elements, how big they are, and where
to store them. */
@ -727,7 +749,7 @@ static isc_result_t do_a_failover_option (c, link)
/* FT_DDNS* are special - one or two bytes of status
followed by the client FQDN. */
/* Note: FT_DDNS* option support appears to be incomplete.
ISC-Bugs #36996 has been opened to address this. */
if (ft_options [option_code].type == FT_DDNS ||
@ -778,7 +800,7 @@ static isc_result_t do_a_failover_option (c, link)
}
op_count = option_len / op_size;
fo = ((failover_option_t *)
(((char *)link -> imsg) +
ft_options [option_code].offset));
@ -790,7 +812,7 @@ static isc_result_t do_a_failover_option (c, link)
"option data", op_count);
return DHCP_R_PROTOCOLERROR;
}
}
op = fo -> data;
}
@ -840,13 +862,13 @@ static isc_result_t do_a_failover_option (c, link)
op += 4;
link -> imsg_count += 4;
break;
case FT_UINT16:
omapi_connection_get_uint16 (c, (u_int16_t *)op);
op += 2;
link -> imsg_count += 2;
break;
default:
/* Everything else should have been handled
already. */
@ -892,7 +914,7 @@ isc_result_t dhcp_failover_link_get_value (omapi_object_t *h,
if (h -> type != omapi_type_protocol)
return DHCP_R_INVALIDARG;
link = (dhcp_failover_link_t *)h;
if (!omapi_ds_strcmp (name, "link-port")) {
return omapi_make_int_value (value, name,
(int)link -> peer_port, MDL);
@ -943,7 +965,7 @@ isc_result_t dhcp_failover_link_stuff_values (omapi_object_t *c,
if (l -> type != dhcp_type_failover_link)
return DHCP_R_INVALIDARG;
link = (dhcp_failover_link_t *)l;
status = omapi_connection_put_name (c, "link-port");
if (status != ISC_R_SUCCESS)
return status;
@ -953,7 +975,7 @@ isc_result_t dhcp_failover_link_stuff_values (omapi_object_t *c,
status = omapi_connection_put_uint32 (c, link -> peer_port);
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "link-state");
if (status != ISC_R_SUCCESS)
return status;
@ -990,7 +1012,7 @@ isc_result_t dhcp_failover_listen (omapi_object_t *h)
omapi_value_dereference (&value, MDL);
return DHCP_R_INVALIDARG;
}
status = omapi_get_int_value (&port, value -> value);
omapi_value_dereference (&value, MDL);
if (status != ISC_R_SUCCESS)
@ -1006,7 +1028,7 @@ isc_result_t dhcp_failover_listen (omapi_object_t *h)
omapi_value_dereference (&value, MDL);
return DHCP_R_INVALIDARG;
}
if (value -> value -> type != omapi_datatype_data ||
value -> value -> u.buffer.len != sizeof (struct in_addr))
goto nogood;
@ -1036,7 +1058,7 @@ isc_result_t dhcp_failover_listen (omapi_object_t *h)
if (status != ISC_R_SUCCESS)
return status;
obj -> address = local_addr;
status = omapi_listen_addr ((omapi_object_t *)obj, &obj -> address, 1);
if (status != ISC_R_SUCCESS)
return status;
@ -1101,7 +1123,7 @@ isc_result_t dhcp_failover_listener_signal (omapi_object_t *o,
state = s;
break;
}
}
}
if (!state) {
log_info ("failover: listener: no matching state");
omapi_disconnect ((omapi_object_t *)c, 1);
@ -1146,7 +1168,7 @@ isc_result_t dhcp_failover_listener_set_value (omapi_object_t *h,
{
if (h -> type != dhcp_type_failover_listener)
return DHCP_R_INVALIDARG;
if (h -> inner && h -> inner -> type -> set_value)
return (*(h -> inner -> type -> set_value))
(h -> inner, id, name, value);
@ -1160,7 +1182,7 @@ isc_result_t dhcp_failover_listener_get_value (omapi_object_t *h,
{
if (h -> type != dhcp_type_failover_listener)
return DHCP_R_INVALIDARG;
if (h -> inner && h -> inner -> type -> get_value)
return (*(h -> inner -> type -> get_value))
(h -> inner, id, name, value);
@ -1214,7 +1236,7 @@ isc_result_t dhcp_failover_register (omapi_object_t *h)
omapi_value_dereference (&value, MDL);
return DHCP_R_INVALIDARG;
}
status = omapi_get_int_value (&port, value -> value);
omapi_value_dereference (&value, MDL);
if (status != ISC_R_SUCCESS)
@ -1223,7 +1245,7 @@ isc_result_t dhcp_failover_register (omapi_object_t *h)
obj = (dhcp_failover_state_t *)0;
dhcp_failover_state_allocate (&obj, MDL);
obj -> me.port = port;
status = omapi_listen ((omapi_object_t *)obj, port, 1);
if (status != ISC_R_SUCCESS) {
dhcp_failover_state_dereference (&obj, MDL);
@ -1308,7 +1330,7 @@ isc_result_t dhcp_failover_state_signal (omapi_object_t *o,
"no MCLT provided");
omapi_disconnect (link -> outer, 1);
return ISC_R_SUCCESS;
}
}
dhcp_failover_link_reference (&state -> link_to_peer,
link, MDL);
@ -1542,11 +1564,11 @@ isc_result_t dhcp_failover_state_transition (dhcp_failover_state_t *state,
return (dhcp_failover_set_state
(state, state -> saved_state));
return ISC_R_SUCCESS;
case potential_conflict:
return dhcp_failover_set_state
(state, resolution_interrupted);
case normal:
return dhcp_failover_set_state
(state, communications_interrupted);
@ -1782,7 +1804,7 @@ isc_result_t dhcp_failover_set_state (dhcp_failover_state_t *state,
/* We will re-queue a timeout later, if applicable. */
cancel_timeout (dhcp_failover_keepalive, state);
break;
default:
break;
}
@ -1827,7 +1849,7 @@ isc_result_t dhcp_failover_set_state (dhcp_failover_state_t *state,
/* If both servers are now normal log it */
if ((state->me.state == normal) && (state->partner.state == normal))
log_info("failover peer %s: Both servers normal", state->name);
/* If we were in startup and we just left it, cancel the timeout. */
if (new_state != startup && saved_state == startup)
cancel_timeout (dhcp_failover_startup_timeout, state);
@ -1906,7 +1928,7 @@ isc_result_t dhcp_failover_set_state (dhcp_failover_state_t *state,
(tvunref_t)
omapi_object_dereference);
break;
/* If we come back in recover_wait and there's still waiting
to do, set a timeout. */
case recover_wait:
@ -1928,7 +1950,7 @@ isc_result_t dhcp_failover_set_state (dhcp_failover_state_t *state,
} else
dhcp_failover_recover_done (state);
break;
case recover:
/* XXX: We're supposed to calculate if updreq or updreqall is
* needed. In theory, we should only have to updreqall if we
@ -2012,7 +2034,7 @@ isc_result_t dhcp_failover_peer_state_changed (dhcp_failover_state_t *state,
if (state->saved_state == resolution_interrupted)
dhcp_failover_set_state(state,
potential_conflict);
else
else
dhcp_failover_set_state(state,
state->saved_state);
return ISC_R_SUCCESS;
@ -2052,7 +2074,7 @@ isc_result_t dhcp_failover_peer_state_changed (dhcp_failover_state_t *state,
/* If both servers are now normal log it */
if ((state->me.state == normal) && (state->partner.state == normal))
log_info("failover peer %s: Both servers normal", state->name);
if (!write_failover_state (state) || !commit_leases ()) {
/* This is bad, but it's not fatal. Of course, if we
can't write to the lease database, we're not going to
@ -2240,10 +2262,10 @@ isc_result_t dhcp_failover_peer_state_changed (dhcp_failover_state_t *state,
case potential_conflict:
case resolution_interrupted:
/*
* This can happen when the connection is lost and
* recovered after the primary has moved to
* conflict-done but the secondary is still in
* potential-conflict. In that case, we have to
* This can happen when the connection is lost and
* recovered after the primary has moved to
* conflict-done but the secondary is still in
* potential-conflict. In that case, we have to
* remain in conflict-done.
*/
break;
@ -2401,7 +2423,7 @@ isc_result_t dhcp_failover_peer_state_changed (dhcp_failover_state_t *state,
we got a state change from the peer. */
if (state -> me.state == startup && state -> saved_state != startup)
dhcp_failover_set_state (state, state -> saved_state);
/* For now, just set the service state based on the peer's state
if necessary. */
dhcp_failover_set_service_state (state);
@ -2653,7 +2675,7 @@ dhcp_failover_pool_dobalance(dhcp_failover_state_t *state,
(p->shared_network ?
p->shared_network->name : ""), p->lease_count,
p->free_leases, p->backup_leases, lts, thresh);
/* Recalculate next rebalance event timer. */
dhcp_failover_pool_check(p);
}
@ -3088,7 +3110,7 @@ isc_result_t dhcp_failover_state_set_value (omapi_object_t *h,
} else if (!omapi_ds_strcmp (name, "cur-unacked-updates")) {
return ISC_R_SUCCESS;
}
if (h -> inner && h -> inner -> type -> set_value)
return (*(h -> inner -> type -> set_value))
(h -> inner, id, name, value);
@ -3207,7 +3229,7 @@ isc_result_t dhcp_failover_state_get_value (omapi_object_t *h,
if (h -> type != dhcp_type_failover_state)
return DHCP_R_INVALIDARG;
s = (dhcp_failover_state_t *)h;
if (!omapi_ds_strcmp (name, "name")) {
if (s -> name)
return omapi_make_string_value (value,
@ -3286,7 +3308,7 @@ isc_result_t dhcp_failover_state_get_value (omapi_object_t *h,
return omapi_make_int_value (value, name,
s -> cur_unacked_updates, MDL);
}
if (h -> inner && h -> inner -> type -> get_value)
return (*(h -> inner -> type -> get_value))
(h -> inner, id, name, value);
@ -3353,7 +3375,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
if (h -> type != dhcp_type_failover_state)
return DHCP_R_INVALIDARG;
s = (dhcp_failover_state_t *)h;
status = omapi_connection_put_name (c, "name");
if (status != ISC_R_SUCCESS)
return status;
@ -3371,7 +3393,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
sizeof s -> partner.address);
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "partner-port");
if (status != ISC_R_SUCCESS)
return status;
@ -3381,7 +3403,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
status = omapi_connection_put_uint32 (c, (u_int32_t)s -> partner.port);
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "local-address");
if (status != ISC_R_SUCCESS)
return status;
@ -3392,7 +3414,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
sizeof s -> me.address);
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "local-port");
if (status != ISC_R_SUCCESS)
return status;
@ -3402,7 +3424,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
status = omapi_connection_put_uint32 (c, (u_int32_t)s -> me.port);
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "max-outstanding-updates");
if (status != ISC_R_SUCCESS)
return status;
@ -3435,7 +3457,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
if (status != ISC_R_SUCCESS)
return status;
if (s -> hba) {
status = omapi_connection_put_name (c, "load-balance-hba");
if (status != ISC_R_SUCCESS)
@ -3457,7 +3479,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
status = omapi_connection_put_uint32 (c, s -> partner.state);
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "local-state");
if (status != ISC_R_SUCCESS)
return status;
@ -3467,7 +3489,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
status = omapi_connection_put_uint32 (c, s -> me.state);
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "partner-stos");
if (status != ISC_R_SUCCESS)
return status;
@ -3541,7 +3563,7 @@ isc_result_t dhcp_failover_state_stuff (omapi_object_t *c,
(c, (u_int32_t)s -> me.max_response_delay));
if (status != ISC_R_SUCCESS)
return status;
status = omapi_connection_put_name (c, "cur-unacked-updates");
if (status != ISC_R_SUCCESS)
return status;
@ -3637,7 +3659,7 @@ int dhcp_failover_state_match (dhcp_failover_state_t *state,
{
struct data_string ds;
int i;
memset (&ds, 0, sizeof ds);
if (evaluate_option_cache (&ds, (struct packet *)0,
(struct lease *)0,
@ -3807,7 +3829,7 @@ const char *dhcp_failover_message_name (unsigned type)
switch (type) {
case FTM_POOLREQ:
return "pool-request";
case FTM_POOLRESP:
return "pool-response";
@ -4003,7 +4025,7 @@ failover_option_t *dhcp_failover_make_option (unsigned code,
return &null_failover_option;
}
info = &ft_options [code];
va_start (va, obufmax);
/* Get the number of elements and the size of the buffer we need
@ -4052,7 +4074,7 @@ failover_option_t *dhcp_failover_make_option (unsigned code,
return &null_failover_option;
}
}
size += 4;
/* Allocate a buffer for the option. */
@ -4067,7 +4089,7 @@ failover_option_t *dhcp_failover_make_option (unsigned code,
putUShort (option.data, code);
putUShort (&option.data [2], size - 4);
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
/* %Audit% Truncation causes panic. %2004.06.17,Revisit%
* It is unclear what the effects of truncation here are, or
* how that condition should be handled. It seems that this
@ -4105,7 +4127,7 @@ failover_option_t *dhcp_failover_make_option (unsigned code,
va_end (va);
return &null_failover_option;
}
#if defined (DEBUG_FAILOVER_MESSAGES)
/*%Audit% Cannot exceed 17 bytes. %2004.06.17,Safe%*/
sprintf (tbuf, " %u.%u.%u.%u",
@ -4402,10 +4424,10 @@ isc_result_t dhcp_failover_send_state (dhcp_failover_state_t *state)
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(state");
#else
@ -4454,10 +4476,10 @@ isc_result_t dhcp_failover_send_connect (omapi_object_t *l)
dhcp_failover_link_t *link;
dhcp_failover_state_t *state;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(connect");
#else
@ -4493,7 +4515,7 @@ isc_result_t dhcp_failover_send_connect (omapi_object_t *l)
? dhcp_failover_make_option (FTO_HBA, FMA, 32, state -> hba)
: &skip_failover_option),
(failover_option_t *)0));
#if defined (DEBUG_FAILOVER_MESSAGES)
if (status != ISC_R_SUCCESS)
failover_print (FMA, " (failed)");
@ -4511,10 +4533,10 @@ isc_result_t dhcp_failover_send_connectack (omapi_object_t *l,
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(connectack");
#else
@ -4582,10 +4604,10 @@ isc_result_t dhcp_failover_send_disconnect (omapi_object_t *l,
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(disconnect");
#else
@ -4632,10 +4654,10 @@ isc_result_t dhcp_failover_send_bind_update (dhcp_failover_state_t *state,
isc_result_t status;
int flags = 0;
binding_state_t transmit_state;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(bndupd");
#else
@ -4729,7 +4751,7 @@ isc_result_t dhcp_failover_send_bind_update (dhcp_failover_state_t *state,
lease -> tstp),
dhcp_failover_make_option (FTO_STOS, FMA,
lease -> starts),
(lease->cltt != 0) ?
(lease->cltt != 0) ?
dhcp_failover_make_option(FTO_CLTT, FMA, lease->cltt) :
&skip_failover_option, /* No CLTT */
flags ? dhcp_failover_make_option(FTO_IP_FLAGS, FMA,
@ -4759,10 +4781,10 @@ isc_result_t dhcp_failover_send_bind_ack (dhcp_failover_state_t *state,
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(bndack");
#else
@ -4809,7 +4831,7 @@ isc_result_t dhcp_failover_send_bind_ack (dhcp_failover_state_t *state,
(msg->options_present & FTB_CLTT) ?
dhcp_failover_make_option(FTO_CLTT, FMA, msg->cltt) :
&skip_failover_option, /* No CLTT in the msg to ack. */
((msg->options_present & FTB_IP_FLAGS) && msg->ip_flags) ?
((msg->options_present & FTB_IP_FLAGS) && msg->ip_flags) ?
dhcp_failover_make_option(FTO_IP_FLAGS, FMA,
msg->ip_flags)
: &skip_failover_option,
@ -4843,10 +4865,10 @@ isc_result_t dhcp_failover_send_poolreq (dhcp_failover_state_t *state)
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(poolreq");
#else
@ -4882,10 +4904,10 @@ isc_result_t dhcp_failover_send_poolresp (dhcp_failover_state_t *state,
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(poolresp");
#else
@ -4922,7 +4944,7 @@ isc_result_t dhcp_failover_send_update_request (dhcp_failover_state_t *state)
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
@ -4975,10 +4997,10 @@ isc_result_t dhcp_failover_send_update_request_all (dhcp_failover_state_t
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(updreqall");
#else
@ -5024,10 +5046,10 @@ isc_result_t dhcp_failover_send_update_done (dhcp_failover_state_t *state)
{
dhcp_failover_link_t *link;
isc_result_t status;
#if defined (DEBUG_FAILOVER_MESSAGES)
#if defined (DEBUG_FAILOVER_MESSAGES)
char obuf [64];
unsigned obufix = 0;
# define FMA obuf, &obufix, sizeof obuf
failover_print (FMA, "(upddone");
#else
@ -5881,7 +5903,7 @@ void failover_print (char *obuf,
}
strcpy (&obuf [*obufix], s);
*obufix += len;
}
}
#endif /* defined (DEBUG_FAILOVER_MESSAGES) */
/* Taken from draft-ietf-dhc-loadb-01.txt: */
@ -5930,7 +5952,7 @@ int load_balance_mine (struct packet *packet, dhcp_failover_state_t *state)
struct data_string ds;
unsigned char hbaix;
int hm;
u_int16_t ec;
u_int16_t ec;
ec = ntohs(packet->raw->secs);
@ -6021,7 +6043,7 @@ peer_wants_lease(struct lease *lp)
}
/* This deals with what to do with bind updates when
we're in the normal state
we're in the normal state
Note that tsfp had better be set from the latest bind update
_before_ this function is called! */