]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
[master] delayed-ack is now compiled in by default
authorThomas Markwalder <tmark@isc.org>
Wed, 13 Dec 2017 18:55:57 +0000 (13:55 -0500)
committerThomas Markwalder <tmark@isc.org>
Wed, 13 Dec 2017 18:55:57 +0000 (13:55 -0500)
    Merges in rt42444.

RELNOTES
configure
configure.ac
configure.ac+lt
configure.ac-base
configure.ac-lt
includes/dhcpd.h
server/dhcp.c
server/dhcpd.conf.5

index 98b3dbce760503c5d5acf745327f6ef6efca9f66..6c1874739c89d6dcf234d5bfeaf60372b19f7db1 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -264,6 +264,15 @@ dhcp-users@lists.isc.org.
   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
index 6d0a6ce26122d2be77ead3bcc2299c5537e14438..618fb9ef1b5c635eec4c8e0aef73f275cb847efa 100755 (executable)
--- a/configure
+++ b/configure
@@ -1442,7 +1442,7 @@ Optional Features:
                           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)
@@ -5440,18 +5440,17 @@ $as_echo "#define TRACING 1" >>confdefs.h
 
 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.
@@ -5487,6 +5486,9 @@ if test "$enable_dhcpv4o6" = "yes"; then
 
 $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)
@@ -9015,6 +9017,7 @@ Features:
   binary-leases: $enable_binary_leases
   dhcpv6:        $enable_dhcpv6
   delayed-ack:   $enable_delayed_ack
+  dhcpv4o6:      $enable_dhcpv4o6
 
 Developer:
   ATF unittests : $atf_path
index 1eed36171ee0e87379bdb43e38c4661efb7627df..58af400e94c305dd10c257fbb7a298a5cf5a14f4 100644 (file)
@@ -142,14 +142,13 @@ if test "$enable_tracing" != "no" ; then
                  [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.
@@ -177,6 +176,9 @@ if test "$enable_dhcpv4o6" = "yes"; then
        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)
@@ -1036,6 +1038,7 @@ Features:
   binary-leases: $enable_binary_leases
   dhcpv6:        $enable_dhcpv6
   delayed-ack:   $enable_delayed_ack
+  dhcpv4o6:      $enable_dhcpv4o6
 
 Developer:
   ATF unittests : $atf_path
index f6fa1bb3e0a6fe02e6a05ece2e06b8b7f47bcdcb..448b893a3652b30c7c072791b4bec10f6c8e8800 100644 (file)
@@ -143,14 +143,13 @@ if test "$enable_tracing" != "no" ; then
                  [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.
@@ -178,6 +177,9 @@ if test "$enable_dhcpv4o6" = "yes"; then
        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)
@@ -1042,6 +1044,7 @@ Features:
   binary-leases: $enable_binary_leases
   dhcpv6:        $enable_dhcpv6
   delayed-ack:   $enable_delayed_ack
+  dhcpv4o6:      $enable_dhcpv4o6
 
 Developer:
   ATF unittests : $atf_path
index 86bb59a5aa7ba932c1ec08e2254c9a9620452ff6..03642813493e390c338867c6cdd1f749d7612d62 100644 (file)
@@ -148,14 +148,13 @@ if test "$enable_tracing" != "no" ; then
                  [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.
@@ -183,6 +182,9 @@ if test "$enable_dhcpv4o6" = "yes"; then
        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)
@@ -1078,6 +1080,7 @@ Features:
   binary-leases: $enable_binary_leases
   dhcpv6:        $enable_dhcpv6
   delayed-ack:   $enable_delayed_ack
+  dhcpv4o6:      $enable_dhcpv4o6
 
 Developer:
   ATF unittests : $atf_path
index 0cec4d223ccdc8f784f399e7ccc1a46492ba7e7b..16c255e2bb233a4a0460260d5ca7794b851ed98d 100644 (file)
@@ -142,14 +142,13 @@ if test "$enable_tracing" != "no" ; then
                  [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.
@@ -177,6 +176,9 @@ if test "$enable_dhcpv4o6" = "yes"; then
        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)
@@ -1036,6 +1038,7 @@ Features:
   binary-leases: $enable_binary_leases
   dhcpv6:        $enable_dhcpv6
   delayed-ack:   $enable_delayed_ack
+  dhcpv4o6:      $enable_dhcpv4o6
 
 Developer:
   ATF unittests : $atf_path
index 21a606342b791bb8beabb6d66a5d887fb7e8489b..43abe2887b77a7827ab43a35918c194fec584d28 100644 (file)
@@ -815,7 +815,7 @@ struct lease_state {
 #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)
index bbe97b311831f4654ad341f6dbe61c96202dbe04..3396ebad3fadb6424f850b167a7b2a085587e0f0 100644 (file)
@@ -3574,7 +3574,7 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
        } 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
index 1ea87396f179ae0a75007381a7b573e3fc3e6d86..f2b6fa49b43b2dbe41ec28e4f3f73ba3eff2f6c8 100644 (file)
@@ -2267,26 +2267,28 @@ statements
 .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