From Fedora Project Wiki

Network team softdevice Linux driver

Summary

Network team softdevice Linux driver allows multiple network interfaces to be teamed together and act like a single one.

Owner

Current status

  • Targeted release: Fedora 18
  • Last updated: 2012-10-04
  • Percentage of completion: 100%


Detailed Description

The purpose of the team softdevice Linux 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 softdevice Linux driver project does try to provide the similar functionality as the bonding driver, however architecturally it is quite different from bonding driver. Team softdevice Linux 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.

This feature consists of two parts:

  • kernel module (modules). They are already part of Fedora 18 kernel package.
  • userspace library (libteam package) and daemon (teamd package).

Although there is support for team softdevice Linux driver in initscripts, the plan is to integrate team devices handling into Network Manager as well, probably for Fedora 19.

Benefit to Fedora

Team softdevice Linux driver provides userspace driven NIC Teaming. In addition to that there are some new features in team softdevice Linux driver that are not available in bonding. For example:

  • load balancing for LACP
  • separate per-port link monitoring setup
  • port priorities and stickiness
  • IPv6 Neighbor Solicitation/Neighbor Advertisement link monitoring

Scope

Team driver is quite isolated, and does not impact other areas. It does not touch any existing things.

How To Test

Install "teamd" package first. You need two network interfaces for this basic test. In case their names are not "eth1" and "eth2", please adjust the config file.

test2:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:1a:db:bb brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 52:54:00:99:bb:27 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 52:54:00:b7:cc:fb brd ff:ff:ff:ff:ff:ff
test2:~# cat /usr/share/doc/teamd-0.1/example_configs/activebackup_ethtool_1.conf 
{
        "device":       "team0",
        "runner":       {"name": "activebackup"},
        "link_watch":   {"name": "ethtool"},
        "ports":        {
                "eth1": {
                        "prio": -10,
                        "sticky": true
                },
                "eth2": {
                        "prio": 100
                }
        }
}
test2:~# teamd -f /usr/share/doc/teamd-0.1/example_configs/activebackup_ethtool_1.conf -d
test2:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:1a:db:bb brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP mode DEFAULT qlen 1000
    link/ether ea:8e:85:d3:95:5d brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:b7:cc:fb brd ff:ff:ff:ff:ff:ff
5: team0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT 
    link/ether ea:8e:85:d3:95:5d brd ff:ff:ff:ff:ff:ff
test2:~# ip addr add 192.168.23.2/24 dev team0
test2:~# ip link set team0 up
test2:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:1a:db:bb brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP mode DEFAULT qlen 1000
    link/ether ea:8e:85:d3:95:5d brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master team0 state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:b7:cc:fb brd ff:ff:ff:ff:ff:ff
5: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT 
    link/ether ea:8e:85:d3:95:5d brd ff:ff:ff:ff:ff:ff
test2:~# teamd -f /usr/share/doc/teamd-0.1/example_configs/activebackup_ethtool_1.conf -k
test2:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:1a:db:bb brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 52:54:00:99:bb:27 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
    link/ether 52:54:00:b7:cc:fb brd ff:ff:ff:ff:ff:ff

User Experience

User will not experience any difference comparing to existing state. Only there is new possibility to create Team devices.

Dependencies

No dependencies.

Contingency Plan

Currently, the feature is fully functional. Only some little things and tweaks are going to go in for Fedora 18.

Documentation

Release Notes

Fedora 18 includes team softdevice Linux driver which provides a possibility to team multiple network interfaces together so they act like a single network interface. This extends teaming possibilities provided by existing bonding driver. It also provides userspace driven, modular alternative to bonding driver.

Comments and Discussion