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) {
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to