Rename examples.{intfOptions,multiLink} -> {intfoptions,multilink}
This commit is contained in:
@@ -19,7 +19,7 @@ def intfOptions():
|
|||||||
h2 = net.addHost( 'h2' )
|
h2 = net.addHost( 'h2' )
|
||||||
s1 = net.addSwitch( 's1' )
|
s1 = net.addSwitch( 's1' )
|
||||||
link1 = net.addLink( h1, s1, cls=TCLink )
|
link1 = net.addLink( h1, s1, cls=TCLink )
|
||||||
link2 = net.addLink( h2, s1 )
|
net.addLink( h2, s1 )
|
||||||
net.start()
|
net.start()
|
||||||
|
|
||||||
# flush out latency from reactive forwarding delay
|
# flush out latency from reactive forwarding delay
|
||||||
|
|||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
"""
|
||||||
|
This is a simple example that demonstrates multiple links
|
||||||
|
between nodes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from mininet.cli import CLI
|
||||||
|
from mininet.log import lg, info
|
||||||
|
from mininet.net import Mininet
|
||||||
|
from mininet.topo import Topo
|
||||||
|
|
||||||
|
def runMultiLink():
|
||||||
|
|
||||||
|
topo = simpleMultiLinkTopo( n=2 )
|
||||||
|
net = Mininet( topo=topo )
|
||||||
|
net.start()
|
||||||
|
CLI( net )
|
||||||
|
net.stop()
|
||||||
|
|
||||||
|
class simpleMultiLinkTopo( Topo ):
|
||||||
|
|
||||||
|
def __init__( self, n, **kwargs ):
|
||||||
|
Topo.__init__( self, **kwargs )
|
||||||
|
|
||||||
|
h1, h2 = self.addHost( 'h1' ), self.addHost( 'h2' )
|
||||||
|
s1 = self.addSwitch( 's1' )
|
||||||
|
|
||||||
|
for _ in range( n ):
|
||||||
|
self.addLink( s1, h1 )
|
||||||
|
self.addLink( s1, h2 )
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
lg.setLogLevel( 'info' )
|
||||||
|
runMultiLink()
|
||||||
Executable
+42
@@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
Test for intfOptions.py
|
||||||
|
"""
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
import pexpect
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class testIntfOptions( unittest.TestCase ):
|
||||||
|
|
||||||
|
def testIntfOptions( self ):
|
||||||
|
"verify that intf.config is correctly limiting traffic"
|
||||||
|
p = pexpect.spawn( 'python -m mininet.examples.intfoptions ' )
|
||||||
|
tolerance = .8
|
||||||
|
opts = [ "Results: \['([\d\.]+) .bits/sec",
|
||||||
|
"Results: \['10M', '([\d\.]+) .bits/sec",
|
||||||
|
"h(\d+)->h(\d+): (\d)/(\d), rtt min/avg/max/mdev ([\d\.]+)/([\d\.]+)/([\d\.]+)/([\d\.]+) ms",
|
||||||
|
pexpect.EOF ]
|
||||||
|
while True:
|
||||||
|
index = p.expect( opts, timeout=600 )
|
||||||
|
if index == 0:
|
||||||
|
bw = float( p.match.group( 1 ) )
|
||||||
|
self.assertGreaterEqual( bw, float( 5 * tolerance ) )
|
||||||
|
self.assertLessEqual( bw, float( 5 + 5 * ( 1 - tolerance ) ) )
|
||||||
|
elif index == 1:
|
||||||
|
BW = 10
|
||||||
|
measuredBw = float( p.match.group( 1 ) )
|
||||||
|
loss = ( measuredBw / BW ) * 100
|
||||||
|
self.assertGreaterEqual( loss, 50 * tolerance )
|
||||||
|
self.assertLessEqual( loss, 50 + 50 * ( 1 - tolerance ) )
|
||||||
|
elif index == 2:
|
||||||
|
delay = float( p.match.group( 6 ) )
|
||||||
|
self.assertGreaterEqual( delay, 15 * tolerance )
|
||||||
|
self.assertLessEqual( delay, 15 + 15 * ( 1 - tolerance ) )
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
Executable
+55
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
'''
|
||||||
|
Test for multiple links between nodes
|
||||||
|
validates mininet interfaces against systems interfaces
|
||||||
|
'''
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
import pexpect
|
||||||
|
|
||||||
|
class testMultiLink( unittest.TestCase ):
|
||||||
|
|
||||||
|
prompt = 'mininet>'
|
||||||
|
|
||||||
|
def testMultiLink(self):
|
||||||
|
p = pexpect.spawn( 'python -m mininet.examples.multilink' )
|
||||||
|
p.expect( self.prompt )
|
||||||
|
p.sendline( 'intfs' )
|
||||||
|
p.expect( 's(\d): lo' )
|
||||||
|
intfsOutput = p.before
|
||||||
|
# parse interfaces from mininet intfs, and store them in a list
|
||||||
|
hostToIntfs = intfsOutput.split( '\r\n' )[ 1:3 ]
|
||||||
|
intfList = []
|
||||||
|
for hostToIntf in hostToIntfs:
|
||||||
|
intfList += [ intf for intf in
|
||||||
|
hostToIntf.split()[1].split(',') ]
|
||||||
|
|
||||||
|
# get interfaces from system by running ifconfig on every host
|
||||||
|
sysIntfList = []
|
||||||
|
opts = [ 'h(\d)-eth(\d)', self.prompt ]
|
||||||
|
p.expect( self.prompt )
|
||||||
|
|
||||||
|
p.sendline( 'h1 ifconfig' )
|
||||||
|
while True:
|
||||||
|
p.expect( opts )
|
||||||
|
if p.after == self.prompt:
|
||||||
|
break
|
||||||
|
sysIntfList.append( p.after )
|
||||||
|
|
||||||
|
p.sendline( 'h2 ifconfig' )
|
||||||
|
while True:
|
||||||
|
p.expect( opts )
|
||||||
|
if p.after == self.prompt:
|
||||||
|
break
|
||||||
|
sysIntfList.append( p.after )
|
||||||
|
|
||||||
|
failMsg = ( 'The systems interfaces and mininet interfaces\n'
|
||||||
|
'are not the same' )
|
||||||
|
|
||||||
|
self.assertEqual( sysIntfList, intfList, msg=failMsg )
|
||||||
|
p.sendline( 'exit' )
|
||||||
|
p.wait()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
Reference in New Issue
Block a user