Subject: Re: [zebra 4686] load balancing internet links
To: None <current-users@netbsd.org>
From: James Sharp <jsharp@psychoses.org>
List: current-users
Date: 08/07/2000 19:51:10
On Mon, 7 Aug 2000 ww@shadowfax.styx.org wrote:

> I've  been  thinking  about  how  to go  about  implementing  this  in
> *BSD.  The strategy that  I'm leaning  towards is  to create  a pseudo
> device that  acts as a front  end to the physical  devices. The pseudo
> device would support ioctls to add and remove physical devices to/from
> its list  of devices to  round-robin packets out  of. So you  could do
> something like the following to inverse mux two ethernet interfaces:
> 
> ifconfig imux0 192.168.1.1 netmask 255.255.255.252
> imuxcfg imux0 add le0 some_mac_address
> imuxcfg imux0 add le1 some_mac_address
> route add default 192.168.1.2
> 
> where some_mac_address is the mac  address of the ethernet card of the
> machine on the other end of the wire.
> 

I did some thinking about this a while back and here's what I came up
with:

1)  This would be blindingly fast for output by round robining the packets
across the assorted interface.

2)  Unless directly attached to another machine running the same RR
technique, data flowing into the machine would only go into one card
because the machine would reply to an ARP for one card and that MAC would
be cached in the machine doing the ARP request.

You could get around this by assigning all interfaces the same MAC
address, but this tends to drive ethernet switches nuts...and you couldn't
use a hub, either.


An implementation of the 802.1Q VLAN protocol could solve this, though.
 Have a packet come in on any interface, look at its VLAN tag, then route
it to the appropriate ifmux device.

This is just what I'm remembering from a late night discussion with
someone...so there may be holes in the logic.