bce(4) and lagg(4) fix [was: bce(4) sees all incoming frames as 2026 bytes in length]

Nikolay Denev ndenev at gmail.com
Thu Apr 30 12:38:25 UTC 2009


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;

Regards,
Niki Denev

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
Url : http://lists.freebsd.org/pipermail/freebsd-net/attachments/20090430/d5b4dd78/PGP.pgp


More information about the freebsd-net mailing list