Skip to content
Snippets Groups Projects
Commit 417d7978 authored by cody burkard's avatar cody burkard
Browse files

merging master

parents 41a54f05 161e7997
No related branches found
No related tags found
No related merge requests found
...@@ -69,7 +69,7 @@ def __init__( cls, name, bases, dict_ ): ...@@ -69,7 +69,7 @@ def __init__( cls, name, bases, dict_ ):
def __call__( cls, *args, **kw ): def __call__( cls, *args, **kw ):
if cls.instance is None: if cls.instance is None:
cls.instance = super( Singleton, cls ).__call__( *args, **kw ) cls.instance = super( Singleton, cls ).__call__( *args, **kw )
return cls.instance return cls.instance
class MininetLogger( Logger, object ): class MininetLogger( Logger, object ):
......
...@@ -261,6 +261,7 @@ def monitor( self, timeoutms=None, findPid=True ): ...@@ -261,6 +261,7 @@ def monitor( self, timeoutms=None, findPid=True ):
# Look for PID # Look for PID
marker = chr( 1 ) + r'\d+\r\n' marker = chr( 1 ) + r'\d+\r\n'
if findPid and chr( 1 ) in data: if findPid and chr( 1 ) in data:
# Marker can be read in chunks; continue until all of it is read
while not re.findall( marker, data ): while not re.findall( marker, data ):
data += self.read( 1024 ) data += self.read( 1024 )
markers = re.findall( marker, data ) markers = re.findall( marker, data )
......
...@@ -201,76 +201,56 @@ def sorted( items ): ...@@ -201,76 +201,56 @@ def sorted( items ):
"Items sorted in natural (i.e. alphabetical) order" "Items sorted in natural (i.e. alphabetical) order"
return sorted(items, key=natural) return sorted(items, key=natural)
class SingleSwitchTopo(Topo):
'''Single switch connected to k hosts.'''
def __init__(self, k=2, **opts): class SingleSwitchTopo( Topo ):
'''Init. "Single switch connected to k hosts."
@param k number of hosts
@param enable_all enables all nodes and switches?
'''
super(SingleSwitchTopo, self).__init__(**opts)
def build( self, k=2, **opts ):
"k: number of hosts"
self.k = k self.k = k
switch = self.addSwitch( 's1' )
for h in irange( 1, k ):
host = self.addHost( 'h%s' % h )
self.addLink( host, switch )
switch = self.addSwitch('s1')
for h in irange(1, k):
host = self.addHost('h%s' % h)
self.addLink(host, switch)
class SingleSwitchReversedTopo(Topo):
'''Single switch connected to k hosts, with reversed ports.
The lowest-numbered host is connected to the highest-numbered port.
Useful to verify that Mininet properly handles custom port numberings. class SingleSwitchReversedTopo( Topo ):
''' """Single switch connected to k hosts, with reversed ports.
def __init__(self, k=2, **opts): The lowest-numbered host is connected to the highest-numbered port.
'''Init. Useful to verify that Mininet properly handles custom port numberings."""
@param k number of hosts def build( self, k=2 ):
@param enable_all enables all nodes and switches? "k: number of hosts"
'''
super(SingleSwitchReversedTopo, self).__init__(**opts)
self.k = k self.k = k
switch = self.addSwitch('s1') switch = self.addSwitch( 's1' )
for h in irange(1, k): for h in irange( 1, k ):
host = self.addHost('h%s' % h) host = self.addHost( 'h%s' % h )
self.addLink(host, switch, self.addLink( host, switch,
port1=0, port2=(k - h + 1)) port1=0, port2=( k - h + 1 ) )
class LinearTopo(Topo): class LinearTopo( Topo ):
"Linear topology of k switches, with n hosts per switch." "Linear topology of k switches, with n hosts per switch."
def __init__(self, k=2, n=1, **opts): def build( self, k=2, n=1, **opts):
"""Init. """k: number of switches
k: number of switches n: number of hosts per switch"""
n: number of hosts per switch
hconf: host configuration options
lconf: link configuration options"""
super(LinearTopo, self).__init__(**opts)
self.k = k self.k = k
self.n = n self.n = n
if n == 1: if n == 1:
genHostName = lambda i, j: 'h%s' % i genHostName = lambda i, j: 'h%s' % i
else: else:
genHostName = lambda i, j: 'h%ss%d' % (j, i) genHostName = lambda i, j: 'h%ss%d' % ( j, i )
lastSwitch = None lastSwitch = None
for i in irange(1, k): for i in irange( 1, k ):
# Add switch # Add switch
switch = self.addSwitch('s%s' % i) switch = self.addSwitch( 's%s' % i )
# Add hosts to switch # Add hosts to switch
for j in irange(1, n): for j in irange( 1, n ):
host = self.addHost(genHostName(i, j)) host = self.addHost( genHostName( i, j ) )
self.addLink(host, switch) self.addLink( host, switch )
# Connect switch to previous # Connect switch to previous
if lastSwitch: if lastSwitch:
self.addLink(switch, lastSwitch) self.addLink( switch, lastSwitch )
lastSwitch = switch lastSwitch = switch
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
class TreeTopo( Topo ): class TreeTopo( Topo ):
"Topology for a tree network with a given depth and fanout." "Topology for a tree network with a given depth and fanout."
def __init__( self, depth=1, fanout=2 ): def build( self, depth=1, fanout=2 ):
super( TreeTopo, self ).__init__()
# Numbering: h1..N, s1..M # Numbering: h1..N, s1..M
self.hostNum = 1 self.hostNum = 1
self.switchNum = 1 self.switchNum = 1
...@@ -42,8 +41,8 @@ class TorusTopo( Topo ): ...@@ -42,8 +41,8 @@ class TorusTopo( Topo ):
with the default controller or any Ethernet bridge with the default controller or any Ethernet bridge
without STP turned on! It can be used with STP, e.g.: without STP turned on! It can be used with STP, e.g.:
# mn --topo torus,3,3 --switch lxbr,stp=1 --test pingall""" # mn --topo torus,3,3 --switch lxbr,stp=1 --test pingall"""
def __init__( self, x, y, *args, **kwargs ):
Topo.__init__( self, *args, **kwargs ) def build( self, x, y ):
if x < 3 or y < 3: if x < 3 or y < 3:
raise Exception( 'Please use 3x3 or greater for compatibility ' raise Exception( 'Please use 3x3 or greater for compatibility '
'with 2.1' ) 'with 2.1' )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment