Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
team netdevice library
C Shell Python
Branch: master

Fix sending duplicate LACP frames at the start of establishing a logi…

…cal channel.

This issue can be seen with the following test script. It creates 2 net
namespaces connected via a veth pair and then creates team over the veth
interface in each namespace. tcpdump is run in background to collect the
lacp frames. The trace shows 11 lacp frames exchanged with multiple duplicates
within the first second.

================================================================================
#!/bin/bash

set -x
set -e

# create 2 network namespaces: ns1 & ns2
ip netns add ns1
ip netns add ns2

# create veth pair (veth-ns1 and veth-ns2)
ip link add veth-ns1 type veth peer name veth-ns2

# move veth-ns1 to ns1
ip link set veth-ns1 netns ns1

# move veth-ns2 to ns2
ip link set veth-ns2 netns ns2

# create and configure team-veth-ns1 in ns1
ip netns exec ns1 ./teamd -d -c '{"device": "team-veth-ns1", "hwaddr": "00:55:BB:BB:BB:01", "runner": {"name": "lacp", "active": true, "fast_rate": true}, "ports": {"veth-ns1": {}}}'

# capture lacp frames in ns1
ip netns exec ns1 tcpdump -w lacp.pcap -c 20 -n -i veth-ns1 -e ether proto 0x8809 &

# create and configure team-veth-ns2 ns2
ip netns exec ns2 ./teamd -d -c '{"device": "team-veth-ns2", "hwaddr": "00:55:BB:BB:BB:02", "runner": {"name": "lacp", "active": true, "fast_rate": true}, "ports": {"veth-ns2": {}}}'

sleep 10
================================================================================

With this patch only 3 lacp frames are exchanged in the first second with no
duplicates.

Signed-off-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
latest commit b2de61b396
Sridhar Samudrala authored committed

README

# libteam - Library for controlling team network device #

The purpose of the Team driver is to provide a mechanism to team multiple NICs (ports) into one logical one (teamdev) at L2 layer. The process is called "channel bonding", "Ethernet bonding", "channel teaming", "link aggregation", etc. This is already implemented in the Linux kernel by the bonding driver.

One thing to note is that Team driver project does try to provide the similar functionality as the bonding driver, however architecturally it is quite different from bonding driver. Team driver is modular, userspace driven, very lean and efficient, and it does have some distinct advantages over bonding. The way Team is configured differs dramatically from the way bonding is.

## Install

    $ ./autogen.sh
    $ ./configure
    $ make
    $ sudo make install

## Authors

* Jiri Pirko <jiri@resnulli.us>

## Internet Resources

* Project Home:     http://www.libteam.org/
* Git Source Tree:  https://github.com/jpirko/libteam/
* Wiki:             https://fedorahosted.org/libteam/
* Tutorial:         https://fedorahosted.org/libteam/wiki/Tutorial
* Documentation:    https://fedorahosted.org/libteam/wiki/InfrastructureSpecification

## License

Copyright (C) 2011-2015 Jiri Pirko <jiri@resnulli.us>

libteam is distributed under GNU Lesser General Public License version 2.1.
See the file "COPYING" in the source distribution for information on terms & conditions for accessing and otherwise using libteam.
Something went wrong with that request. Please try again.