Bonding (link aggregation) ========================== Features -------- * Full support of features offered by the bonding kernel module. * Selectable bonding mode using a single parameter in rc.inet1.conf. * Easy addition of interfaces to the bond using a parameter in rc.inet1.conf. * Custom bonding module options can be provided using the generic parameter IFOPTS[x] in the configuration file. Configuration ------------- Bonding interfaces can be configured via two new bond specific parameters in rc.inet1.conf, plus use of the generic IFOPTS[x] parameter. New parameters are: BONDNICS[x]="" The space delimited list of interfaces to add to this bond. The interfaces will be brought up and configured while bringing up the interface, so do not need to be previously defined in rc.inet1.conf. A bond can be created with only 1 interface, but does not become useful until at least 2 interfaces are configured. BONDMODE[x]="" This parameter sets the bonding mode for this interface. If not specified when BONDNICS[x] has been used, the default is 'balance-rr'. See below for a list of all bonding modes available. The following bond modes are available: balance-rr This mode is also known as round-robin mode. Packets are sequentially transmitted and received through each interface one by one. This mode provides load balancing functionality along with fault tolerance. active-backup When in this mode only one interface set to active, while all other interfaces are in the backup state. If the active interface fails, a backup interface replaces it as the only active interface in the bond. This mode only provides fault tolerance, no load balancing. This mode requires that the 'primary ' option be configured with the IFOPTS[x] parameter. balance-xor The source MAC address uses exclusive or (XOR) logic with the destination MAC address. This calculation ensures that the same slave interface is selected for each destination MAC address. This mode provides fault tolerance and load balancing. broadcast All packets are sent to all the slaved interfaces. This mode provides fault tolerance, but may result in duplicate packets arriving at the destination. 802.3ad Also known as LACP. This mode creates aggregation groups that share the same speed and duplex settings, and it requires a switch that supports an IEEE 802.3ad. This mode uses all interfaces to form the aggregation group and provides fault tolerance and load balancing. balance-tlb This mode ensures that the outgoing traffic distribution is set according to the load on each interface and that the current interface receives all the incoming traffic. If the assigned interface fails to receive traffic, another interface is assigned to the receiving role. This provides fault tolerance and load balancing. balance-alb The receiving packets are load balanced through Address Resolution Protocol (ARP) negotiation. This mode provides fault tolerance and load balancing. Module specific interface options can be set using the the IFOPTS[x] paramter, which takes a pipe (|) delimited list of options for the interface. The following are the most useful options which can be set with IFOPTS[x]: miimon Specifies the MII link monitoring frequency in milliseconds. This determines how often the link state of each slaved interface is checked for link failures. A value of zero disables MII link monitoring, but this is NOT advised. A value of 100 is a good starting point. The default value is 0, so be sure to set this option with ALL modes. lacp_rate This option specifies the rate at which the host will ask the link partner to transmit LACPDU packets in 802.3ad mode. Possible values are: slow Transmit LACPDUs every 30 seconds. fast Transmit LACPDUs every 1 second. The default is slow, but fast is recommended. primary The interface (eth0, eth2, ...) selecting which slave is the primary device. The specified interface will always be the active slave while it is available. Only when the primary is off-line will alternate interfaces be used. This is useful when one interface is preferred over another (e.g. when one interface has higher throughput than another). This option is only valid for active-backup, balance-tlb, and balance-alb modes. xmit_hash_policy Selects the transmit hash policy to use for interface selection in balance-xor, 802.3ad, and balance-tlb modes. Possible values are: layer2 Use XOR of source/dest hardware MAC addresses and packet type ID fields to generate the hash. This algorithm will place all traffic to a particular network peer on the same slave. layer2+3 Use a combination of layer2 and layer3 protocol information (hardware MAC addresses and IP addresses) to generate the hash. This algorithm will place all traffic to a particular network peer on the same slave. This policy is intended to provide a more balanced distribution of traffic than layer2 alone, especially in environments where a layer3 gateway device is required to reach most destinations. layer3+4 This policy uses upper layer protocol information, when available, to generate the hash. This allows for traffic to a particular network peer to span multiple slave interfaces, although a single connection will not span multiple slaves. The default value is layer2. Additional (lesser used) policies are available, and documented in kernel source documentation: /usr/src/linux/Documentation/networking/bonding.txt The IFOPTS[x] option should always include the 'miimon' option - not using this option will result in network degradation. In 'active-backup' mode, the 'primary' option should also be supplied. When using '802.3ad mode', set "lacp_rate fast" for faster recovery from an interface failure. In other modes, the 'xmit_hash_policy' should be set. Full documentation of the bonding layer is available in the kernel source documentation: /usr/src/linux/Documentation/networking/bonding.txt. -- Darren 'Tadgy' Austin.