Skip to content

Commit

Permalink
MFC r284512: Properly handle locking on the ARP protocol request send…
Browse files Browse the repository at this point in the history
…ing.
  • Loading branch information
eri authored and eri committed Jun 24, 2015
1 parent bad6606 commit 5d11dcc
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions sys/netinet/if_ether.c
Original file line number Diff line number Diff line change
Expand Up @@ -365,20 +365,29 @@ 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_uptime)) {
bcopy(&la->ll_addr, desten, ifp->if_addrlen);
renew = 0;
/*
* If entry has an expiry time and it is approaching,
* see if we need to send an ARP request within this
* arpt_down interval.
*/
if (!(la->la_flags & LLE_STATIC) &&
time_uptime + la->la_preempt > la->la_expire) {
arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL);
renew = 1;
la->la_preempt--;
}

*lle = la;
error = 0;
goto done;

if (flags & LLE_EXCLUSIVE)
LLE_WUNLOCK(la);
else
LLE_RUNLOCK(la);

if (renew == 1)
arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL);

return (0);
}

if (la->la_flags & LLE_STATIC) { /* should not happen! */
Expand Down

0 comments on commit 5d11dcc

Please sign in to comment.