Merges in rt42444.
raising the issue and submitting the patch.
[ISC-Bugs #22675]
+- Support for delayed-ack is now compiled in by default. Prior to this
+ it had to be enabled at compile time via --enable-delayed-acks. The
+ default value for delayed-ack, however, has been changed from 28 to 0
+ (i.e. disabled). This was done to minimize the impact on users not
+ currently using the feature. Please note that the delayed-ack feature
+ is not currently compatible with support for DHPCv4o6 (compiled out by
+ default). You must compile with one or the other but not both.
+ [ISC-Bugs #42446]
+
Changes since 4.3.6 (Bugs):
- Corrected an issue where the server would return a client's previously
yes)
--enable-tracing enable support for server activity tracing (default
is yes)
- --enable-delayed-ack queues multiple DHCPACK replies (default is no)
+ --enable-delayed-ack queues multiple DHCPACK replies (default is yes)
--enable-dhcpv6 enable support for DHCPv6 (default is yes)
--enable-dhcpv4o6 enable support for DHCPv4-over-DHCPv6 (default is
no)
fi
-# Delayed-ack feature support (experimental).
+# Delayed-ack feature support.
# Check whether --enable-delayed_ack was given.
if test "${enable_delayed_ack+set}" = set; then :
enableval=$enable_delayed_ack;
fi
-if test "$enable_delayed_ack" = "yes"; then
+if test "$enable_delayed_ack" != "no"; then
+ enable_delayed_ack="yes"
$as_echo "#define DELAYED_ACK 1" >>confdefs.h
-else
- enable_delayed_ack="no"
fi
# DHCPv6 optional compile-time feature.
$as_echo "#define DHCP4o6 1" >>confdefs.h
+else
+ # so we can report below
+ enable_dhcpv4o6="no"
fi
# PARANOIA is off by default (until we can test it with all features)
binary-leases: $enable_binary_leases
dhcpv6: $enable_dhcpv6
delayed-ack: $enable_delayed_ack
+ dhcpv4o6: $enable_dhcpv4o6
Developer:
ATF unittests : $atf_path
[Define to include server activity tracing support.])
fi
-# Delayed-ack feature support (experimental).
+# Delayed-ack feature support.
AC_ARG_ENABLE(delayed_ack,
- AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
-if test "$enable_delayed_ack" = "yes"; then
+ AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
+if test "$enable_delayed_ack" != "no"; then
+ enable_delayed_ack="yes"
AC_DEFINE([DELAYED_ACK], [1],
[Define to queue multiple DHCPACK replies per fsync.])
-else
- enable_delayed_ack="no"
fi
# DHCPv6 optional compile-time feature.
fi
AC_DEFINE([DHCP4o6], [1],
[Define to 1 to include DHCPv4 over DHCPv6 support.])
+else
+ # so we can report below
+ enable_dhcpv4o6="no"
fi
# PARANOIA is off by default (until we can test it with all features)
binary-leases: $enable_binary_leases
dhcpv6: $enable_dhcpv6
delayed-ack: $enable_delayed_ack
+ dhcpv4o6: $enable_dhcpv4o6
Developer:
ATF unittests : $atf_path
[Define to include server activity tracing support.])
fi
-# Delayed-ack feature support (experimental).
+# Delayed-ack feature support.
AC_ARG_ENABLE(delayed_ack,
- AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
-if test "$enable_delayed_ack" = "yes"; then
+ AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
+if test "$enable_delayed_ack" != "no"; then
+ enable_delayed_ack="yes"
AC_DEFINE([DELAYED_ACK], [1],
[Define to queue multiple DHCPACK replies per fsync.])
-else
- enable_delayed_ack="no"
fi
# DHCPv6 optional compile-time feature.
fi
AC_DEFINE([DHCP4o6], [1],
[Define to 1 to include DHCPv4 over DHCPv6 support.])
+else
+ # so we can report below
+ enable_dhcpv4o6="no"
fi
# PARANOIA is off by default (until we can test it with all features)
binary-leases: $enable_binary_leases
dhcpv6: $enable_dhcpv6
delayed-ack: $enable_delayed_ack
+ dhcpv4o6: $enable_dhcpv4o6
Developer:
ATF unittests : $atf_path
[Define to include server activity tracing support.])
fi
-# Delayed-ack feature support (experimental).
+# Delayed-ack feature support.
AC_ARG_ENABLE(delayed_ack,
- AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
-if test "$enable_delayed_ack" = "yes"; then
+ AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
+if test "$enable_delayed_ack" != "no"; then
+ enable_delayed_ack="yes"
AC_DEFINE([DELAYED_ACK], [1],
[Define to queue multiple DHCPACK replies per fsync.])
-else
- enable_delayed_ack="no"
fi
# DHCPv6 optional compile-time feature.
fi
AC_DEFINE([DHCP4o6], [1],
[Define to 1 to include DHCPv4 over DHCPv6 support.])
+else
+ # so we can report below
+ enable_dhcpv4o6="no"
fi
# PARANOIA is off by default (until we can test it with all features)
binary-leases: $enable_binary_leases
dhcpv6: $enable_dhcpv6
delayed-ack: $enable_delayed_ack
+ dhcpv4o6: $enable_dhcpv4o6
Developer:
ATF unittests : $atf_path
[Define to include server activity tracing support.])
fi
-# Delayed-ack feature support (experimental).
+# Delayed-ack feature support.
AC_ARG_ENABLE(delayed_ack,
- AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is no)]))
-if test "$enable_delayed_ack" = "yes"; then
+ AS_HELP_STRING([--enable-delayed-ack],[queues multiple DHCPACK replies (default is yes)]))
+if test "$enable_delayed_ack" != "no"; then
+ enable_delayed_ack="yes"
AC_DEFINE([DELAYED_ACK], [1],
[Define to queue multiple DHCPACK replies per fsync.])
-else
- enable_delayed_ack="no"
fi
# DHCPv6 optional compile-time feature.
fi
AC_DEFINE([DHCP4o6], [1],
[Define to 1 to include DHCPv4 over DHCPv6 support.])
+else
+ # so we can report below
+ enable_dhcpv4o6="no"
fi
# PARANOIA is off by default (until we can test it with all features)
binary-leases: $enable_binary_leases
dhcpv6: $enable_dhcpv6
delayed-ack: $enable_delayed_ack
+ dhcpv4o6: $enable_dhcpv4o6
Developer:
ATF unittests : $atf_path
#endif
#if !defined (DEFAULT_DELAYED_ACK)
-# define DEFAULT_DELAYED_ACK 28 /* default SO_SNDBUF size / 576 bytes */
+# define DEFAULT_DELAYED_ACK 0 /* default SO_SNDBUF size / 576 bytes */
#endif
#if !defined (DEFAULT_ACK_DELAY_SECS)
} else {
lease->cltt = cur_time;
#if defined(DELAYED_ACK) && !defined(DHCP4o6)
- if (enqueue)
+ if (enqueue && max_outstanding_acks != 0)
delayed_ack_enqueue(lease);
else
#endif
.B max-ack-delay \fImicroseconds\fR\fB;\fR
.PP
.I Count
-should be an integer value from zero to 2^16-1, and defaults to 28. The
-count represents how many DHCPv4 replies maximum will be queued pending
-transmission until after a database commit event. If this number is
-reached, a database commit event (commonly resulting in fsync() and
-representing a performance penalty) will be made, and the reply packets
-will be transmitted in a batch afterwards. This preserves the RFC2131
-direction that "stable storage" be updated prior to replying to clients.
-Should the DHCPv4 sockets "go dry" (select() returns immediately with no
-read sockets), the commit is made and any queued packets are transmitted.
+should be an integer value from zero to 2^16-1 and defaults to 0, which means
+that the feature is disabled. Otherwise, 28 may be a sensible starting point
+for many configurations (SO_SNDBUF size / 576 bytes.) The count represents how
+many DHCPv4 replies maximum will be queued pending transmission until after a
+database commit event. If this number is reached, a database commit event
+(commonly resulting in fsync() and representing a performance penalty) will be
+made, and the reply packets will be transmitted in a batch afterwards. This
+preserves the RFC2131 direction that "stable storage" be updated prior to
+replying to clients. Should the DHCPv4 sockets "go dry" (select() returns
+immediately with no read sockets), the commit is made and any queued packets
+are transmitted.
.PP
Similarly, \fImicroseconds\fR indicates how many microseconds are permitted
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
a second).
.PP
-The delayed-ack feature is not compiled in by default, but must be enabled
-at compile time with \'./configure --enable-delayed-ack\'. While we no
-longer consider it experimental and we don't know of any issues with it,
-in order to minimize problems with existing configuration files we have
-left it disabled by default.
+The delayed-ack feature is compiled in by default, but can be disabled
+at compile time with \'./configure --disable-delayed-ack\'. Please note
+that the delayed-ack feature is not currently compatible with support for
+DHPCv4o6 (compiled out by default). You must compile with one or the
+other but not both.
.RE
.PP
The