[git commit] udhcpc: account for script run time
Denys Vlasenko
vda.linux at googlemail.com
Sun Dec 21 15:10:22 UTC 2014
commit: http://git.busybox.net/busybox/commit/?id=28634924f0950f1938ea74a7808d412dc1063fd0
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master
Based on the following user report:
I ran into an issue where I was seeing a long delay in the scripts called
in udhcp_run_script. I was using an old version of OpenWrt (kamikaze)
and a satellite modem. An NTP script was being called and the modem
would sometimes take a long time to respond to the DNS lookup when
it was offline.
This delay started affecting my lease time. The lease that I would
get from my satellite modem before it was online would be short:
only 60 seconds. The delay with NTP and the modem would typically
be about 18 seconds. This would cause the first DHCP renew request
from dhcpc to be a little late. Under certain circumstances,
I could even see the first DHCP renew to occur after the lease
had expired!
function old new delta
udhcpc_main 2816 2837 +21
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
networking/udhcp/dhcpc.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 35e7c20..a34829c 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -1697,6 +1697,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
case RENEW_REQUESTED:
case REBINDING:
if (*message == DHCPACK) {
+ unsigned start;
uint32_t lease_seconds;
struct in_addr temp_addr;
uint8_t *temp;
@@ -1756,7 +1757,10 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
bb_info_msg("Lease of %s obtained, lease time %u",
inet_ntoa(temp_addr), (unsigned)lease_seconds);
requested_ip = packet.yiaddr;
+
+ start = monotonic_sec();
udhcp_run_script(&packet, state == REQUESTING ? "bound" : "renew");
+ already_waited_sec = (unsigned)monotonic_sec() - start;
state = BOUND;
change_listen_mode(LISTEN_NONE);
@@ -1774,7 +1778,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
#endif
/* make future renew packets use different xid */
/* xid = random_xid(); ...but why bother? */
- already_waited_sec = 0;
+
continue; /* back to main loop */
}
if (*message == DHCPNAK) {
More information about the busybox-cvs
mailing list