Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import print_function
- from mininet.log import setLogLevel
- from mininet.topo import Topo
- from mininet.net import Mininet
- from mininet.link import TCLink
- from mininet.node import CPULimitedHost
- from mininet.util import pmonitor
- import os
- from time import time
- from signal import SIGINT
- def createTopo(queue=100):
- print("*** Create Topology")
- net = Mininet(link=TCLink, host=CPULimitedHost)
- # Add Host
- net.addHost('server', ip='192.168.1.2/24',
- defaultRoute='via 192.168.1.1')
- net.addHost('client', ip='192.168.2.2/24',
- defaultRoute='via 192.168.2.1')
- net.addHost('router')
- # Add Link
- net.addLink(net['router'], net['server'], bw=2, max_queue_size=queue)
- net.addLink(net['router'], net['client'], bw=1000, max_queue_size=queue)
- print()
- print("||||||||||||||||||||Finish Config|||||||||||||||||||||")
- print()
- print()
- return net
- def configRouter(net):
- print("*** Router Configuration")
- print("Add IP Address:")
- print(" router-eth0 192.168.1.1/24")
- net['router'].cmd('ip addr add 192.168.1.1/24 brd + dev router-eth0')
- print(" router-eth1 192.168.2.1/24")
- net['router'].cmd('ip addr add 192.168.2.1/24 brd + dev router-eth1')
- print("Add IP Forwarding")
- net['router'].cmd("echo 1 > /proc/sys/net/ipv4/ip_forward")
- print()
- print("||||||||||||||||||||Finish Config ROUTER|||||||||||||||||||||")
- print()
- print()
- return net
- def controlReno(net):
- print("*** TCP Congestion Control: RENO")
- print("Set congestion control")
- net['server'].cmd("sysctl -w net.ipv4.tcp_congestion_control=reno")
- net['client'].cmd("sysctl -w net.ipv4.tcp_congestion_control=reno")
- print(" server: congestion control=%s" %net['server'].cmd("cat /proc/sys/net/ipv4/tcp_congestion_control"), end="")
- print(" client: congestion control=%s" %net['client'].cmd("cat /proc/sys/net/ipv4/tcp_congestion_control"))
- return net
- def controlCubic(net):
- print("*** TCP Congestion Control: CUBIC")
- print("Set congestion control")
- net['server'].cmd("sysctl -w net.ipv4.tcp_congestion_control=cubic")
- net['client'].cmd("sysctl -w net.ipv4.tcp_congestion_control=cubic")
- print(" server: congestion control=%s" %net['server'].cmd("cat /proc/sys/net/ipv4/tcp_congestion_control"), end="")
- print(" client: congestion control=%s" %net['client'].cmd("cat /proc/sys/net/ipv4/tcp_congestion_control"))
- return net
- def roundTripTime(net, ping=2, trip=2):
- print("*** Roundtrip Ping Client to Server")
- rtt = []
- for i in range(trip):
- start = time()
- net['client'].cmd("ping "+net['server'].IP()+" -c "+str(ping))
- end = time()
- print(" ", (i+1), "- RTT: %.5f" %(end-start))
- rtt.append((end-start))
- print("Avg round trip time: %.5f" %(sum(rtt)/len(rtt)))
- print()
- return net
- def webServer(net):
- print("*** Web Server Testing")
- print("Web server configuration:")
- print(" Run simple HTTP server %s:80"%(net['server'].IP()))
- net['server'].popen('python -m SimpleHTTPServer 80')
- print("Testing Web Server: ")
- net['client'].cmd('sleep 1')
- print(" ", net['client'].cmd('wget --report-speed=bits http://'+net['server'].IP()+':80') )
- net['server'].cmd('kill python')
- # print(net['client'].cmd('cat index.html'))
- net['client'].cmd('rm index.html*')
- return net
- def runTCPProbe(net, port=5001, file='probe.txt'):
- print("*** Run TCP Probe")
- print(net['server'].cmd('sysctl -w net.ipv4.tcp_no_metrics_save=1'), end="")
- print(net['server'].cmd('modprobe tcp_probe port='+str(port)+' full=1'), end="")
- print(net['server'].cmd('chmod 444 /proc/net/tcpprobe'), end="")
- print(net['server'].cmd('cat /proc/net/tcpprobe > '+file+' &TCPCAP=$!'))
- return net
- def killTCPProbe(net):
- print("*** Kill TCP Probe")
- print(net['server'].cmd('kill $TCPCAP'))
- return net
- def generateTraffic(net):
- print("*** Generate traffic using iperf")
- popens = {}
- tperf = 4
- tout = 5
- popens[net['server']] = net['server'].popen('iperf -s'+str(tperf+tout))
- popens[net['client']] = net['client'].popen('iperf -i 1 -t '+str(tperf)+' -c '+net['server'].IP())
- stopPerf = time() + tperf
- logserver = ""
- logclient = ""
- for host, line in pmonitor(popens, timeoutms=tperf+tout):
- if host:
- if host.name == "server": logserver += (host.name +": "+line)
- elif host.name == "client": logclient += (host.name +": "+line)
- # print('%s: %s' % (host.name, line), end="")
- if time() >= stopPerf:
- for p in popens.values():
- p.send_signal(SIGINT)
- print(logserver)
- print(logclient)
- return net
- def rttScenario():
- # Clean Mininet
- os.system('mn -c')
- # Create Topology
- net = createTopo()
- # Run Mininet
- net.start()
- # Configure Router
- net = configRouter(net)
- # Testing Ping Reachability
- net.ping()
- print()
- # TCP Congestion Control: RENO
- net = controlReno(net)
- # Roundtrip ping client to server
- net = roundTripTime(net, ping=2, trip=2)
- # TCP Congestion Control: CUBIC
- net = controlCubic(net)
- # Roundtrip ping client to server
- net = roundTripTime(net, 4, 2)
- # Stop Mininet
- net.stop()
- def webScenario():
- # Clean Mininet
- os.system('mn -c')
- # Create Topology
- net = createTopo()
- # Run Mininet
- net.start()
- # Configure Router
- net = configRouter(net)
- # Testing Ping Reachability
- net.ping()
- print()
- # TCP Congestion Control: RENO
- net = controlReno(net)
- # Run TCP Probe
- net = runTCPProbe(net, 80, 'probe-web-reno.txt')
- # Web Server
- net = webServer(net)
- # kill TCP Probe
- net = killTCPProbe(net)
- # TCP Congestion Control: CUBIC
- net = controlCubic(net)
- # Run TCP Probe
- net = runTCPProbe(net, 80, 'probe-web-cubic.txt')
- # Web Server
- net = webServer(net)
- # kill TCP Probe
- net = killTCPProbe(net)
- # Stop Mininet
- net.stop()
- def liveScenario():
- # Clean Mininet
- os.system('mn -c')
- # Create Topology
- net = createTopo()
- # Run Mininet
- net.start()
- # Configure Router
- net = configRouter(net)
- # Testing Ping Reachability
- net.ping()
- print()
- # TCP Congestion Control: RENO
- net = controlReno(net)
- # Run TCP Probe
- net = runTCPProbe(net, file='probe-iperf-reno.txt')
- # Run Iperf
- net = generateTraffic(net)
- # kill TCP Probe
- net = killTCPProbe(net)
- # TCP Congestion Control: CUBIC
- net = controlCubic(net)
- # Run TCP Probe
- net = runTCPProbe(net, file='probe-iperf-cubic.txt')
- # Run Iperf
- net = generateTraffic(net)
- # kill TCP Probe
- net = killTCPProbe(net)
- # Stop Mininet
- net.stop()
- if __name__ == '__main__':
- setLogLevel( 'info' )
- # Scenario-1: Roundtrip Time Analysis
- print("\n\n--------------------------------------------------------------------")
- print("*** Scenario-1: Roundtrip Time Analysis ***\n")
- rttScenario()
- # Scenario-2: Web Analysis
- print("\n\n--------------------------------------------------------------------")
- print("*** Scenario-2: Web Analysis ***\n")
- webScenario()
- # Scenario-3: Long-lived vs Short-lived TCP
- print("\n\n--------------------------------------------------------------------")
- print("*** Scenario-3: Long-lived vs Short-lived TCP ***\n")
- liveScenario()
- # Scenario-4: Small Buffer
- print("\n\n--------------------------------------------------------------------")
- print("*** Scenario-4: Small Buffer ***\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement