Revision b5962e8e mininet/topolib.py
mininet/topolib.py | ||
---|---|---|
34 | 34 |
"Convenience function for creating tree networks." |
35 | 35 |
topo = TreeTopo( depth, fanout ) |
36 | 36 |
return Mininet( topo, **kwargs ) |
37 |
|
|
38 |
|
|
39 |
class TorusTopo( Topo ): |
|
40 |
"""2-D Torus topology |
|
41 |
WARNING: this topology has LOOPS and WILL NOT WORK |
|
42 |
with the default controller or any Ethernet bridge |
|
43 |
without STP turned on! It can be used with STP, e.g.: |
|
44 |
# mn --topo torus,3,3 --switch lxbr,stp=1 --test pingall""" |
|
45 |
def __init__( self, x, y, *args, **kwargs ): |
|
46 |
Topo.__init__( self, *args, **kwargs ) |
|
47 |
if x < 3 or y < 3: |
|
48 |
raise Exception( 'Please use 3x3 or greater for compatibility ' |
|
49 |
'with Mininet 2.1.0' ) |
|
50 |
hosts, switches, dpid = {}, {}, 0 |
|
51 |
# Create and wire interior |
|
52 |
for i in range( 0, x ): |
|
53 |
for j in range( 0, y ): |
|
54 |
loc = '%dx%d' % ( i + 1, j + 1 ) |
|
55 |
# dpid cannot be zero for OVS |
|
56 |
dpid = ( i + 1 ) * 256 + ( j + 1 ) |
|
57 |
switch = switches[ i, j ] = self.addSwitch( 's' + loc, dpid='%016x' % dpid ) |
|
58 |
host = hosts[ i, j ] = self.addHost( 'h' + loc ) |
|
59 |
self.addLink( host, switch ) |
|
60 |
# Connect switches |
|
61 |
for i in range( 0, x ): |
|
62 |
for j in range( 0, y ): |
|
63 |
sw1 = switches[ i, j ] |
|
64 |
sw2 = switches[ i, ( j + 1 ) % y ] |
|
65 |
sw3 = switches[ ( i + 1 ) % x, j ] |
|
66 |
self.addLink( sw1, sw2 ) |
|
67 |
self.addLink( sw1, sw3 ) |
|
68 |
|
|
69 |
|
|
70 |
|
Also available in: Unified diff