udhcpc: give SIGUSR1-induced renew one chance of unicast renew
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 28 Sep 2018 12:44:09 +0000 (14:44 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 28 Sep 2018 12:44:09 +0000 (14:44 +0200)
The caps were inconsistent: timeout to renew was capped at 20 seconds,
and any renews with timeout <= 60 seconds were forced to broadcast.

function                                             old     new   delta
udhcpc_main                                         2683    2680      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/udhcp/d6_dhcpc.c
networking/udhcp/dhcpc.c

index ed2255ef3fee8bec03d5f82da4b49735d7093c21..66e4b6c6ac4b9eea90ab0687f806c42644e9b6f2 100644 (file)
@@ -1405,7 +1405,7 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
                        case RENEW_REQUESTED: /* manual (SIGUSR1) renew */
                        case_RENEW_REQUESTED:
                        case RENEWING:
-                               if (timeout > 60) {
+                               if (timeout >= 60) {
                                        /* send an unicast renew request */
                        /* Sometimes observed to fail (EADDRNOTAVAIL) to bind
                         * a new UDP socket for sending inside send_renew.
@@ -1465,11 +1465,9 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
                                 * For the second case, must make sure timeout
                                 * is not too big, or else we can send
                                 * futile renew requests for hours.
-                                * (Ab)use -A TIMEOUT value (usually 20 sec)
-                                * as a cap on the timeout.
                                 */
-                               if (timeout > tryagain_timeout)
-                                       timeout = tryagain_timeout;
+                               if (timeout > 60)
+                                       timeout = 60;
                                goto case_RENEW_REQUESTED;
                        }
                        /* Start things over */
index 0310663e0ad7ac93986cdc2257706776ba95eef9..ab3e5a4637d5163803cc2cb500499d8d6e798924 100644 (file)
@@ -1519,7 +1519,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
                        case RENEW_REQUESTED: /* manual (SIGUSR1) renew */
                        case_RENEW_REQUESTED:
                        case RENEWING:
-                               if (timeout > 60) {
+                               if (timeout >= 60) {
                                        /* send an unicast renew request */
                        /* Sometimes observed to fail (EADDRNOTAVAIL) to bind
                         * a new UDP socket for sending inside send_renew.
@@ -1592,11 +1592,9 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
                                 * For the second case, must make sure timeout
                                 * is not too big, or else we can send
                                 * futile renew requests for hours.
-                                * (Ab)use -A TIMEOUT value (usually 20 sec)
-                                * as a cap on the timeout.
                                 */
-                               if (timeout > tryagain_timeout)
-                                       timeout = tryagain_timeout;
+                               if (timeout > 60)
+                                       timeout = 60;
                                goto case_RENEW_REQUESTED;
                        }
                        /* Start things over */