Small patch to multicast code...

gnn at freebsd.org gnn at freebsd.org
Thu Aug 21 19:12:03 UTC 2008


Hi,

Turns out there is a bug in the code that loops back multicast
packets.  If the underlying device driver supports checksum offloading
then the packet that is looped back, when it is transmitted on the
wire, is incorrect, due to the fact that the packet is not fully
copied.

Here is a patch.  Comments welcome.

Best,
George

Index: ip_output.c
===================================================================
--- ip_output.c	(revision 181731)
+++ ip_output.c	(working copy)
@@ -1135,7 +1135,7 @@
 	register struct ip *ip;
 	struct mbuf *copym;
 
-	copym = m_copy(m, 0, M_COPYALL);
+	copym = m_dup(m, M_DONTWAIT);
 	if (copym != NULL && (copym->m_flags & M_EXT || copym->m_len < hlen))
 		copym = m_pullup(copym, hlen);
 	if (copym != NULL) {


More information about the freebsd-net mailing list