summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authormaxim <maxim@FreeBSD.org>2007-01-14 18:44:17 +0000
committermaxim <maxim@FreeBSD.org>2007-01-14 18:44:17 +0000
commit3251ecf31adcc7943849240ac1b38c7b4ae0303e (patch)
tree7fd4bf9fca2305bc5440caf1e40e6dba6f6b54d6 /sys/netinet
parent79662cd11ca12b1eba26b71b3d306bb419fdae95 (diff)
downloadFreeBSD-src-3251ecf31adcc7943849240ac1b38c7b4ae0303e.zip
FreeBSD-src-3251ecf31adcc7943849240ac1b38c7b4ae0303e.tar.gz
o Increment requests counter right before send out an ARP query actually.
Otherwise the code could lead to the spurious EHOSTDOWN errors. PR: kern/107807 Submitted by: Dmitrij Tejblum MFC after: 1 month
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/if_ether.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 61265d4..8ee7132 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -496,11 +496,12 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
else
error = (rt == rt0) ? EHOSTDOWN : EHOSTUNREACH;
- if (la->la_asked++ == 0 || rt->rt_expire != time_uptime) {
+ if (la->la_asked == 0 || rt->rt_expire != time_uptime) {
struct in_addr sin =
SIN(rt->rt_ifa->ifa_addr)->sin_addr;
rt->rt_expire = time_uptime;
+ la->la_asked++;
RT_UNLOCK(rt);
arprequest(ifp, &sin, &SIN(dst)->sin_addr,
OpenPOWER on IntegriCloud