Added TorusTopo, a 2D torus topology
This commit is contained in:
@@ -30,7 +30,7 @@ from mininet.node import ( Host, CPULimitedHost, Controller, OVSController,
|
|||||||
from mininet.nodelib import LinuxBridge
|
from mininet.nodelib import LinuxBridge
|
||||||
from mininet.link import Link, TCLink
|
from mininet.link import Link, TCLink
|
||||||
from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
|
from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
|
||||||
from mininet.topolib import TreeTopo
|
from mininet.topolib import TreeTopo, TorusTopo
|
||||||
from mininet.util import custom, customConstructor
|
from mininet.util import custom, customConstructor
|
||||||
from mininet.util import buildTopo
|
from mininet.util import buildTopo
|
||||||
|
|
||||||
@@ -41,7 +41,8 @@ TOPOS = { 'minimal': lambda: SingleSwitchTopo( k=2 ),
|
|||||||
'linear': LinearTopo,
|
'linear': LinearTopo,
|
||||||
'reversed': SingleSwitchReversedTopo,
|
'reversed': SingleSwitchReversedTopo,
|
||||||
'single': SingleSwitchTopo,
|
'single': SingleSwitchTopo,
|
||||||
'tree': TreeTopo }
|
'tree': TreeTopo,
|
||||||
|
'torus': TorusTopo }
|
||||||
|
|
||||||
SWITCHDEF = 'ovsk'
|
SWITCHDEF = 'ovsk'
|
||||||
SWITCHES = { 'user': UserSwitch,
|
SWITCHES = { 'user': UserSwitch,
|
||||||
|
|||||||
@@ -34,3 +34,37 @@ def TreeNet( depth=1, fanout=2, **kwargs ):
|
|||||||
"Convenience function for creating tree networks."
|
"Convenience function for creating tree networks."
|
||||||
topo = TreeTopo( depth, fanout )
|
topo = TreeTopo( depth, fanout )
|
||||||
return Mininet( topo, **kwargs )
|
return Mininet( topo, **kwargs )
|
||||||
|
|
||||||
|
|
||||||
|
class TorusTopo( Topo ):
|
||||||
|
"""2-D Torus topology
|
||||||
|
WARNING: this topology has LOOPS and WILL NOT WORK
|
||||||
|
with the default controller or any Ethernet bridge
|
||||||
|
without STP turned on! It can be used with STP, e.g.:
|
||||||
|
# mn --topo torus,3,3 --switch lxbr,stp=1 --test pingall"""
|
||||||
|
def __init__( self, x, y, *args, **kwargs ):
|
||||||
|
Topo.__init__( self, *args, **kwargs )
|
||||||
|
if x < 3 or y < 3:
|
||||||
|
raise Exception( 'Please use 3x3 or greater for compatibility '
|
||||||
|
'with Mininet 2.1.0' )
|
||||||
|
hosts, switches, dpid = {}, {}, 0
|
||||||
|
# Create and wire interior
|
||||||
|
for i in range( 0, x ):
|
||||||
|
for j in range( 0, y ):
|
||||||
|
loc = '%dx%d' % ( i + 1, j + 1 )
|
||||||
|
# dpid cannot be zero for OVS
|
||||||
|
dpid = ( i + 1 ) * 256 + ( j + 1 )
|
||||||
|
switch = switches[ i, j ] = self.addSwitch( 's' + loc, dpid='%016x' % dpid )
|
||||||
|
host = hosts[ i, j ] = self.addHost( 'h' + loc )
|
||||||
|
self.addLink( host, switch )
|
||||||
|
# Connect switches
|
||||||
|
for i in range( 0, x ):
|
||||||
|
for j in range( 0, y ):
|
||||||
|
sw1 = switches[ i, j ]
|
||||||
|
sw2 = switches[ i, ( j + 1 ) % y ]
|
||||||
|
sw3 = switches[ ( i + 1 ) % x, j ]
|
||||||
|
self.addLink( sw1, sw2 )
|
||||||
|
self.addLink( sw1, sw3 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user