changeset 4933:1f01a0b47244 draft

ARP: Use milliseconds rather than timespec for retransmission
author Roy Marples <roy@marples.name>
date Sat, 04 Jan 2020 07:14:47 +0000
parents 8e1948e75f39
children 64d2e5e77cc3
files src/arp.c
diffstat 1 files changed, 8 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/arp.c	Sat Jan 04 06:54:23 2020 +0000
+++ b/src/arp.c	Sat Jan 04 07:14:47 2020 +0000
@@ -383,23 +383,21 @@
 {
 	struct arp_state *astate = arg;
 	struct interface *ifp = astate->iface;
-	struct timespec tv;
+	unsigned int delay;
 
 	if (++astate->probes < PROBE_NUM) {
-		tv.tv_sec = PROBE_MIN;
-		tv.tv_nsec = (suseconds_t)arc4random_uniform(
-		    (PROBE_MAX - PROBE_MIN) * NSEC_PER_SEC);
-		timespecnorm(&tv);
-		eloop_timeout_add_tv(ifp->ctx->eloop, &tv, arp_probe1, astate);
+		delay = (PROBE_MIN * MSEC_PER_SEC) +
+		    (arc4random_uniform(
+		    (PROBE_MAX - PROBE_MIN) * MSEC_PER_SEC));
+		eloop_timeout_add_msec(ifp->ctx->eloop, delay, arp_probe1, astate);
 	} else {
-		tv.tv_sec = ANNOUNCE_WAIT;
-		tv.tv_nsec = 0;
-		eloop_timeout_add_tv(ifp->ctx->eloop, &tv, arp_probed, astate);
+		delay = ANNOUNCE_WAIT *	MSEC_PER_SEC;
+		eloop_timeout_add_msec(ifp->ctx->eloop, delay, arp_probed, astate);
 	}
 	logdebugx("%s: ARP probing %s (%d of %d), next in %0.1f seconds",
 	    ifp->name, inet_ntoa(astate->addr),
 	    astate->probes ? astate->probes : PROBE_NUM, PROBE_NUM,
-	    timespec_to_double(&tv));
+	    (float)delay / MSEC_PER_SEC);
 	if (arp_request(ifp, NULL, &astate->addr) == -1)
 		logerr(__func__);
 }