- Added a new dhclient command line parameter, --prefix-len-hint <length>.
When used in conjunction with -P, it directs dhclient to use the given
length as the prefix length hint when requesting prefixes.
- [ISC-Bugs #43792]
+ [ISC-Bugs #43792]
+ [ISC-Bugs #35112]
+ [ISC-Bugs #32228]
+ [ISC-Bugs #29470]
+
+- dhclient will now wait for 10 seconds after declining an IPv4 address
+ before issuing a discover. This is in keeping with RFC 2131, section 3.1.5.
+ Prior to this dhclient did not wait at all. The amount of time dhclient
+ waits can be specified via a new command line parameter:
+ --decline-wait-time <seconds>. A value of zero equates to no wait at all.
+ [ISC-Bugs #45457]
Changes since 4.3.0 (bug fixes)
int duid_v4 = 0;
int std_dhcid = 0;
+int decline_wait_time = 10; /* Default to 10 secs per, RFC 2131, 3.1.5 */
+
/* ASSERT_STATE() does nothing now; it used to be
assert (state_is == state_shouldbe). */
#define ASSERT_STATE(state_is, state_shouldbe) {}
#ifdef DHCPv6
#ifdef DHCP4o6
#define DHCLIENT_USAGE0 \
-"[-4|-6] [-SNTPRI1dvrxi] [-nw] -4o6 <port>] [-p <port>]\n" \
-" [-D LL|LLT] [--dad-wait-time seconds]\n" \
-" [--prefix-len-hint length]\n"
+"[-4|-6] [-SNTPRI1dvrxi] [-nw] -4o6 <port>] [-p <port>] [-D LL|LLT]\n" \
+" [--dad-wait-time <seconds>] [--prefix-len-hint <length>]\n" \
+" [--decline-wait-time <seconds>]\n"
#else /* DHCP4o6 */
#define DHCLIENT_USAGE0 \
"[-4|-6] [-SNTPRI1dvrxi] [-nw] [-p <port>] [-D LL|LLT]\n" \
-" [--dad-wait-time seconds] [--prefix-len-hint length]\n"
+" [--dad-wait-time <seconds>] [--prefix-len-hint <length>]\n" \
+" [--decline-wait-time <seconds>]\n"
#endif
#else /* DHCPv6 */
#define DHCLIENT_USAGE0 \
-"[-I1dvrxi] [-nw] [-p <port>] [-D LL|LLT] \n"
+"[-I1dvrxi] [-nw] [-p <port>] [-D LL|LLT] \n" \
+" [--decline-wait-time <seconds>]\n"
#endif
#define DHCLIENT_USAGEC \
argv[i]);
}
#endif /* DHCPv6 */
+ } else if (!strcmp(argv[i], "--decline-wait-time")) {
+ if (++i == argc) {
+ usage(use_noarg, argv[i-1]);
+ }
+
+ errno = 0;
+ decline_wait_time = (int)strtol(argv[i], &s, 10);
+ if (errno || (*s != '\0') ||
+ (decline_wait_time < 0)) {
+ usage("Invalid value for "
+ "--decline-wait-time: %s", argv[i]);
+ }
} else if (!strcmp(argv[i], "-D")) {
duid_v4 = 1;
if (++i == argc)
#endif
finish(2);
} else {
- state_init(client);
+ struct timeval tv;
+ tv.tv_sec = cur_tv.tv_sec + decline_wait_time;
+ tv.tv_usec = cur_tv.tv_usec;
+ add_timeout(&tv, state_init, client, 0, 0);
return;
}
}
client_envadd (client, "", "reason", "%s", reason);
client_envadd (client, "", "pid", "%ld", (long int)getpid ());
+#if defined(DHCPv6)
client_envadd (client, "", "dad_wait_time", "%ld",
(long int)dad_wait_time);
+#endif
}
}