diff options
author | Thomas Markwalder <tmark@isc.org> | 2016-01-18 09:21:15 -0500 |
---|---|---|
committer | Thomas Markwalder <tmark@isc.org> | 2016-01-18 09:21:15 -0500 |
commit | 3e3b525736dbce222a48b51fb09a741bcca3c456 (patch) | |
tree | cde2b7ecd8150de6c29a5af350d2c759538675cf | |
parent | a3471269e693cc4b49666874d5e57a6c9151b3b0 (diff) | |
download | isc-dhcp-3e3b525736dbce222a48b51fb09a741bcca3c456.tar.gz |
[master] Failover primary now accepts secondary updates from active to abandoned
Merges in rt25189.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | RELNOTES | 7 | ||||
-rw-r--r-- | server/failover.c | 11 |
3 files changed, 15 insertions, 4 deletions
@@ -25,6 +25,7 @@ server/dhcpd server/tests/dhcpd_unittests server/tests/hash_unittests server/tests/legacy_unittests +server/tests/leaseq_unittests server/tests/load_bal_unittests server/tests/test-suite.log tests/libt_api.a @@ -156,6 +156,13 @@ by Eric Young (eay@cryptsoft.com). to Jiri Popelka at Red Hat for reporting the issue. [ISC-Bugs #39952] +- A failover primary server will now accept a binding status update from the + secondary which transitions a lease from ACTIVE to ABANDONED. This accounts + for instances in which a client declines a lease and only the secondary + server receives it. Prior to this the primary server would reject such an + update as an "invalid state transition". + [ISC_BUGS #25180] + Changes since 4.3.3b1 - None diff --git a/server/failover.c b/server/failover.c index a3a0383c..f6e9a6d7 100644 --- a/server/failover.c +++ b/server/failover.c @@ -3,7 +3,7 @@ Failover protocol support code... */ /* - * Copyright (c) 2004-2015 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 2004-2016 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 @@ -6075,9 +6075,12 @@ normal_binding_state_transition_check (struct lease *lease, lease. */ if (state -> i_am == primary) { /* Except that the client may send the DHCPRELEASE - to the secondary, and we have to accept that. */ - if (binding_state == FTS_RELEASED) - return binding_state; + to the secondary. We also allow for when the + secondary gets a DECLINE and the primary does not.*/ + if ((binding_state == FTS_RELEASED) || + (binding_state == FTS_ABANDONED)) + return binding_state; + new_state = lease -> binding_state; goto out; } |