#!/usr/bin/python

"""
Test bandwidth on linear networks of varying size, using both
the kernel and user datapaths.

Each network looks like:

h0 <-> s0 <-> s1 .. sN <-> h1
"""
   
from mininet import init, LinearNet, iperfTest

def linearBandwidthTest():

   datapaths = [ 'kernel', 'user' ]
   switchCounts = [ 1, 20, 40, 60, 80, 100 ]
   results = {}

   for datapath in datapaths:
      k = datapath == 'kernel'
      results[ datapath ] = []
      for switchCount in switchCounts: 
         print "*** Creating linear network of size", switchCount
         network = LinearNet( switchCount, k)
         bandwidth = network.run( iperfTest )
         results[ datapath ] += [ ( switchCount, bandwidth ) ]
         
   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__':
   init()
   print "*** Running linearBandwidthTest"
   linearBandwidthTest()
   exit( 1 )