diff options
author | maxim <maxim@FreeBSD.org> | 2007-01-14 18:44:17 +0000 |
---|---|---|
committer | maxim <maxim@FreeBSD.org> | 2007-01-14 18:44:17 +0000 |
commit | 3251ecf31adcc7943849240ac1b38c7b4ae0303e (patch) | |
tree | 7fd4bf9fca2305bc5440caf1e40e6dba6f6b54d6 /sys/netinet/if_ether.c | |
parent | 79662cd11ca12b1eba26b71b3d306bb419fdae95 (diff) | |
download | FreeBSD-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/if_ether.c')
-rw-r--r-- | sys/netinet/if_ether.c | 3 |
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, |