diff options
-rw-r--r-- | sys/net/route.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sys/net/route.c b/sys/net/route.c index daaebc86673..def1e123a44 100644 --- a/sys/net/route.c +++ b/sys/net/route.c @@ -1,4 +1,4 @@ -/* $OpenBSD: route.c,v 1.4 1997/07/27 23:30:33 niklas Exp $ */ +/* $OpenBSD: route.c,v 1.5 1997/09/21 03:52:42 niklas Exp $ */ /* $NetBSD: route.c,v 1.14 1996/02/13 22:00:46 christos Exp $ */ /* @@ -113,7 +113,7 @@ rtalloc1(dst, report) newrt = rt = (struct rtentry *)rn; if (report && (rt->rt_flags & RTF_CLONING)) { err = rtrequest(RTM_RESOLVE, dst, SA(0), - SA(0), 0, &newrt); + SA(0), 0, &newrt); if (err) { newrt = rt; rt->rt_refcnt++; @@ -127,7 +127,12 @@ rtalloc1(dst, report) rt->rt_refcnt++; } else { rtstat.rts_unreach++; - miss: if (report) { + /* + * IP encapsulation does lots of lookups where we don't need nor want + * the RTM_MISSes that would be generated. It causes RTM_MISS storms + * sent upward breaking user-level routing queries. + */ + miss: if (report && dst->sa_family != AF_ENCAP) { bzero((caddr_t)&info, sizeof(info)); info.rti_info[RTAX_DST] = dst; rt_missmsg(msgtype, &info, 0, err); |