Nowadays, most desktop mainboards provide more than one gigabit ethernet port. Connecting them both to the same switch causes most Linux distros by default to get a individual IP on each device and route traffic only on the primary device (based on device metric) or round-robin. A single connection always starts at one IP and so all traffic goes through one device, limiting maximum bandwidth to 1 GBit.
Here comes bonding (sometimes called (port) trunking or link aggregation) to play. It connects two ore more ethernet ports to one virtual port with only one MAC and so mostly one IP address. Wheres earlier only two hosts (with the same OS running) or two switches (from the same vendor) could be connected, nowadays there's a standard protocol which makes it easy: LACP which is part of IEEE 802.3ad. Linux supports difference bonding mechanisms including 802.3ad. To enable bonding at all there are some kernel settings needed:
Device Drivers ---> [*] Network device support ---> <*> Bonding driver support
After compiling and rebooting, we need a userspace tool for configuring the virtual interface. It's called ifenslave and provided with the Linux kernel. You can either compile it by hand
/usr/src/linux/Documentation/networking gcc -Wall -O -I/usr/src/linux/include ifenslave.c -o ifenslave cp ifenslave /sbin/ifenslave
or install it by emerge if you run Gentoo Linux:
emerge -va ifenslave
Now we can configure the bonding device, called bond0. Firstofall we need to set the 802.3ad mode and the MII link monitoring frequency by
echo "802.3ad" > /sys/class/net/bond0/bonding/mode echo 100 >/sys/class/net/bond0/bonding/miimon
Now we can up the device and add some ethernet ports:
ifconfig bond0 up ifenslave bond0 eth0 ifenslave bond0 eth1
Now bond0 is ready to be used. Run a dhcp client or set an IP by
ifconfig bond0 192.168.1.2 netmask 255.255.255.0
These steps are needed on each reboot. If you're running gentoo, you can use baselayout for this. Add
config_eth0=( "none" ) config_eth1=( "none" ) preup() { # Adjusting the bonding mode / MII monitor # Possible modes are : 0, 1, 2, 3, 4, 5, 6, # OR # balance-rr, active-backup, balance-xor, broadcast, # 802.3ad, balance-tlb, balance-alb # MII monitor time interval typically: 100 milliseconds if [[ ${IFACE} == "bond0" ]] ; then BOND_MODE="802.3ad" BOND_MIIMON="100" echo ${BOND_MODE} >/sys/class/net/bond0/bonding/mode echo ${BOND_MIIMON} >/sys/class/net/bond0/bonding/miimon einfo "Bonding mode is set to ${BOND_MODE} on ${IFACE}" einfo "MII monitor interval is set to ${BOND_MIIMON} ms on ${IFACE}" else einfo "Doing nothing on ${IFACE}" fi return 0 } slaves_bond0="eth0 eth1" config_bond0=( "dhcp" )
to your /etc/conf.d/net. I found this nice preup part in the Gentoo Wiki Archive.
Now you have to configure the other side of the link. You can either use a Linux box and configure it the same way or a 802.3ad-capable switch. I used an HP Procurve 1800-24G switch. You have to enable LACP on the ports you're connected:
Now everything should work and you can enjoy a 2 GBits (or more) link. Further details can be found in the kernel documentation.
0 comments:
Post a Comment