Hey Brendan,
That's somewhat close to what I've been thinking about. However, I am thinking more about the OS pooling all network devices, instead of the user specifically configuring individual device behavior. However, the link you provided touches one one of the problems that I am concerned about...
Quote:
8.1 Adventures in Routing
-------------------------
When bonding is configured, it is important that the slave
devices not have routes that supersede routes of the master (or,
generally, not have routes at all). For example, suppose the bonding
device bond0 has two slaves, eth0 and eth1, and the routing table is
as follows:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.0.0 0.0.0.0 255.255.0.0 U 40 0 0 eth0
10.0.0.0 0.0.0.0 255.255.0.0 U 40 0 0 eth1
10.0.0.0 0.0.0.0 255.255.0.0 U 40 0 0 bond0
127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 0 lo
This routing configuration will likely still update the
receive/transmit times in the driver (needed by the ARP monitor), but
may bypass the bonding driver (because outgoing traffic to, in this
case, another host on network 10 would use eth0 or eth1 before bond0).
The ARP monitor (and ARP itself) may become confused by this
configuration, because ARP requests (generated by the ARP monitor)
will be sent on one interface (bond0), but the corresponding reply
will arrive on a different interface (eth0). This reply looks to ARP
as an unsolicited ARP reply (because ARP matches replies on an
interface basis), and is discarded. The MII monitor is not affected
by the state of the routing table.
The solution here is simply to insure that slaves do not have
routes of their own, and if for some reason they must, those routes do
not supersede routes of their master. This should generally be the
case, but unusual configurations or errant manual or automatic static
route additions may cause trouble.
The highlighted text is the part I'm most curious about. According to this article, the ARP subsystem "matches replies on an interface basis". My question is: Is this necessary?
Is there some reason why the ARP subsystem, or the TCP/IP stack, or the OS in general couldn't just treat all incoming packets the same, regardless of which interface received them, and just "randomly" pick an interface to use when sending any packet, assuming that the interface was physically capable of delivering the packet.
To put it another way, how important is it that a TCP/IP connection "stick" to a particular network device? I see three options:
a) a connection must be "attached" to an interface, and can only use that interface for communication.
b) A connection is "related" to an interface, and the system should "prefer" that interface over all others, or
c) A connection is not related to any particular interface, and packets can be sent to any interface (that can deliver the packet) at any time.
Is there any logical reason why option C could not be implemented at the OS level?
For instance, does the router care if it receives two TCP packets for the same IP address, for the same port, but from different ethernet MAC addresses?
Hopefully, all of this makes sense...