FreeBSD 10-stable (r274577) LACP / IEEE 802.3ad with TP-Link TL-SG2008 - not working
Alan Somers
asomers at freebsd.org
Thu Dec 18 01:19:24 UTC 2014
On Wed, Dec 17, 2014 at 6:09 PM, David P. Discher <dpd at dpdtech.com> wrote:
>
> On Dec 15, 2014, at 11:33 AM, Alan Somers <asomers at freebsd.org> wrote:
>
>> On Sun, Dec 14, 2014 at 6:23 PM, David P. Discher <dpd at dpdtech.com> wrote:
>>>
>>> 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).
>>
>> Try here:
>> http://standards.ieee.org/findstds/standard/802.1AX-2008.html
>>
>
> Thanks - I hadn’t seen the “free” version from IEEE, and may looking into that later. However, I think my time with messing around with this switch and lagg is just about over.
>
> I did get FreeBSD to work with LACP in this Switch. I hacked in the 4 extra bytes in struct lacpdu in src/sys/net/ieee8023ad_lacp.h
>
> Index: ieee8023ad_lacp.h
> ===================================================================
> --- ieee8023ad_lacp.h (revision 275779)
> +++ ieee8023ad_lacp.h (working copy)
> @@ -151,6 +151,7 @@
> struct lacp_collectorinfo ldu_collector;
> struct tlvhdr ldu_tlv_term;
> uint8_t ldu_resv[50];
> + uint8_t tplink[4];
> } __packed;
>
> /*
>
>
> This work great and without any issue. All the defaults with 10-stable (r275778) and recent version of -head with this one line made it work. Of course, this will likely break FreeBSD with all other switches LACP.
I'm glad that you got your problem sorted out. Please do let us know
if you find a more general solution.
>
> However, what I have also discovered this this switch is unlike FreeBSD which lagghash includes L4, the switch only seems to hash over SRC+DST IP or SRC+DST MAC. Which makes it pretty much just sends all the traffic down one link from the switch. So for my particular use case with a small set of hosts, this switch is not useful for me.
Actually, that's a fairly common problem. I've even seen it on some
expensive Cisco switches.
>
> I would not recommend the TP-Link TL-SG2008 8-Port Gigabit Smart Switch for use with FreeBSD … or for any use with LACP that is expecting increased throughput for a small set of hosts.
>
>
> -
> David P. Discher
> http://davidpdischer.com/
> AIM: DavidDPD | Y!M: daviddpdz
More information about the freebsd-net
mailing list