diff options
| author | brezak <brezak@NetBSD.org> | 1994-01-18 02:36:53 +0000 |
|---|---|---|
| committer | brezak <brezak@NetBSD.org> | 1994-01-18 02:36:53 +0000 |
| commit | 38253dddb81fdbb768e186e6d9d09dcb60dff30c (patch) | |
| tree | 432e88dba36f859a1cf41ec80225817f1b50cd9f /sys/netinet | |
| parent | ae0948f33c44dc7442d543206c40f000a66878fa (diff) | |
Patch for ip-multicast bugs from mccanne@ee.lbl.gov (Steven McCanne)
Diffstat (limited to 'sys/netinet')
| -rw-r--r-- | sys/netinet/ip_mroute.c | 14 | ||||
| -rw-r--r-- | sys/netinet/ip_output.c | 4 |
2 files changed, 13 insertions, 5 deletions
diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c index ec829b05564..badd58aa736 100644 --- a/sys/netinet/ip_mroute.c +++ b/sys/netinet/ip_mroute.c @@ -425,7 +425,7 @@ add_vif(vifcp) vifp->v_flags = vifcp->vifc_flags; vifp->v_threshold = vifcp->vifc_threshold; vifp->v_lcl_addr = vifcp->vifc_lcl_addr; - vifp->v_ifp = ifa->ifa_ifp; + vifp->v_ifp = ifp; vifp->v_rmt_addr = vifcp->vifc_rmt_addr; splx(s); @@ -717,9 +717,15 @@ ip_mforward(ip, ifp, m) if (ip->ip_hl < (IP_HDR_LEN + TUNNEL_LEN) >> 2 || (ipoptions = (u_char *)(ip + 1))[1] != IPOPT_LSRR ) { /* - * Packet arrived via a physical interface. + * Packet arrived via a physical interface or was + * decapsulated off an encapsulating tunnel. + * If ifp is one of the multicast_decap_if[] + * dummy interfaces, we know it arrived on an + * encapsulating tunnel, and we set tunnel_src to 1. + * We can detect the dummy interface easily since + * it's output function is null. */ - tunnel_src = 0; + tunnel_src = (ifp->if_output == 0) ? 1 : 0; } else { /* * Packet arrived through a tunnel. @@ -761,6 +767,8 @@ ip_mforward(ip, ifp, m) m->m_len -= TUNNEL_LEN; ip->ip_len -= TUNNEL_LEN; ip->ip_hl -= TUNNEL_LEN >> 2; + + ifp = 0; } /* diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index eed53e7ccf8..7fba3061408 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * from: @(#)ip_output.c 7.23 (Berkeley) 11/12/90 - * $Id: ip_output.c,v 1.13 1994/01/10 20:14:23 mycroft Exp $ + * $Id: ip_output.c,v 1.14 1994/01/18 02:36:53 brezak Exp $ */ #include <sys/param.h> @@ -1064,7 +1064,7 @@ ip_mloopback(ifp, m, dst) ip->ip_off = htons((u_short)ip->ip_off); ip->ip_sum = 0; ip->ip_sum = in_cksum(copym, ip->ip_hl << 2); - (void) looutput(ifp, copym, (struct sockaddr *)dst); + (void) looutput(ifp, copym, (struct sockaddr *)dst, 0); } } #endif |
