2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-22 01:49:35 +00:00

-n [master]

[rt26311]
    Fix the issue with DDNS by checking to see if we have added a pointer
    to the ddns_cb and skipping the cache threshold check if we did.  Also
    expand and correct the cache threshold check into the delayed ack code.
This commit is contained in:
Shawn Routhier 2013-08-27 11:09:12 -07:00
parent ad4001ce80
commit 8cd88e202b
3 changed files with 22 additions and 10 deletions

View File

@ -47,6 +47,10 @@ work on other platforms. Please report any problems and suggested fixes to
than extend or renew the lease. This absolves the server of needing
to perform an fsync() operation on the lease database before reply,
which improves performance. [ISC-Bugs #22228]
Update this patch to support asynchronous DDNS. If the server is
attempting to do DDNS on a lease it should be udpated and written to
disk even if that wouldn't be necessary due to the thresholding
[ISC-Bugs #26311]
- The 'no available billing' log line now also logs the name of the last
matching billing class tried before failing to provide a billing.

View File

@ -3,6 +3,7 @@
Find and identify the network interfaces. */
/*
* Copyright (c) 2013 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2004-2009,2011 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1995-2003 by Internet Software Consortium
*

View File

@ -3,7 +3,7 @@
DHCP Protocol engine. */
/*
* Copyright (c) 2004-2012 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 2004-2013 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1995-2003 by Internet Software Consortium
*
* Permission to use, copy, modify, and distribute this software for any
@ -1561,7 +1561,8 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
TIME remaining_time;
struct iaddr cip;
#if defined(DELAYED_ACK)
isc_boolean_t enqueue = ISC_TRUE;
/* By default we don't do the enqueue */
isc_boolean_t enqueue = ISC_FALSE;
#endif
int use_old_lease = 0;
@ -2541,7 +2542,14 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
data_string_forget(&d1, MDL);
}
if ((thresh > 0) && (offer == DHCPACK) &&
/*
* We check on ddns_cb to see if the ddns code has
* updated the lt structure. We could probably simply
* copy the ddns_cb pointer in that case but lets be
* simple and safe and update the entire lease.
*/
if ((lt->ddns_cb == NULL) &&
(thresh > 0) && (offer == DHCPACK) &&
(lease->binding_state == FTS_ACTIVE)) {
int limit;
int prev_lease = lease->ends - lease->starts;
@ -2569,18 +2577,16 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
* the same lease to another client later, and that would be
* a conflict.
*/
if (!use_old_lease && !supersede_lease(lease, lt, commit,
if ((use_old_lease == 0) &&
!supersede_lease(lease, lt, commit,
offer == DHCPACK, offer == DHCPACK)) {
#else /* defined(DELAYED_ACK) */
/*
* If there already isn't a need for a lease commit, and we
* can just answer right away, set a flag to indicate this.
*/
if (commit && !(lease->flags & STATIC_LEASE) &&
(!offer || (offer == DHCPACK)))
if (commit)
enqueue = ISC_TRUE;
else
enqueue = ISC_FALSE;
/* Install the new information on 'lt' onto the lease at
* 'lease'. We will not 'commit' this information to disk
@ -2591,8 +2597,9 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
* BOOTREPLY either); we may give the same lease out to a
* different client, and that would be a conflict.
*/
if (!supersede_lease(lease, lt, 0, !offer || offer == DHCPACK,
0)) {
if ((use_old_lease == 0) &&
!supersede_lease(lease, lt, 0,
!offer || offer == DHCPACK, 0)) {
#endif
log_info ("%s: database update failed", msg);
free_lease_state (state, MDL);