2009/4/30 Nikolay Denev <nde...@gmail.com>: > On Apr 30, 2009, at 3:04 PM, Nikolay Denev wrote: > [snip] >>> >>> I think I got it. >>> >>> It seems that the mbuf fields m_pkthdr.len and m_len are not updated to >>> the real packet size pkt_len. >>> Well, actually they are updated, but only if we have ZERO_COPY_SOCKETS >>> defined. >>> >>> After I added this : >>> >>> m0->m_pkthdr.len = m0->m_len = pkt_len; >>> >>> at about line 5930 in if_bce.c, the frame length reported by tcpdump >>> seems correct. >>> >>> P.S.: I guess this could be the cause for the lagg(4) over bce(4) >>> problems too? >>> >>> P.S.2: This fix will probably break the ZERO_COPY_SOCKETS case, but >>> should be fairly easy to make it a "proper" fix. >>> >>> Regards, >>> Niki Denev >>> >> >> I can confirm that with this fix I was able to create lagg(4) interface in >> "failover" mode with only one member, a bce(4) interface, and it seems to >> work OK. >> >> > > Here is the patch : > > --- sys/dev/bce/if_bce.c.orig 2009-04-30 14:06:54.000000000 +0200 > +++ sys/dev/bce/if_bce.c 2009-04-30 14:11:32.000000000 +0200 > @@ -5926,6 +5926,11 @@ > goto bce_rx_int_next_rx; > } > > +#ifndef ZERO_COPY_SOCKETS > + /* Adjust the packet length to match the received data. */ > + m0->m_pkthdr.len = m0->m_len = pkt_len; > +#endif > + > /* Send the packet to the appropriate interface. */ > m0->m_pkthdr.rcvif = ifp; >
Ha-ha, you was fast! The only note: I think the comment part should be consistent with ZERO_COPY_SOCKETS case. Thank you. -- wbr, pluknet _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"