Multiple WiFi Cards in Linux?
I am doing some research for Dr. Tang, a professor in the MSU Computer Science Department. He wants to find an optimal set of channels for a wireless mesh network for some networking metric. Some common metrics are Quality of Service (QoS), throughput, and latency. Of course any algorithms he wants to try out require testing in the simulation environment we use, called OpNet. OpNet is an unweildly beast, and I spend most of my time wrestling with it. The hard part is that for his research, Tang wants each node to have multiple radios. The simulator really doesn't like that.
Anyway, simulations are nice, but at some point, we have to build a real mesh network. So I looked around at what kind of multi-interface types of things there are, and I found 802.3ab. That's an ethernet protocol for binding two Ethernet cards together for higher throughput. It manages the issues that come up with having multiple Ethernet addresses for the same IP on one network.
802.3ab is a protocol though, and protocols are a pain in the butt. Thing is, wireless technology is remarkably different from wired technology. If you add a second wireless card to a computer, and you set both cards to the same channel, then the second card is useless no matter how much software you add. If the second card is working on a different channel, however, you have the potential to get a lot more network throughput.
A big difference between wired and wireless networks is that a wireless node can change the radio channel it's working on rather easily. The analogy for a wire node would be physically unplugging its cable from one switch and plugging it in to another switch.
So I thought to myself, after learning all these neat things about wireless networks, is "why not set all the ethernet address on a node the same?" This is certain disaster in a wired network. Two physical connections on a network with the same Ethernet address? Were talking the end of the world. That is of course assuming the world consists of that particular network working.
In a wireless network, however, two radios on a nodes are never on the same channel. Right at the beginning we made that problem go away. We know that two radios on the same channel is totally useless, so if they are on the same channel, someone configured the node wrong.
So you might ask "but that doesn't solve the problem, does it?" And the answer is no, that's not the whole solution. It's just a big part. The next part is to write a virtual ethernet device that has some simple responsibilities. Most importantly, it attaches to all the wireless devices you want pooled together. All traffic in and out of all the real devices goes throught the virtual device. It moves all incoming traffic right up the network stack. On data transmission, however, the virtual device needs to transmit on as few radios as it can to get a message to a destination (a target ethernet address). It would have to build some simple tables to associate addresses with devices, but that can be done passivily (no protocol).
The upshot is that with this one module (and some configuration scripts), you could add as many radios as you have free channels to talk on, and your network performance should continue to improve. All you have to do be clever about how you pick which channels each node uses...