summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2001-11-02 21:42:20 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2001-11-02 21:42:20 +0000
commit43739d5627bfaae5b52258de039493419d1f56c8 (patch)
treef29029802c81bd38490c21c7f4af788f69d22f67
parentfc4af49fd96115592fe1f74be09051e1f1d69061 (diff)
fix multicast loopback checksums; goeran@cdg.chalmers.se, ok angelos
-rw-r--r--sys/netinet/ip_output.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index 7e0522e2f75..0ffeaab75e2 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_output.c,v 1.137 2001/08/26 21:12:06 niklas Exp $ */
+/* $OpenBSD: ip_output.c,v 1.138 2001/11/02 21:42:19 deraadt Exp $ */
/* $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $ */
/*
@@ -452,7 +452,15 @@ ip_output(m0, va_alist)
* If we belong to the destination multicast group
* on the outgoing interface, and the caller did not
* forbid loopback, loop back a copy.
+ * Can't defer TCP/UDP checksumming, do the
+ * computation now.
*/
+ if (m->m_pkthdr.csum &
+ (M_TCPV4_CSUM_OUT | M_UDPV4_CSUM_OUT)) {
+ in_delayed_cksum(m);
+ m->m_pkthdr.csum &=
+ ~(M_UDPV4_CSUM_OUT | M_TCPV4_CSUM_OUT);
+ }
ip_mloopback(ifp, m, dst);
}
#ifdef MROUTING