Use time_uptime instead of non-monotonic time_second to drive ARP
timeouts. Suggested by: bde
This commit is contained in:
parent
9c7b2cd088
commit
a98c06f1c8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=216075
@ -323,7 +323,7 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
|
||||
}
|
||||
|
||||
if ((la->la_flags & LLE_VALID) &&
|
||||
((la->la_flags & LLE_STATIC) || la->la_expire > time_second)) {
|
||||
((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) {
|
||||
bcopy(&la->ll_addr, desten, ifp->if_addrlen);
|
||||
/*
|
||||
* If entry has an expiry time and it is approaching,
|
||||
@ -331,7 +331,7 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
|
||||
* arpt_down interval.
|
||||
*/
|
||||
if (!(la->la_flags & LLE_STATIC) &&
|
||||
time_second + la->la_preempt > la->la_expire) {
|
||||
time_uptime + la->la_preempt > la->la_expire) {
|
||||
arprequest(ifp, NULL,
|
||||
&SIN(dst)->sin_addr, IF_LLADDR(ifp));
|
||||
|
||||
@ -351,7 +351,7 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
|
||||
goto done;
|
||||
}
|
||||
|
||||
renew = (la->la_asked == 0 || la->la_expire != time_second);
|
||||
renew = (la->la_asked == 0 || la->la_expire != time_uptime);
|
||||
if ((renew || m != NULL) && (flags & LLE_EXCLUSIVE) == 0) {
|
||||
flags |= LLE_EXCLUSIVE;
|
||||
LLE_RUNLOCK(la);
|
||||
@ -403,7 +403,7 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
|
||||
int canceled;
|
||||
|
||||
LLE_ADDREF(la);
|
||||
la->la_expire = time_second;
|
||||
la->la_expire = time_uptime;
|
||||
canceled = callout_reset(&la->la_timer, hz * V_arpt_down,
|
||||
arptimer, la);
|
||||
if (canceled)
|
||||
@ -713,7 +713,7 @@ in_arpinput(struct mbuf *m)
|
||||
int canceled;
|
||||
|
||||
LLE_ADDREF(la);
|
||||
la->la_expire = time_second + V_arpt_keep;
|
||||
la->la_expire = time_uptime + V_arpt_keep;
|
||||
canceled = callout_reset(&la->la_timer,
|
||||
hz * V_arpt_keep, arptimer, la);
|
||||
if (canceled)
|
||||
|
@ -1333,7 +1333,7 @@ in_lltable_new(const struct sockaddr *l3addr, u_int flags)
|
||||
* For IPv4 this will trigger "arpresolve" to generate
|
||||
* an ARP request.
|
||||
*/
|
||||
lle->base.la_expire = time_second; /* mark expired */
|
||||
lle->base.la_expire = time_uptime; /* mark expired */
|
||||
lle->l3_addr4 = *(const struct sockaddr_in *)l3addr;
|
||||
lle->base.lle_refcnt = 1;
|
||||
LLE_LOCK_INIT(&lle->base);
|
||||
|
@ -602,10 +602,10 @@ print_entry(struct sockaddr_dl *sdl,
|
||||
if (rtm->rtm_rmx.rmx_expire == 0)
|
||||
printf(" permanent");
|
||||
else {
|
||||
static struct timeval tv;
|
||||
if (tv.tv_sec == 0)
|
||||
gettimeofday(&tv, 0);
|
||||
if ((expire_time = rtm->rtm_rmx.rmx_expire - tv.tv_sec) > 0)
|
||||
static struct timespec tp;
|
||||
if (tp.tv_sec == 0)
|
||||
clock_gettime(CLOCK_MONOTONIC, &tp);
|
||||
if ((expire_time = rtm->rtm_rmx.rmx_expire - tp.tv_sec) > 0)
|
||||
printf(" expires in %d seconds", (int)expire_time);
|
||||
else
|
||||
printf(" expired");
|
||||
|
Loading…
Reference in New Issue
Block a user