I am trying to connect docker containers via taps to NS-3 nodes, and give a guaranteed available data rate for each machine. But after many hours of trying to figure out the correct topology, I give up. It seems like such a basic functionality, that I'm thinking I'm missing something.
Example of my goal:
I would like to create a setup where NS-3 acts as if it was a switch with a Gigabit/s backplane and ten 100 Megabit/s
ports available. In such a scenario, any host connected over the switch
would be guaranteed 100 Mbps of bandwidth, independently of how much
the other nodes uses.
Problem:
The topology I have had some hope for is the tap-bridge tap-csma-virtual-machine.cc.
The basic topology of tap-csma-virtual-machine seems really close to what I want. It populates a set of nodes with tapBridge devices, and connects those devices in turn to a csma channel. And in principle, the csma channel do deliver the data rate I set it to (for example 100M). But it's shared between nodes, so if I have 2 nodes sending at the same time, they don't get 100M each. And it's worse than if it was just cut in half – it's unevenly distributed, which is a deal breaker for my use case. And it is of course even worse if I add more nodes.
I've also tried a modified version of the openflow-switch, trying to add nodes with tap-bridges to it. But that got me really awful performance, something like 3 Mbps at most.
Surely there must be some easy way to connect ten machines over a NS-3 network with a guarantee on the available data rate?