Avoid multiply for preemptive arp calculation since it hits every
ethernet packet sent. Prompted by: Jeffrey Hsu <hsu@FreeBSD.org>
This commit is contained in:
parent
a09a56b5ad
commit
022695f82a
@ -97,7 +97,7 @@ struct llinfo_arp {
|
|||||||
LIST_ENTRY(llinfo_arp) la_le;
|
LIST_ENTRY(llinfo_arp) la_le;
|
||||||
struct rtentry *la_rt;
|
struct rtentry *la_rt;
|
||||||
struct mbuf *la_hold; /* last packet until resolved/timeout */
|
struct mbuf *la_hold; /* last packet until resolved/timeout */
|
||||||
u_short la_preempt; /* #times we QUERIED before entry expiration */
|
u_short la_preempt; /* countdown for pre-expiry arps */
|
||||||
u_short la_asked; /* #times we QUERIED following expiration */
|
u_short la_asked; /* #times we QUERIED following expiration */
|
||||||
#define la_timer la_rt->rt_rmx.rmx_expire /* deletion time in seconds */
|
#define la_timer la_rt->rt_rmx.rmx_expire /* deletion time in seconds */
|
||||||
};
|
};
|
||||||
@ -442,13 +442,12 @@ arpresolve(ifp, rt, m, dst, desten, rt0)
|
|||||||
* arpt_down interval.
|
* arpt_down interval.
|
||||||
*/
|
*/
|
||||||
if ((rt->rt_expire != 0) &&
|
if ((rt->rt_expire != 0) &&
|
||||||
(time_second + (arp_maxtries - la->la_preempt) * arpt_down
|
(time_second + la->la_preempt > rt->rt_expire)) {
|
||||||
> rt->rt_expire)) {
|
|
||||||
arprequest(ifp,
|
arprequest(ifp,
|
||||||
&SIN(rt->rt_ifa->ifa_addr)->sin_addr,
|
&SIN(rt->rt_ifa->ifa_addr)->sin_addr,
|
||||||
&SIN(dst)->sin_addr,
|
&SIN(dst)->sin_addr,
|
||||||
IF_LLADDR(ifp));
|
IF_LLADDR(ifp));
|
||||||
la->la_preempt++;
|
la->la_preempt--;
|
||||||
}
|
}
|
||||||
|
|
||||||
bcopy(LLADDR(sdl), desten, sdl->sdl_alen);
|
bcopy(LLADDR(sdl), desten, sdl->sdl_alen);
|
||||||
@ -484,7 +483,8 @@ arpresolve(ifp, rt, m, dst, desten, rt0)
|
|||||||
} else {
|
} else {
|
||||||
rt->rt_flags |= RTF_REJECT;
|
rt->rt_flags |= RTF_REJECT;
|
||||||
rt->rt_expire += arpt_down;
|
rt->rt_expire += arpt_down;
|
||||||
la->la_preempt = la->la_asked = 0;
|
la->la_asked = 0;
|
||||||
|
la->la_preempt = arp_maxtries;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -745,7 +745,8 @@ match:
|
|||||||
if (rt->rt_expire)
|
if (rt->rt_expire)
|
||||||
rt->rt_expire = time_second + arpt_keep;
|
rt->rt_expire = time_second + arpt_keep;
|
||||||
rt->rt_flags &= ~RTF_REJECT;
|
rt->rt_flags &= ~RTF_REJECT;
|
||||||
la->la_preempt = la->la_asked = 0;
|
la->la_asked = 0;
|
||||||
|
la->la_preempt = arp_maxtries;
|
||||||
if (la->la_hold) {
|
if (la->la_hold) {
|
||||||
(*ifp->if_output)(ifp, la->la_hold,
|
(*ifp->if_output)(ifp, la->la_hold,
|
||||||
rt_key(rt), rt);
|
rt_key(rt), rt);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user