Minor spacing changes
[linux_from_scratch_hints.git] / ethernet-bonding.txt
blob62761395e03a3e11c19e1ba21ebc48719053e36f
1 AUTHOR:         Jim Gifford <lfs-hints at jg555.com>
2                 
3 DATE:           2003-03-25
5 LICENSE:        GNU Free Documentation License Version 1.2
7 SYNOPSIS:       How to setup ethernet bonding with LFS.
9 DESCRIPTION:    This hint will provide the necessary information for
10                 ethernet interface teaming.
12 PREREQUISITES:  Backup your /etc/syconfig/network-devices before you
13                 start this hint.
15 HINT:
17 BACKGROUND:
19 Ethernet bonding allows you combine ethernet interfaces. You can have
20 then setup in a few different modes.
22         Round Robin - This mode provides load balancing and fault tolerance.
24         Active Backup - This mode provides fault tolerance.
26 I have tried to make this hint as easy as possible, but if you have any
27 suggestions or comment, please email me at the email address above.
29 SOURCE:
31 Everything you need is included in the linux source code.
33 INSTALLATION:
35 Kernel Settings
37         In the 2.4 and 2.6 Kernel, you will need to add the following option
38         to build your kernel.
40         2.4
41                 Network device support  --->
42                         <M> Bonding driver support
43                                     or
44                         <*> Bonding driver support
46         2.6
48                 Device Drivers  --->
49                         Networking support  --->
50                                 <M>     Bonding driver support
51                                                 or
52                                 <*>     Bonding driver support 
54         At this point you can recompile your kernel.
56 -----
57 Bootscript Changes              
59         After you are finished recompiling your kernel you will need to go to 
60         the Documentation/networking directory in your linux kernel source files.
62         You will find a program called ifenslave.c. You will need to compile the
63         program in the following manner.
65         gcc -O -I/usr/src/linux/include ifenslave.c -o ifenslave
66         cp ifenslave /sbin
67         chmod 755 /sbin/ifenslave
70         Now we will need to create a new ifup and ifdown that is compatible with
71         bonding.
73         cat > /etc/sysconfig/network-devices/ifup << "EOF"
74         #!/bin/sh
76         source /etc/sysconfig/rc 
77         source $rc_functions 
78         source $network_devices/ifconfig.$1 
80         if [ -f $network_devices/ifup-$1 ]
81                 then
82                         $network_devices/ifup-$1
83                 else
84                         if [ -z $IP ] && [ -z $SLAVE ]
85                                 then
86                                         echo "IP variable missing for ifconfig.$1, cannot continue"
87                                         exit 1
88                         fi
89         
90                         if [ -z $NETMASK ] && [ -z $SLAVE ]
91                                 then 
92                                         echo -n "NETMASK variable missing for ifconfig.$1, "
93                                         echo "using 255.255.255.0"
94                                         NETMASK=255.255.255.0
95                         fi
97                         if [ -z $BROADCAST ] && [ -z $SLAVE ]
98                                 then
99                                         echo -n "BROADCAST variable missing for ifconfig.$1, "
100                                         echo "using default address"
101                         fi
103                         if [ -z $SLAVE ]
104                                 then
105                                         echo "Bringing up the $1 interface..."
106                                         ifconfig $1 $IP netmask $NETMASK broadcast $BROADCAST
107                                         evaluate_retval
108                                 else
109                                         echo "Bringing up the $1 interface..."
110                                         ifenslave $MASTER $1
111                                         evaluate_retval
112                         fi
113         fi
114         EOF
116         cat > /etc/sysconfig/network-devices/ifdown << "EOF"
117         #!/bin/sh
119         source /etc/sysconfig/rc 
120         source $rc_functions 
121         source $network_devices/ifconfig.$1 
123         if [ -f $network_devices/ifdown-$1 ]
124                 then
125                         $network_devices/ifdown-$1
126                 else
127                         if [ -z $SLAVE ]
128                                 then
129                                         echo "Bringing down the $1 interface..."
130                                         ifconfig $1 down
131                                         evaluate_retval
132                         fi
133         fi
134         EOF
136         Now we need to recreate our ifconfig.(interface files). You do not need to
137         change your existing ones if the adapter is not going to be bonding partner.
139         For interfaces that are not bonding members
141         cat > /etc/sysconfig/network-devices/ifconfig.{interface_that_is_not_bonded} << "EOF"
142         ONBOOT=yes
143         IP={ip_address}
144         NETMASK={subnet_mask}
145         BROADCAST={broadcast_address}
146         EOF
148         The bonding interface is the interface name of now teamed ethernet interfaces.
149         For the bonding interface. This will either be bond0
150         cat > /etc/sysconfig/network-devices/ifconfig.bond0 << "EOF"
151         ONBOOT=yes
152         IP={ip_address}
153         NETMASK={subnet_mask}
154         BROADCAST={broadcast_address}
155         EOF
156         
157         For interfaces that are bonding members
159         cat > /etc/sysconfig/network-devices/ifconfig.{interface_that_is_bonded} << "EOF"
160         ONBOOT=yes
161         MASTER=bond0
162         SLAVE=yes
163         EOF
164         
165         ******Explanation what we actually need to do.*******
167         Ok this is the mosting confusing part. So I am going to give examples of the above
168         files.
170         eth0 is the wan interface.
171         eth1 and eth2 are the lan interfaces for network 192.168.0.0
173         ifconfig.eth0 would look like this
174         
175         ONBOOT=yes
176         IP=64.30.195.78
177         NETMASK=255.255.255.0
178         BROADCAST=64.30.195.255
179         
180         ifconfig.bond0 would look like this
182         ONBOOT=yes
183         IP=192.168.0.1
184         NETMASK=255.255.255.0
185         BROADCAST=192.168.0.255
187         ifconfig.eth1 and ifconfig.eth2 would look like this
189         ONBOOT=yes
190         MASTER=bond0
191         SLAVE=yes
192         
193         Now when we boot, bond0 will be the team of eth1 and eth2.
195 -----   
196 Bootup Options
198         You will need to add the following to your modprobe.conf for 2.6 or your
199         modules.conf for 2.4
201         alias bond0 bonding
202         options bond0 miimon=100
204 -----
205 Did it work
207         Now after you have rebooted, you can check to see if your bonding is working ok.
209         You can run "ifconfig bond0", if you see data your probably fine. Make sure
210         the IP addresses information is correct.
212         Here is my output as a reference
214         bond0     Link encap:Ethernet  HWaddr 00:00:D1:1F:20:49
215                   inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
216                   UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
217                   RX packets:36491 errors:0 dropped:0 overruns:0 frame:0
218                   TX packets:37519 errors:57 dropped:0 overruns:5 carrier:52
219                   collisions:1 txqueuelen:0
220                   RX bytes:3295515 (3.1 Mb)  TX bytes:13366345 (12.7 Mb)
222         You can also use cat /proc/net/bonding/bond0.
224         Here is my output as a reference
226         Ethernet Channel Bonding Driver: v2.6.0 (January 14, 2004)
228         Bonding Mode: load balancing (round-robin)
229         MII Status: up
230         MII Polling Interval (ms): 100
231         Up Delay (ms): 0
232         Down Delay (ms): 0
234         Slave Interface: eth1
235         MII Status: up
236         Link Failure Count: 0
237         Permanent HW addr: 00:00:d1:1f:20:49
239         Slave Interface: eth2
240         MII Status: up
241         Link Failure Count: 0
242         Permanent HW addr: 00:00:d1:1f:20:4a
244         Slave Interface: eth3
245         MII Status: up
246         Link Failure Count: 0
247         Permanent HW addr: 00:00:d1:1f:20:4b
249 -----
250 Want more the one ethernet Team
252         By default the bonding driver only allows one bonded group. If you want more teamed
253         interfaces you can use the following commands.
255         Change modprobe.conf or modules.conf
256         
257         change  
258                 options bond0 miimon=100
259         to
260                 options bond0 miimon=100 max_bonds={#_of_teams}
262         example
263                 options bond0 miimon=100 max_bonds=3
265                 would create bond0 bond1 bond2
267 ----
268 Changes to my existing Programs
270         The only change is that you don't specify an eth{x} interface, you would
271         specify the bond0 interface instead.    
273 -----
274 For more Information
276         For more information view in the kernel source Documentation/network/bonding.txt.
279 VERSION:        1.1
281 CHANGELOG:      1.1 Fixed Date
282                 1.0 Initial Release
284  New Version of this document can be viewed from http://cvs.jg555.com/viewcvs.cgi/lfs-hints