So, I think I’ve identified the issue.  In sys/net/ieee8023ad_lacp.c, 
lacp_pdu_input() has a sanity check :

        if (m->m_pkthdr.len != sizeof(*du)) {
                goto bad;
        }

I added some debugging information in if_lagg, and ran with it.  The lacpdu 
packet that being sent by the TP-Link switch is 4 bytes longer than the FreeBSD 
"struct lacpdu du”.  

        em1: lacp_pdu_input-sizeof(du) bad m_pkthdr.len=128 sizeof(du)=124

My packet captures shows the packet size differing as well.

I’m still poking around. I’ve been trying to look for the official LACPDU 
binary/wire format … if someone can point me to the reference for that, that 
would be helpful (at least my own understanding). 

Not exactly sure what these extra 4 bytes are at the end of the packet.  Still 
trying to figure that out.


-
David P. Discher
http://davidpdischer.com/
AIM: DavidDPD | Y!M: daviddpdz 



On Dec 4, 2014, at 8:41 PM, David P. Discher <d...@dpdtech.com> wrote:

> Thanks Adam -
> 
> On Dec 4, 2014, at 1:58 PM, Adam McDougall <mcdou...@egr.msu.edu> wrote:
> 
>> 
>> Is the switch side set to "active" for the lacp mode (instead of
>> passive)?  Also, try:
>> sysctl net.link.lagg.0.lacp.lacp_strict_mode=0
>> 
>> If either of those work, I'll explain more, don't have time to dig for
>> old email right this minute.
> 
> Yes, the switch was in active mode.  Turn strict mode off (which I thought I 
> did before, but of course this sysctl clears when destroying the interface).  
> So, the LACP did finally negotiated, at least in ifconfig :

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to