mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-09-02 15:25:48 +00:00
- Delayed-ack is now a compile-time option, compiled out by default.
This feature is simply too experimental for right now, and causes some problems to some failover installations. We will revisit this in future releases. [ISC-Bugs #18832]
This commit is contained in:
5
RELNOTES
5
RELNOTES
@@ -67,6 +67,11 @@ work on other platforms. Please report any problems and suggested fixes to
|
|||||||
|
|
||||||
- A bug cleaning up unknown-xxx temporary option definitions was fixed.
|
- A bug cleaning up unknown-xxx temporary option definitions was fixed.
|
||||||
|
|
||||||
|
- Delayed-ack is now a compile-time option, compiled out by default.
|
||||||
|
This feature is simply too experimental for right now, and causes
|
||||||
|
some problems to some failover installations. We will revisit this
|
||||||
|
in future releases.
|
||||||
|
|
||||||
Changes since 4.1.0a1
|
Changes since 4.1.0a1
|
||||||
|
|
||||||
- Corrected list of failover state values in dhcpd man page.
|
- Corrected list of failover state values in dhcpd man page.
|
||||||
|
@@ -91,6 +91,15 @@ if test "$enable_tracing" != "no" ; then
|
|||||||
[Define to include server activity tracing support.])
|
[Define to include server activity tracing support.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Delayed-ack feature support (experimental).
|
||||||
|
AC_ARG_ENABLE(delayed_ack,
|
||||||
|
AC_HELP_STRING([--enable-delayed-ack],
|
||||||
|
[queues multiple DHCPACK replies (default is no)]))
|
||||||
|
if test "$enable_delayed_ack" = "yes"; then
|
||||||
|
AC_DEFINE([DELAYED_ACK], [1],
|
||||||
|
[Define to queue multiple DHCPACK replies per fsync.])
|
||||||
|
fi
|
||||||
|
|
||||||
# DHCPv6 optional compile-time feature.
|
# DHCPv6 optional compile-time feature.
|
||||||
AC_ARG_ENABLE(dhcpv6,
|
AC_ARG_ENABLE(dhcpv6,
|
||||||
AC_HELP_STRING([--enable-dhcpv6],
|
AC_HELP_STRING([--enable-dhcpv6],
|
||||||
|
@@ -2424,15 +2424,30 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
|
|||||||
packet -> raw -> chaddr,
|
packet -> raw -> chaddr,
|
||||||
sizeof packet -> raw -> chaddr); /* XXX */
|
sizeof packet -> raw -> chaddr); /* XXX */
|
||||||
} else {
|
} else {
|
||||||
|
#if !defined(DELAYED_ACK)
|
||||||
|
/* Install the new information on 'lt' onto the lease at
|
||||||
|
* 'lease'. If this is a DHCPOFFER, it is a 'soft' promise,
|
||||||
|
* if it is a DHCPACK, it is a 'hard' binding, so it needs
|
||||||
|
* to be recorded and propogated immediately. If the update
|
||||||
|
* fails, don't ACK it (or BOOTREPLY) either; we may give
|
||||||
|
* the same lease to another client later, and that would be
|
||||||
|
* a conflict.
|
||||||
|
*/
|
||||||
|
if (!supersede_lease(lease, lt, !offer || (offer == DHCPACK),
|
||||||
|
offer == DHCPACK, offer == DHCPACK)) {
|
||||||
|
#else /* defined(DELAYED_ACK) */
|
||||||
/* Install the new information on 'lt' onto the lease at
|
/* Install the new information on 'lt' onto the lease at
|
||||||
* 'lease'. We will not 'commit' this information to disk
|
* 'lease'. We will not 'commit' this information to disk
|
||||||
* yet (fsync()), we will 'propogate' the information if
|
* yet (fsync()), we will 'propogate' the information if
|
||||||
* this is BOOTP or a DHCPACK, but we will not 'pimmediate'ly
|
* this is BOOTP or a DHCPACK, but we will not 'pimmediate'ly
|
||||||
* transmit failover binding updates (this is delayed until
|
* transmit failover binding updates (this is delayed until
|
||||||
* after the fsync()).
|
* after the fsync()). If the update fails, don't ACK it (or
|
||||||
|
* 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,
|
if (!supersede_lease(lease, lt, 0, !offer || offer == DHCPACK,
|
||||||
0)) {
|
0)) {
|
||||||
|
#endif
|
||||||
log_info ("%s: database update failed", msg);
|
log_info ("%s: database update failed", msg);
|
||||||
free_lease_state (state, MDL);
|
free_lease_state (state, MDL);
|
||||||
lease_dereference (<, MDL);
|
lease_dereference (<, MDL);
|
||||||
@@ -2822,10 +2837,12 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
|
|||||||
++outstanding_pings;
|
++outstanding_pings;
|
||||||
} else {
|
} else {
|
||||||
lease->cltt = cur_time;
|
lease->cltt = cur_time;
|
||||||
|
#if defined(DELAYED_ACK)
|
||||||
if (!(lease->flags & STATIC_LEASE) &&
|
if (!(lease->flags & STATIC_LEASE) &&
|
||||||
(!offer || (offer == DHCPACK)))
|
(!offer || (offer == DHCPACK)))
|
||||||
delayed_ack_enqueue(lease);
|
delayed_ack_enqueue(lease);
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
dhcp_reply(lease);
|
dhcp_reply(lease);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
.\" see ``http://www.vix.com''. To learn more about Nominum, Inc., see
|
.\" see ``http://www.vix.com''. To learn more about Nominum, Inc., see
|
||||||
.\" ``http://www.nominum.com''.
|
.\" ``http://www.nominum.com''.
|
||||||
.\"
|
.\"
|
||||||
.\" $Id: dhcpd.conf.5,v 1.98 2008/10/22 11:41:58 fdupont Exp $
|
.\" $Id: dhcpd.conf.5,v 1.99 2008/11/03 18:13:58 dhankins Exp $
|
||||||
.\"
|
.\"
|
||||||
.TH dhcpd.conf 5
|
.TH dhcpd.conf 5
|
||||||
.SH NAME
|
.SH NAME
|
||||||
@@ -2098,6 +2098,10 @@ Similarly, \fImicroseconds\fR indicates how many microseconds are permitted
|
|||||||
to pass inbetween queuing a packet pending an fsync, and performing the
|
to pass inbetween queuing a packet pending an fsync, and performing the
|
||||||
fsync. Valid values range from 0 to 2^32-1, and defaults to 250,000 (1/4 of
|
fsync. Valid values range from 0 to 2^32-1, and defaults to 250,000 (1/4 of
|
||||||
a second).
|
a second).
|
||||||
|
.PP
|
||||||
|
Please note that as delayed-ack is currently experimental, the delayed-ack
|
||||||
|
feature is not compiled in by default, but must be enabled at compile time
|
||||||
|
with './configure --enable-delayed-ack'.
|
||||||
.RE
|
.RE
|
||||||
.PP
|
.PP
|
||||||
The
|
The
|
||||||
|
@@ -239,8 +239,11 @@ static struct option server_options[] = {
|
|||||||
{ "dhcpv6-pid-file-name", "t", &server_universe, 55, 1 },
|
{ "dhcpv6-pid-file-name", "t", &server_universe, 55, 1 },
|
||||||
{ "limit-addrs-per-ia", "L", &server_universe, 56, 1 },
|
{ "limit-addrs-per-ia", "L", &server_universe, 56, 1 },
|
||||||
{ "limit-prefs-per-ia", "L", &server_universe, 57, 1 },
|
{ "limit-prefs-per-ia", "L", &server_universe, 57, 1 },
|
||||||
|
/* Assert a configuration parsing error if delayed-ack isn't compiled in. */
|
||||||
|
#if defined(DELAYED_ACK)
|
||||||
{ "delayed-ack", "S", &server_universe, 58, 1 },
|
{ "delayed-ack", "S", &server_universe, 58, 1 },
|
||||||
{ "max-ack-delay", "L", &server_universe, 59, 1 },
|
{ "max-ack-delay", "L", &server_universe, 59, 1 },
|
||||||
|
#endif
|
||||||
{ NULL, NULL, NULL, 0, 0 }
|
{ NULL, NULL, NULL, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user