Call rtalloc_ign() so that protocol cloning will not occur at the IP layer.

This commit is contained in:
Garrett Wollman 1994-12-13 23:08:12 +00:00
parent 652082e6ac
commit 2c17fe9339
2 changed files with 17 additions and 6 deletions

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)ip_input.c 8.2 (Berkeley) 1/4/94
* $Id: ip_input.c,v 1.11 1994/11/16 10:17:08 jkh Exp $
* $Id: ip_input.c,v 1.12 1994/12/12 17:20:53 ugen Exp $
*/
#include <sys/param.h>
@ -880,7 +880,7 @@ ip_rtaddr(dst)
sin->sin_len = sizeof(*sin);
sin->sin_addr = dst;
rtalloc(&ipforward_rt);
rtalloc_ign(&ipforward_rt, RTF_PRCLONING);
}
if (ipforward_rt.ro_rt == 0)
return ((struct in_ifaddr *)0);
@ -1051,7 +1051,7 @@ ip_forward(m, srcrt)
#ifdef IPFIREWALL
if ( ((char *)&(ip->ip_dst.s_addr))[0] != 127
&& !ip_fw_chk(ip,m->m_pkthdr.rcvif,ip_fw_fwd_chain) ) {
&& !ip_fw_chk(ip, m->m_pkthdr.rcvif, ip_fw_fwd_chain) ) {
ipstat.ips_cantforward++;
m_freem(m);
return;
@ -1081,7 +1081,7 @@ ip_forward(m, srcrt)
sin->sin_len = sizeof(*sin);
sin->sin_addr = ip->ip_dst;
rtalloc(&ipforward_rt);
rtalloc_ign(&ipforward_rt, RTF_PRCLONING);
if (ipforward_rt.ro_rt == 0) {
icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_HOST, dest, 0);
return;
@ -1095,9 +1095,11 @@ ip_forward(m, srcrt)
*/
mcopy = m_copy(m, 0, imin((int)ip->ip_len, 64));
#ifdef bogus
#ifdef GATEWAY
ip_ifmatrix[rt->rt_ifp->if_index +
if_index * m->m_pkthdr.rcvif->if_index]++;
#endif
#endif
/*
* If forwarding packet using same interface that it came in on,

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)ip_output.c 8.3 (Berkeley) 1/21/94
* $Id: ip_output.c,v 1.9 1994/11/16 10:17:10 jkh Exp $
* $Id: ip_output.c,v 1.10 1994/12/12 17:20:54 ugen Exp $
*/
#include <sys/param.h>
@ -153,8 +153,17 @@ ip_output(m0, opt, ro, flags, imo)
ifp = ia->ia_ifp;
ip->ip_ttl = 1;
} else {
/*
* If this is the case, we probably don't want to allocate
* a protocol-cloned route since we didn't get one from the
* ULP. This lets TCP do its thing, while not burdening
* forwarding or ICMP with the overhead of cloning a route.
* Of course, we still want to do any cloning requested by
* the link layer, as this is probably required in all cases
* for correct operation (as it is for ARP).
*/
if (ro->ro_rt == 0)
rtalloc(ro);
rtalloc_ign(ro, RTF_PRCLONING);
if (ro->ro_rt == 0) {
ipstat.ips_noroute++;
error = EHOSTUNREACH;