Linux bonding provides a method for aggregating multiple network interfaces (slaves) into a single logical bonded interface (bond). Cumulus Linux supports two bonding modes:
- IEEE 802.3ad link aggregation mode, which allows one or more links to be aggregated together to form a link aggregation group (LAG), so that a media access control (MAC) client can treat the link aggregation group as if it were a single link. IEEE 802.3ad link aggregation is the default mode.
- Balance-xor mode, where the bonding of slave interfaces are static and all slave interfaces are active for load balancing and fault tolerance purposes. This is useful for MLAG deployments.
The benefits of link aggregation include:
- Linear scaling of bandwidth as links are added to LAG
- Load balancing
- Failover protection
Cumulus Linux uses version 1 of the LAG control protocol (LACP).
To temporarily bring up a bond even when there is no LACP partner, use LACP Bypass.
Egress traffic through a bond is distributed to a slave based on a packet hash calculation, providing load balancing over the slaves; many conversation flows are distributed over all available slaves to load balance the total traffic. Traffic for a single conversation flow always hashes to the same slave.
The hash calculation uses packet header data to choose to which slave to transmit the packet:
- For IP traffic, IP header source and destination fields are used in the calculation.
- For IP + TCP/UDP traffic, source and destination ports are included in the hash calculation.
In a failover event, the hash calculation is adjusted to steer traffic over available slaves.
Create a Bond
You can create and configure a bond with the Network Command Line Utility (NCLU). Follow the steps below to create a new bond:
SSH into the switch.
Add a bond using the
net add bondcommand, replacing
[bond-name]with the name of the bond, and
[slaves]with the list of slaves:
The bond is configured by default in IEEE 802.3ad link aggregation mode. To configure the bond in balance-xor mode, see bond mode below.
The name of the bond must be:
Compliant with Linux interface naming conventions.
Unique within the switch.
The configuration options and their default values are listed in the table below.
bond slaves,is set to the recommended value by default in Cumulus Linux. Only configure an option if a different setting is needed. For more information on configuration values, refer to the Related Information section below.
|NCLU Configuration Option|
The bonding mode. Cumulus Linux supports IEEE 802.3ad link aggregation mode and balance-xor mode. IEEE 802.3ad link aggregation is the default mode.
You can change the bond mode using NCLU. The following example changes bond1 to balance-xor mode.
Note: Use balance-xor mode only if you cannot use LACP. See below for more information.
The following example changes bond1 to IEEE 802.3ad link aggregation mode:
|The list of slaves in the bond.||N/A|
|Defines how often the link state of each slave is inspected for failures.|
Specifies the time, in milliseconds, to wait before disabling a slave after a link failure has been detected. This option is only valid for the miimon link monitor. The downdelay value must be a multiple of the miimon value; if not, it is rounded down to the nearest multiple.
Specifies the time, in milliseconds, to wait before enabling a slave after a link recovery has been detected. This option is only valid for the miimon link monitor. The updelay value must be a multiple of the miimon value; if not, it is rounded down to the nearest multiple.
|Determines the link state.|
The hash method used to select the slave for a given packet.
Do not change this setting.
|Enables LACP bypass.||N/A|
Sets the rate to ask the link partner to transmit LACP control packets.
You can set the LACP rate to slow using NCLU:
Defines the minimum number of links that must be active before the bond is put into service.
A value greater than
Enable balance-xor Mode
When you enable balance-xor mode, the bonding of slave interfaces are static and all slave interfaces are active for load balancing and fault tolerance purposes. Packet transmission on the bond is based on the hash policy specified by
When using balance-xor mode to dual-connect host-facing bonds in an MLAG environment, you must configure the
clag_id parameter on the MLAG bonds and it must be the same on both MLAG switches. Otherwise, the bonds are treated by the MLAG switch pair as single-connected.
Use balance-xor mode only if you cannot use LACP; LACP can detect mismatched link attributes between bond members and can even detect misconnections.
To change the mode of an existing bond to balance-xor, run the
net add bond <bond-name> bond mode balance-xor command. The following example commands change bond1 to balance-xor mode:
To create a new bond and configure the bond to use balance-xor mode, create the bond, then configure the bond mode. The following example commands create a bond called bond1 and configure bond mode to be balance-xor:
These commands create the following configuration in the
To view the bond, use NCLU:
Example Configuration: Bonding 4 Slaves
In the following example, the front panel port interfaces swp1 thru swp4 are slaves in bond0, while swp5 and swp6 are not part of bond0.
Example Bond Configuration
The following commands create a bond with four slaves:
These commands create this code snippet in the
If the bond is going to become part of a bridge, you do not need to specify an IP address.
When networking is started on the switch, bond0 is created as MASTER and interfaces swp1 thru swp4 come up in SLAVE mode, as seen in the
ip link show command:
All slave interfaces within a bond have the same MAC address as the bond. Typically, the first slave added to the bond donates its MAC address as the bond MAC address, whereas the MAC addresses of the other slaves are set to the bond MAC address.
The bond MAC address is used as the source MAC address for all traffic leaving the bond and provides a single destination MAC address to address traffic to the bond.
Caveats and Errata
- An interface cannot belong to multiple bonds.
A bond can have subinterfaces, but subinterfaces cannot have a bond.
- A bond cannot enslave VLAN subinterfaces.
- Set all slave ports within a bond to the same speed/duplex and make sure they match the link partner’s slave ports.
On a Cumulus RMP switch, if you create a bond with multiple 10G member ports, traffic gets dropped when the bond uses members of the same sdk_intf from the portmap. For example, traffic gets dropped if both swp49 and swp52 are in the bond because they both are in xe0 (or if both swp50 and swp51 are in the same bond because they are both in xe1):
swp49 xe0 0 0 -1 0
swp50 xe1 0 0 -1 0
swp51 xe1 1 0 -1 0
swp52 xe0 1 0 -1 0
Single port member bonds, bonds with different sdk_intf, or layer 3 bonds do not have this issue.