mininet / mininet / topolib.py @ b5962e8e
History | View | Annotate | Download (2.46 KB)
1 |
"Library of potentially useful topologies for Mininet"
|
---|---|
2 |
|
3 |
from mininet.topo import Topo |
4 |
from mininet.net import Mininet |
5 |
|
6 |
class TreeTopo( Topo ): |
7 |
"Topology for a tree network with a given depth and fanout."
|
8 |
|
9 |
def __init__( self, depth=1, fanout=2 ): |
10 |
super( TreeTopo, self ).__init__() |
11 |
# Numbering: h1..N, s1..M
|
12 |
self.hostNum = 1 |
13 |
self.switchNum = 1 |
14 |
# Build topology
|
15 |
self.addTree( depth, fanout )
|
16 |
|
17 |
def addTree( self, depth, fanout ): |
18 |
"""Add a subtree starting with node n.
|
19 |
returns: last node added"""
|
20 |
isSwitch = depth > 0
|
21 |
if isSwitch:
|
22 |
node = self.addSwitch( 's%s' % self.switchNum ) |
23 |
self.switchNum += 1 |
24 |
for _ in range( fanout ): |
25 |
child = self.addTree( depth - 1, fanout ) |
26 |
self.addLink( node, child )
|
27 |
else:
|
28 |
node = self.addHost( 'h%s' % self.hostNum ) |
29 |
self.hostNum += 1 |
30 |
return node
|
31 |
|
32 |
|
33 |
def TreeNet( depth=1, fanout=2, **kwargs ): |
34 |
"Convenience function for creating tree networks."
|
35 |
topo = TreeTopo( depth, fanout ) |
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 |
|