summaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authorbrezak <brezak@NetBSD.org>1994-01-18 02:36:53 +0000
committerbrezak <brezak@NetBSD.org>1994-01-18 02:36:53 +0000
commit38253dddb81fdbb768e186e6d9d09dcb60dff30c (patch)
tree432e88dba36f859a1cf41ec80225817f1b50cd9f /sys/netinet
parentae0948f33c44dc7442d543206c40f000a66878fa (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.c14
-rw-r--r--sys/netinet/ip_output.c4
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