The time where route miss messages on rtalloc() where useful are long gone. In modern times this just produces a lot of noise with no benefit. Nothing in userland is using this information anyway. Because of this reti^Wtedu RT_REPORT.
OK? -- :wq Claudio Index: net/if_mpe.c =================================================================== RCS file: /cvs/src/sys/net/if_mpe.c,v retrieving revision 1.50 diff -u -p -r1.50 if_mpe.c --- net/if_mpe.c 6 Nov 2015 11:45:42 -0000 1.50 +++ net/if_mpe.c 2 Dec 2015 11:28:50 -0000 @@ -172,7 +172,7 @@ mpestart(struct ifnet *ifp0) continue; } - rt = rtalloc(sa, RT_REPORT|RT_RESOLVE, 0); + rt = rtalloc(sa, RT_RESOLVE, 0); if (!rtisvalid(rt)) { m_freem(m); rtfree(rt); Index: net/if_mpw.c =================================================================== RCS file: /cvs/src/sys/net/if_mpw.c,v retrieving revision 1.10 diff -u -p -r1.10 if_mpw.c --- net/if_mpw.c 6 Nov 2015 11:45:04 -0000 1.10 +++ net/if_mpw.c 2 Dec 2015 11:28:50 -0000 @@ -500,8 +500,7 @@ mpw_start(struct ifnet *ifp0) struct shim_hdr *shim; struct sockaddr_storage ss; - rt = rtalloc((struct sockaddr *) &sc->sc_nexthop, - RT_REPORT | RT_RESOLVE, 0); + rt = rtalloc((struct sockaddr *) &sc->sc_nexthop, RT_RESOLVE, 0); if (!rtisvalid(rt)) { rtfree(rt); return; Index: net/pf.c =================================================================== RCS file: /cvs/src/sys/net/pf.c,v retrieving revision 1.952 diff -u -p -r1.952 pf.c --- net/pf.c 21 Nov 2015 11:29:40 -0000 1.952 +++ net/pf.c 2 Dec 2015 11:28:50 -0000 @@ -2934,7 +2934,7 @@ pf_calc_mss(struct pf_addr *addr, sa_fam dst->sin_family = AF_INET; dst->sin_len = sizeof(*dst); dst->sin_addr = addr->v4; - rt = rtalloc(sintosa(dst), RT_REPORT, rtableid); + rt = rtalloc(sintosa(dst), 0, rtableid); break; #ifdef INET6 case AF_INET6: @@ -2943,7 +2943,7 @@ pf_calc_mss(struct pf_addr *addr, sa_fam dst6->sin6_family = AF_INET6; dst6->sin6_len = sizeof(*dst6); dst6->sin6_addr = addr->v6; - rt = rtalloc(sin6tosa(dst6), RT_REPORT, rtableid); + rt = rtalloc(sin6tosa(dst6), 0, rtableid); break; #endif /* INET6 */ } @@ -5384,7 +5384,7 @@ pf_routable(struct pf_addr *addr, sa_fam if (kif != NULL && kif->pfik_ifp->if_type == IFT_ENC) goto out; - rt0 = rtalloc((struct sockaddr *)&ss, RT_REPORT, rtableid); + rt0 = rtalloc((struct sockaddr *)&ss, 0, rtableid); if (rt0 != NULL) { /* No interface given, this is a no-route check */ if (kif == NULL) @@ -5456,7 +5456,7 @@ pf_rtlabel_match(struct pf_addr *addr, s #endif /* INET6 */ } - rt = rtalloc((struct sockaddr *)&ss, RT_REPORT|RT_RESOLVE, rtableid); + rt = rtalloc((struct sockaddr *)&ss, RT_RESOLVE, rtableid); if (rt != NULL) { if (rt->rt_labelid == aw->v.rtlabel) ret = 1; @@ -5515,7 +5515,7 @@ pf_route(struct mbuf **m, struct pf_rule rtableid = m0->m_pkthdr.ph_rtableid; if (!r->rt) { - rt = rtalloc(sintosa(dst), RT_REPORT|RT_RESOLVE, rtableid); + rt = rtalloc(sintosa(dst), RT_RESOLVE, rtableid); if (rt == NULL) { ipstat.ips_noroute++; goto bad; Index: net/route.c =================================================================== RCS file: /cvs/src/sys/net/route.c,v retrieving revision 1.280 diff -u -p -r1.280 route.c --- net/route.c 2 Dec 2015 10:33:15 -0000 1.280 +++ net/route.c 2 Dec 2015 11:28:50 -0000 @@ -223,10 +223,6 @@ rtisvalid(struct rtentry *rt) * "RT_RESOLVE" means that a corresponding L2 entry should * be added to the routing table and resolved (via ARP or * NDP), if it does not exist. - * - * "RT_REPORT" indicates that a message should be sent to - * userland if no matching route has been found or if an - * error occured while adding a L2 entry. */ struct rtentry * rt_match(struct sockaddr *dst, uint32_t *src, int flags, unsigned int tableid) @@ -248,19 +244,17 @@ rt_match(struct sockaddr *dst, uint32_t &rt, tableid); if (error) { rt0->rt_use++; - goto miss; + rt_missmsg(RTM_MISS, &info, 0, 0, error, + tableid); + } else { + /* Inform listeners of the new route */ + rt_sendmsg(rt, RTM_ADD, tableid); + rtfree(rt0); } - /* Inform listeners of the new route */ - rt_sendmsg(rt, RTM_ADD, tableid); - rtfree(rt0); } rt->rt_use++; - } else { + } else rtstat.rts_unreach++; -miss: - if (ISSET(flags, RT_REPORT)) - rt_missmsg(RTM_MISS, &info, 0, 0, error, tableid); - } KERNEL_UNLOCK(); splx(s); return (rt); @@ -349,7 +343,7 @@ rt_hash(struct rtentry *rt, uint32_t *sr struct rtentry * rtalloc_mpath(struct sockaddr *dst, uint32_t *src, unsigned int rtableid) { - return (_rtalloc(dst, src, RT_REPORT|RT_RESOLVE, rtableid)); + return (_rtalloc(dst, src, RT_RESOLVE, rtableid)); } #endif /* SMALL_KERNEL */ Index: net/route.h =================================================================== RCS file: /cvs/src/sys/net/route.h,v retrieving revision 1.124 diff -u -p -r1.124 route.h --- net/route.h 2 Dec 2015 09:17:47 -0000 1.124 +++ net/route.h 2 Dec 2015 11:28:50 -0000 @@ -340,8 +340,7 @@ void rtlabel_unref(u_int16_t); /* * Values for additional argument to rtalloc() */ -#define RT_REPORT 0x1 -#define RT_RESOLVE 0x2 +#define RT_RESOLVE 1 extern struct rtstat rtstat; extern const struct sockaddr_rtin rt_defmask4; @@ -379,7 +378,7 @@ void rt_timer_timer(void *); int rtisvalid(struct rtentry *); int rt_hash(struct rtentry *, uint32_t *); #ifdef SMALL_KERNEL -#define rtalloc_mpath(dst, s, rid) rtalloc((dst), RT_REPORT|RT_RESOLVE, (rid)) +#define rtalloc_mpath(dst, s, rid) rtalloc((dst), RT_RESOLVE, (rid)) #else struct rtentry *rtalloc_mpath(struct sockaddr *, uint32_t *, u_int); #endif Index: netinet/if_ether.c =================================================================== RCS file: /cvs/src/sys/netinet/if_ether.c,v retrieving revision 1.192 diff -u -p -r1.192 if_ether.c --- netinet/if_ether.c 2 Dec 2015 09:28:46 -0000 1.192 +++ netinet/if_ether.c 2 Dec 2015 11:28:50 -0000 @@ -704,7 +704,7 @@ arplookup(u_int32_t addr, int create, in sin.sin_family = AF_INET; sin.sin_addr.s_addr = addr; sin.sin_other = proxy ? SIN_PROXY : 0; - flags = (create) ? (RT_REPORT|RT_RESOLVE) : 0; + flags = (create) ? RT_RESOLVE : 0; rt = rtalloc((struct sockaddr *)&sin, flags, tableid); if (!rtisvalid(rt) || ISSET(rt->rt_flags, RTF_GATEWAY) || Index: netinet/ip_icmp.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_icmp.c,v retrieving revision 1.147 diff -u -p -r1.147 ip_icmp.c --- netinet/ip_icmp.c 1 Dec 2015 21:26:43 -0000 1.147 +++ netinet/ip_icmp.c 2 Dec 2015 11:28:50 -0000 @@ -748,7 +748,7 @@ icmp_reflect(struct mbuf *m, struct mbuf sin.sin_addr = ip->ip_src; /* keep packet in the original virtual instance */ - rt = rtalloc(sintosa(&sin), RT_REPORT|RT_RESOLVE, rtableid); + rt = rtalloc(sintosa(&sin), RT_RESOLVE, rtableid); if (rt == NULL) { ipstat.ips_noroute++; m_freem(m); @@ -933,7 +933,7 @@ icmp_mtudisc_clone(struct in_addr dst, u sin.sin_len = sizeof(sin); sin.sin_addr = dst; - rt = rtalloc(sintosa(&sin), RT_REPORT|RT_RESOLVE, rtableid); + rt = rtalloc(sintosa(&sin), RT_RESOLVE, rtableid); /* Check if the route is actually usable */ if (!rtisvalid(rt) || (rt->rt_flags & (RTF_REJECT|RTF_BLACKHOLE))) { Index: netinet/ip_input.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_input.c,v retrieving revision 1.262 diff -u -p -r1.262 ip_input.c --- netinet/ip_input.c 23 Nov 2015 15:54:45 -0000 1.262 +++ netinet/ip_input.c 2 Dec 2015 11:28:50 -0000 @@ -1243,7 +1243,7 @@ ip_rtaddr(struct in_addr dst, u_int rtab sin->sin_addr = dst; ipforward_rt.ro_rt = rtalloc(&ipforward_rt.ro_dst, - RT_REPORT|RT_RESOLVE, rtableid); + RT_RESOLVE, rtableid); } if (ipforward_rt.ro_rt == 0) return (NULL); Index: netinet/ip_output.c =================================================================== RCS file: /cvs/src/sys/netinet/ip_output.c,v retrieving revision 1.309 diff -u -p -r1.309 ip_output.c --- netinet/ip_output.c 1 Dec 2015 00:49:12 -0000 1.309 +++ netinet/ip_output.c 2 Dec 2015 11:29:58 -0000 @@ -501,7 +501,7 @@ sendit: if (ro && ro->ro_rt != NULL) { rtfree(ro->ro_rt); ro->ro_rt = rtalloc(&ro->ro_dst, - RT_REPORT|RT_RESOLVE, + RT_RESOLVE, m->m_pkthdr.ph_rtableid); } if (rt_mtucloned) @@ -1443,8 +1443,7 @@ ip_setmoptions(int optname, struct ip_mo sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; sin.sin_addr = mreq->imr_multiaddr; - rt = rtalloc(sintosa(&sin), RT_REPORT|RT_RESOLVE, - rtableid); + rt = rtalloc(sintosa(&sin), RT_RESOLVE, rtableid); if (!rtisvalid(rt)) { rtfree(rt); error = EADDRNOTAVAIL; @@ -1455,7 +1454,7 @@ ip_setmoptions(int optname, struct ip_mo sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; sin.sin_addr = mreq->imr_interface; - rt = rtalloc(sintosa(&sin), RT_REPORT, rtableid); + rt = rtalloc(sintosa(&sin), 0, rtableid); if (!rtisvalid(rt) || !ISSET(rt->rt_flags, RTF_LOCAL)) { rtfree(rt); error = EADDRNOTAVAIL; Index: netinet6/icmp6.c =================================================================== RCS file: /cvs/src/sys/netinet6/icmp6.c,v retrieving revision 1.179 diff -u -p -r1.179 icmp6.c --- netinet6/icmp6.c 1 Dec 2015 21:26:43 -0000 1.179 +++ netinet6/icmp6.c 2 Dec 2015 11:28:50 -0000 @@ -1912,7 +1912,7 @@ icmp6_mtudisc_clone(struct sockaddr *dst struct rtentry *rt; int error; - rt = rtalloc(dst, RT_REPORT|RT_RESOLVE, rdomain); + rt = rtalloc(dst, RT_RESOLVE, rdomain); if (rt == NULL) return NULL; Index: netinet6/in6_src.c =================================================================== RCS file: /cvs/src/sys/netinet6/in6_src.c,v retrieving revision 1.70 diff -u -p -r1.70 in6_src.c --- netinet6/in6_src.c 25 Oct 2015 14:43:06 -0000 1.70 +++ netinet6/in6_src.c 2 Dec 2015 11:28:50 -0000 @@ -242,7 +242,7 @@ in6_selectsrc(struct in6_addr **in6src, sa6->sin6_scope_id = dstsock->sin6_scope_id; if (IN6_IS_ADDR_MULTICAST(dst)) { ro->ro_rt = rtalloc(sin6tosa(&ro->ro_dst), - RT_REPORT|RT_RESOLVE, ro->ro_tableid); + RT_RESOLVE, ro->ro_tableid); } else { ro->ro_rt = rtalloc_mpath(sin6tosa(&ro->ro_dst), NULL, ro->ro_tableid); Index: netinet6/ip6_output.c =================================================================== RCS file: /cvs/src/sys/netinet6/ip6_output.c,v retrieving revision 1.200 diff -u -p -r1.200 ip6_output.c --- netinet6/ip6_output.c 29 Nov 2015 15:12:36 -0000 1.200 +++ netinet6/ip6_output.c 2 Dec 2015 11:28:50 -0000 @@ -1136,7 +1136,7 @@ ip6_getpmtu(struct route_in6 *ro_pmtu, s sa6_dst->sin6_addr = *dst; ro_pmtu->ro_rt = rtalloc(sin6tosa(&ro_pmtu->ro_dst), - RT_REPORT|RT_RESOLVE, ro_pmtu->ro_tableid); + RT_RESOLVE, ro_pmtu->ro_tableid); } } if (ro_pmtu->ro_rt) { @@ -2195,7 +2195,7 @@ ip6_setmoptions(int optname, struct ip6_ dst->sin6_family = AF_INET6; dst->sin6_addr = mreq->ipv6mr_multiaddr; ro.ro_rt = rtalloc(sin6tosa(&ro.ro_dst), - RT_REPORT|RT_RESOLVE, ro.ro_tableid); + RT_RESOLVE, ro.ro_tableid); if (ro.ro_rt == NULL) { error = EADDRNOTAVAIL; break; Index: netinet6/nd6.c =================================================================== RCS file: /cvs/src/sys/netinet6/nd6.c,v retrieving revision 1.173 diff -u -p -r1.173 nd6.c --- netinet6/nd6.c 1 Dec 2015 12:22:18 -0000 1.173 +++ netinet6/nd6.c 2 Dec 2015 11:28:50 -0000 @@ -586,7 +586,7 @@ nd6_lookup(struct in6_addr *addr6, int c sin6.sin6_len = sizeof(struct sockaddr_in6); sin6.sin6_family = AF_INET6; sin6.sin6_addr = *addr6; - flags = (create) ? (RT_REPORT|RT_RESOLVE) : 0; + flags = (create) ? RT_RESOLVE : 0; rt = rtalloc(sin6tosa(&sin6), flags, rtableid); if (rt != NULL && (rt->rt_flags & RTF_LLINFO) == 0) { Index: netmpls/mpls_input.c =================================================================== RCS file: /cvs/src/sys/netmpls/mpls_input.c,v retrieving revision 1.52 diff -u -p -r1.52 mpls_input.c --- netmpls/mpls_input.c 2 Dec 2015 08:47:00 -0000 1.52 +++ netmpls/mpls_input.c 2 Dec 2015 11:28:50 -0000 @@ -156,7 +156,7 @@ do_v6: } } - rt = rtalloc(smplstosa(smpls), RT_REPORT|RT_RESOLVE, 0); + rt = rtalloc(smplstosa(smpls), RT_RESOLVE, 0); if (rt == NULL) { /* no entry for this label */ #ifdef MPLS_DEBUG @@ -372,7 +372,7 @@ mpls_do_error(struct mbuf *m, int type, smpls->smpls_len = sizeof(*smpls); smpls->smpls_label = shim->shim_label & MPLS_LABEL_MASK; - rt = rtalloc(smplstosa(smpls), RT_REPORT|RT_RESOLVE, 0); + rt = rtalloc(smplstosa(smpls), RT_RESOLVE, 0); if (rt == NULL) { /* no entry for this label */ m_freem(m);