diff options
| author | Bruce M Simpson <bms@FreeBSD.org> | 2003-09-23 16:54:39 +0000 |
|---|---|---|
| committer | Bruce M Simpson <bms@FreeBSD.org> | 2003-09-23 16:54:39 +0000 |
| commit | b7feb429a278afda606ea9e29c9a633636d2fd59 (patch) | |
| tree | fc22146e08512486c07508e780e4cd9cf3bc0994 /sys | |
| parent | 9e977454ca2b3876fcebf620efbf9d2529ee0207 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/netinet/if_ether.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index 64817c13b3dc..840fd0b4cdff 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -896,12 +896,20 @@ arplookup(addr, create, proxy) else if (rt->rt_gateway->sa_family != AF_LINK) why = "gateway route is not ours"; - if (why && create) { - log(LOG_DEBUG, "arplookup %s failed: %s\n", - inet_ntoa(sin.sin_addr), why); - return 0; - } else if (why) { - return 0; + if (why) { + if (create) + log(LOG_DEBUG, "arplookup %s failed: %s\n", + inet_ntoa(sin.sin_addr), why); + + /* If there are no references to this route, purge it */ + if (rt->rt_refcnt <= 0 && + (rt->rt_flags & RTF_WASCLONED) != RTF_WASCLONED) { + rtrequest(RTM_DELETE, + (struct sockaddr *)rt_key(rt), + rt->rt_gateway, rt_mask(rt), + rt->rt_flags, 0); + } + return (0); } return ((struct llinfo_arp *)rt->rt_llinfo); } |
