Files
mininet/examples/linearbandwidth.py
T

96 lines
2.8 KiB
Python
Executable File

#!/usr/bin/python
"""
Test bandwidth (using iperf) on linear networks of varying size,
using both kernel and user datapaths.
We construct a network of N switches and N+1 hosts, connected as follows:
hN <-> s0 <-> s1 .. sN-1
| | |
hN+1 hN+2 hN+N
Note: by default, the reference controller only supports 16
switches, so this test WILL NOT WORK unless you have recompiled
your controller to support 100 switches (or more.)
"""
import sys
flush = sys.stdout.flush
from mininet.net import init, Mininet
from mininet.node import Host, KernelSwitch, UserSwitch
from mininet.topo import Topo, Node
from mininet.log import lg
class LinearTopo( Topo ):
"Topology for a string of N switches and 1+N hosts."
def __init__( self, N ):
# Add default members to class.
super( LinearTopo, self ).__init__()
# Create switch and host nodes
switches = range( 0, N )
hosts = range( N, 2*N + 1 )
for id in switches:
self._add_node( id, Node( is_switch=True ) )
for id in hosts:
self._add_node( id, Node( is_switch=False ) )
# Connect switches
for s in switches[ :-1 ]:
self._add_edge( s, s + 1 )
# Connect hosts
self._add_edge( hosts[ 0 ], switches[ 0 ] )
for s in switches:
self._add_edge( s, s + N + 1)
# Consider all switches and hosts 'on'
self.enable_all()
def linearBandwidthTest( lengths ):
"Check bandwidth at various lengths along a switch chain."
datapaths = [ 'kernel', 'user' ]
results = {}
switchCount = max( lengths )
for datapath in datapaths:
Switch = KernelSwitch if datapath == 'kernel' else UserSwitch
results[ datapath ] = []
net = Mininet( topo=LinearTopo( switchCount ), switch=Switch )
net.start()
print "*** testing basic connectivity"
net.ping( [ net.hosts[ 0 ], net.hosts[ -1 ] ] )
print "*** testing bandwidth"
for n in lengths:
print "testing h0 <-> h" + `n`, ; flush()
bandwidth = net.iperf( [ net.hosts[ 0 ], net.hosts[ n ] ] )
print bandwidth ; flush()
results[ datapath ] += [ ( n, bandwidth ) ]
net.stop()
for datapath in datapaths:
print
print "*** Linear network results for", datapath, "datapath:"
print
result = results[ datapath ]
print "SwitchCount\tiperf Results"
for switchCount, bandwidth in result:
print switchCount, '\t\t',
print bandwidth[ 0 ], 'server, ', bandwidth[ 1 ], 'client'
print
print
if __name__ == '__main__':
lg.setLogLevel( 'info' )
init()
print "*** Running linearBandwidthTest"
linearBandwidthTest( [ 1, 10 ] )