I'm trying to use the Bonding driver in kernel version 2.4.23 to aggregate two NIC's together. The switches don't support Round-Robin, XOR or 802.3ad mode, so I am trying to use Adaptive Load Balancing (ALB) mode. Unfortunately, I'm running into a few snags!
I'm trying to use two 3Com 3c905C NIC's. Both NIC's work fine themselves. To get things working, I am doing:
# modprobe bonding mode=6
# ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up
# ifenslave bond0 eth0 eth1The first two work OK, and the bonding interface comes up. When I try and enslave the two NIC's, ifenslave responds with:
SIOCBONDENSLAVE: Operation not supported.
And the following entries are recorded in /var/log/messages:
bonding: Error: alb_set_slave_mac_addr: dev->set_mac_address of dev eth0 failed!
ALB mode requires that the base driver support setting the hw address also when the
network devices interface is open(and the same for eth1).
I've looked in the code for the Bonding driver, and I can see exactly where it is failing, but I don't know nearly enough about kernel dirvers and modules to trace back the problem to it's root (which appears to be in the 3c59x driver).
I've looked for a list of devices which are compatable with ALB in the Bonding driver, and have come up empty (google was not my friend!)
I have a few quick questions:
* Does anyone have any good pointers to a compatability list between network drivers and the bonding driver?
* Can someone give me any pointers about which bits of the code in each driver to look at so that I can make such a list for myself?
* Does anyone know of any patches for the 3c59x driver which will allow the bonding driver to change the MAC address while the interface is open? (Is this even possible in the hardware, or is it purely a driver issue?)
Any pointers to more information, or advice on which bits of the code to look at would be greatly appreciated. I'm happy to apply patches, or even to have a stab at writing one myself if I can work out where to start!!!
drivers..
cd drivers/net
find . -name \*.c -or -name \*.h | xargs grep set_mac_address
set_mac_address function bindings...
Thanks...
That helped me track things a little closer to the source. It seems that the 3c59x driver has no binding in the "net_device" structure for the "set_mac_address" function.
I've looked at Donald Beckers 3c59x site at http://www.scyld.com/network/vortex.html, but this version of the code also has no bindings for the set_mac_address function.
It's looking like my only options are going to be:
* Get new network switches
* Use different NIC's (such as the Intel EtherExpress e100's)
* Get my head buried in the kernel code and write a patch
Maybe I'll have a look at 2.6.0test11 to see if there is support lurking in there somewhere - unfortunately, from what I recall, the 2.6.x series still has no support for the Software RAID features on the HighPoint HPT374 IDE RAID Controller (the motherboard is an ABIT AT7-MAX board, with 8x80GB HDD's on the HPT374, and an 8GB boot HDD!)
Resolved...
Well, following my original post, I posted a similar request to the LKML with no response. I then followed up by sending the follwing message to Donald Becker at: vortex -at- scyld.com:
I very promptly received this reply:
So, It seems at the moment that a software solution to my particular problem is not entirely the right way to go. Time to get managemnt to upgrade our switches!
Thanks to Donald for a fast and extremely informative reply :)