show sidebar
                       Network Bonding in OpenSSI.

This document describes the current status of support for network
bonding in OpenSSI. It describes the steps required to get bonding 
working. This process is currently manual requiring changes to the 
ramdisk so that the bonding interface is associated with ICS. 
More information on Network Bonding is available in the linux
source tree at:

All steps outlined below need to hand-crafted right now. This is 
a temporary solution before bonding is neatly integrated with SSI.


Steps 2-4 refer to changes inside the linuxrc. Following the instructions,
you will find a snipet of an example linuxrc. Have a look at it and make the 
corresponding changes in your linuxrc.

1. Copy over bonding module and the ifenslave binary into the ramdisk
2. Install the bonding module with the desired mode
   For e.g.
       insmod /lib/bonding.o mode=1 miimon=100
   Possible values for mode are [from the bonding-howto]:
        0       Round-robin policy: Transmit in a sequential order from the
                first available slave through the last. This mode provides
                load balancing and fault tolerance.
        1       Active-backup policy: Only one slave in the bond is active. A
                different slave becomes active if, and only if, the active slave
		fails. The bond's MAC address is externally visible on only
                one port (network adapter) to avoid confusing the switch.
                This mode provides fault tolerance.
        2       XOR policy: Transmit based on [(source MAC address XOR'd with
                destination MAC address) modula slave count]. This selects the
                same slave for each destination MAC address. This mode provides
                load balancing and fault tolerance.
        3       Broadcast policy: transmits everything on all slave interfaces.
                This mode provides fault tolerance.
3. Configure the bonding interface using ifconfig.
4. Use ifenslave to enslave desired interfaces to the bonding interface. 

Following is the relevant portion of an example linuxrc that has the 
changes described above:
for iface in `ifconfig -a | grep HWaddr|
    sed 's/\(eth[0-9]*\).*HWaddr \(.*\)/\1-\2/'|sed 's/\(bond[0-9]*\).*HWaddr \(.*\)/\1-\2/'`
    ifdev=`echo $iface | cut -f 1 -d -`
    ifaddr=`echo $iface | cut -f 2 -d -`
    rec=`tail +2 /etc/boottab | grep $ifaddr`
    if [ $? -eq 0 ]; then
        ifaddr=`echo $rec | cut -f 3 -d / | cut -f 1 -d:`
        ifmask=`echo $rec | cut -f 3 -d / | cut -f 2 -d:`
        echo "Configuring $ifdev: $ifaddr/$ifmask"
        ifconfig $ifdev $ifaddr netmask $ifmask
        nodenum=`echo $rec | cut -f 1 -d /`
        if [ $nodenum -gt 0 ]
            # set variables used for cluster IP address
/bin/ifenslave bond0 eth1
/bin/ifenslave bond0 eth2


This page last updated on Thu Dec 15 17:15:46 2005 GMT
privacy and legal statement