Second crack at a ripcordtest.py that actually works.
ripcord.py was a name conflict - ugh! This one creates a network successfully, but ping doesn't work with nox out of the box at least.
This commit is contained in:
@@ -1,50 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
"A FatTree network, using Brandon Heller's ripcord system."
|
|
||||||
|
|
||||||
from ripcord.topo import StructuredNode, StructuredNodeSpec, FatTreeTopo, VL2T
|
|
||||||
opo
|
|
||||||
|
|
||||||
from mininet import Controller, Network, Host, pingTest
|
|
||||||
|
|
||||||
class NoxController( Controller ):
|
|
||||||
"A customized Controller that uses NOX."
|
|
||||||
def __init__( self, name, **kwargs ):
|
|
||||||
Controller.__init__( self, name,
|
|
||||||
controller='nox_core', cargs='-i ptcp pyswitch',
|
|
||||||
cdir='/usr/local/bin', **kwargs)
|
|
||||||
|
|
||||||
class FatTree( Network ):
|
|
||||||
"A customized Network that uses ripcord's FatTree."
|
|
||||||
def __init__( self, **kwargs ):
|
|
||||||
Network.__init__( self, depth, **kwargs )
|
|
||||||
def makeNetwork( self, controller ):
|
|
||||||
ft = FatTreeTopo( depth )
|
|
||||||
graph = ft.g
|
|
||||||
switches = []
|
|
||||||
hosts = []
|
|
||||||
hostnames = nameGen( 'h0' )
|
|
||||||
switchnames = nameGen( 's0' )
|
|
||||||
graphToMini = {}
|
|
||||||
miniToGraph = {}
|
|
||||||
# Create nodes
|
|
||||||
for graphNode in graph.nodes():
|
|
||||||
print "found node", graphNode
|
|
||||||
isLeaf = len( graph.neighbors( graphNode ) ) = 1
|
|
||||||
if isLeaf:
|
|
||||||
mininetNode = Node( hostnames.next() )
|
|
||||||
hosts += [ mininetNode ]
|
|
||||||
else:
|
|
||||||
mininetNode = self.Switch( switchnames.next() )
|
|
||||||
switches += [ mininetNode ]
|
|
||||||
miniToGraph[ mininetNode ] = graphNode
|
|
||||||
graphToMini[ graphNode ] = mininetNode
|
|
||||||
# Create Links
|
|
||||||
for switch in switches:
|
|
||||||
for neighbor in miniToGraph[ switches ]:
|
|
||||||
makeLink( switch, graphToMini[ neighbor ] )
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
init()
|
|
||||||
network = FatTree( depth=4, kernel=True, Controller=NoxController)
|
|
||||||
network.run( pingTest )
|
|
||||||
Executable
+61
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
"A FatTree network, using Brandon Heller's ripcord system."
|
||||||
|
|
||||||
|
import ripcord
|
||||||
|
from ripcord.topo import FatTreeTopo
|
||||||
|
|
||||||
|
from mininet import init, Controller, Network, Host, nameGen, Cli
|
||||||
|
from mininet import createLink, flush
|
||||||
|
|
||||||
|
class NoxController( Controller ):
|
||||||
|
"A customized Controller that uses NOX."
|
||||||
|
def __init__( self, name, **kwargs ):
|
||||||
|
Controller.__init__( self, name,
|
||||||
|
controller='nox_core', cargs='-i ptcp pyswitch',
|
||||||
|
cdir='/usr/local/bin', **kwargs)
|
||||||
|
|
||||||
|
class FatTree( Network ):
|
||||||
|
"A customized Network that uses ripcord's FatTree."
|
||||||
|
def __init__( self, depth, **kwargs ):
|
||||||
|
self.depth = depth
|
||||||
|
Network.__init__( self, **kwargs )
|
||||||
|
def makeNet( self, controller ):
|
||||||
|
ft = FatTreeTopo( self.depth )
|
||||||
|
graph = ft.g
|
||||||
|
switches = []
|
||||||
|
hosts = []
|
||||||
|
hostnames = nameGen( 'h' )
|
||||||
|
switchnames = nameGen( 's' )
|
||||||
|
dpnames = nameGen( 'nl:')
|
||||||
|
graphToMini = {}
|
||||||
|
miniToGraph = {}
|
||||||
|
# Create nodes
|
||||||
|
for graphNode in graph.nodes():
|
||||||
|
isLeaf = len( graph.neighbors( graphNode ) ) == 1
|
||||||
|
if isLeaf:
|
||||||
|
mininetNode = Host( hostnames.next() )
|
||||||
|
hosts += [ mininetNode ]
|
||||||
|
else:
|
||||||
|
mininetNode = self.Switch( switchnames.next(), dpnames.next() )
|
||||||
|
switches += [ mininetNode ]
|
||||||
|
print mininetNode.name, ; flush()
|
||||||
|
miniToGraph[ mininetNode ] = graphNode
|
||||||
|
graphToMini[ graphNode ] = mininetNode
|
||||||
|
print
|
||||||
|
print "*** Creating links"
|
||||||
|
for switch in switches:
|
||||||
|
currentNeighbors = [ switch.connection[ intf ][ 0 ]
|
||||||
|
for intf in switch.intfs ]
|
||||||
|
for neighbor in graph.neighbors( miniToGraph[ switch ] ):
|
||||||
|
miniNeighbor = graphToMini[ neighbor ]
|
||||||
|
if miniNeighbor not in currentNeighbors:
|
||||||
|
print ".", ; flush()
|
||||||
|
createLink( switch, graphToMini[ neighbor ] )
|
||||||
|
print
|
||||||
|
return switches, hosts
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
init()
|
||||||
|
network = FatTree( depth=4, kernel=True, Controller=NoxController)
|
||||||
|
network.run( Cli )
|
||||||
@@ -451,7 +451,6 @@ class Network( object ):
|
|||||||
kernel=True,
|
kernel=True,
|
||||||
Controller=Controller, Switch=Switch,
|
Controller=Controller, Switch=Switch,
|
||||||
hostIpGen=ipGen, hostIpStart=( 192, 168, 123, 1 ) ):
|
hostIpGen=ipGen, hostIpStart=( 192, 168, 123, 1 ) ):
|
||||||
print "NETWORK: Controller=", Controller
|
|
||||||
self.kernel = kernel
|
self.kernel = kernel
|
||||||
self.Controller = Controller
|
self.Controller = Controller
|
||||||
self.Switch = Switch
|
self.Switch = Switch
|
||||||
|
|||||||
Reference in New Issue
Block a user