Minor tweaks and corrections.
Added commentary on control network to mininet.py. Hopefully fixed linearbandwidth.py for real.
This commit is contained in:
+1
-1
@@ -13,5 +13,5 @@ class NoxController( Controller ):
|
||||
|
||||
if __name__ == '__main__':
|
||||
init()
|
||||
network = GridNet( 2, 2, kernel=True, Controller=NoxController)
|
||||
network = GridNet( 2, 2, kernel=True, Controller=NoxController )
|
||||
network.run( Cli )
|
||||
|
||||
@@ -26,7 +26,7 @@ def linearBandwidthTest():
|
||||
results[ datapath ] = []
|
||||
for switchCount in switchCounts:
|
||||
print "*** Creating linear network of size", switchCount
|
||||
network = LinearNet( switchCount, k)
|
||||
network = LinearNet( switchCount, kernel=k)
|
||||
bandwidth = network.run( iperfTest )
|
||||
results[ datapath ] += [ ( switchCount, bandwidth ) ]
|
||||
|
||||
|
||||
+1
-1
@@ -13,5 +13,5 @@ class NoxController( Controller ):
|
||||
|
||||
if __name__ == '__main__':
|
||||
init()
|
||||
network = TreeNet( depth=2, fanout=4, kernel=True, Controller=NoxController)
|
||||
network = TreeNet( depth=2, fanout=4, kernel=True, Controller=NoxController )
|
||||
network.run( Cli )
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"""
|
||||
Build a simple network from scratch, using mininet primitives.
|
||||
This is more complicated than using the higher-level classes,
|
||||
but it exposes the configuration details and allows cusomization.
|
||||
but it exposes the configuration details and allows customization.
|
||||
"""
|
||||
|
||||
from mininet import init, Node, createLink
|
||||
|
||||
@@ -3,15 +3,19 @@
|
||||
"""
|
||||
Build a simple network from scratch, using mininet primitives.
|
||||
This is more complicated than using the higher-level classes,
|
||||
but it exposes the configuration details and allows cusomization.
|
||||
but it exposes the configuration details and allows customization.
|
||||
|
||||
This version uses the user datapath.
|
||||
"""
|
||||
|
||||
from mininet import init, Node, createLink
|
||||
|
||||
def scratchNet( cname='controller', cargs='ptcp:'):
|
||||
def scratchNetUser( cname='controller', cargs='ptcp:'):
|
||||
# Create Network
|
||||
# It's not strictly necessary for the controller and switches
|
||||
# to be in separate namespaces. For performance, they probably
|
||||
# should be in the root namespace. However, it's interesting to
|
||||
# see how they could work even if they are in separate namespaces.
|
||||
controller = Node( 'c0' )
|
||||
switch = Node( 's0')
|
||||
h0 = Node( 'h0' )
|
||||
@@ -40,4 +44,4 @@ def scratchNet( cname='controller', cargs='ptcp:'):
|
||||
|
||||
if __name__ == '__main__':
|
||||
init()
|
||||
scratchNet()
|
||||
scratchNetUser()
|
||||
|
||||
+30
-13
@@ -50,9 +50,8 @@ Thoughts/TBD:
|
||||
For the moment, specifying configurations and tests in Python
|
||||
is straightforward and relatively concise.
|
||||
Soon, we may want to split the various subsystems (core,
|
||||
cli, tests, etc.) into multiple modules.
|
||||
We don't support nox nicely just yet - you have to hack this file
|
||||
or subclass things aggressively.
|
||||
topology/network, cli, tests, etc.) into multiple modules.
|
||||
Currently nox support is in nox.py.
|
||||
We'd like to support OpenVSwitch as well as the reference
|
||||
implementation.
|
||||
|
||||
@@ -396,9 +395,26 @@ def nameGen( prefix ):
|
||||
i = 0
|
||||
while True: yield prefix + `i`; i += 1
|
||||
|
||||
# Control network support
|
||||
# For the user datapath, we create an explicit control network.
|
||||
# Note: Instead of routing, we could bridge or use "in-band" control
|
||||
# Control network support:
|
||||
#
|
||||
# Create an explicit control network. Currently this is only
|
||||
# used by the user datapath configuration.
|
||||
#
|
||||
# Notes:
|
||||
#
|
||||
# 1. If the controller and switches are in the same (e.g. root)
|
||||
# namespace, they can just use the loopback connection.
|
||||
# We may wish to do this for the user datapath as well as the
|
||||
# kernel datapath.
|
||||
#
|
||||
# 2. If we can get unix domain sockets to work, we can use them
|
||||
# instead of an explicit control network.
|
||||
#
|
||||
# 3. Instead of routing, we could bridge or use "in-band" control.
|
||||
#
|
||||
# 4. Even if we dispense with this in general, it could still be
|
||||
# useful for people who wish to simulate a separate control
|
||||
# network (since real networks may need one!)
|
||||
|
||||
def configureRoutedControlNetwork( controller, switches, ips):
|
||||
"""Configure a routed control network on controller and switches,
|
||||
@@ -542,7 +558,7 @@ class TreeNet( Network ):
|
||||
def __init__( self, depth, fanout, **kwargs):
|
||||
self.depth, self.fanout = depth, fanout
|
||||
Network.__init__( self, **kwargs )
|
||||
def treeNet( self, controller, depth, fanout, kernel=True, snames=None,
|
||||
def treeNet( self, controller, depth, fanout, snames=None,
|
||||
hnames=None, dpnames=None ):
|
||||
"""Return a tree network of the given depth and fanout as a triple:
|
||||
( root, switches, hosts ), using the given switch, host and
|
||||
@@ -555,21 +571,21 @@ class TreeNet( Network ):
|
||||
host = Host( hnames.next() )
|
||||
print host.name, ; flush()
|
||||
return host, [], [ host ]
|
||||
dp = dpnames.next() if kernel else None
|
||||
dp = dpnames.next() if self.kernel else None
|
||||
switch = Switch( snames.next(), dp )
|
||||
if not kernel: createLink( switch, controller )
|
||||
if not self.kernel: createLink( switch, controller )
|
||||
print switch.name, ; flush()
|
||||
switches, hosts = [ switch ], []
|
||||
for i in range( 0, fanout ):
|
||||
child, slist, hlist = self.treeNet( controller,
|
||||
depth - 1, fanout, kernel, snames, hnames, dpnames )
|
||||
depth - 1, fanout, snames, hnames, dpnames )
|
||||
createLink( switch, child )
|
||||
switches += slist
|
||||
hosts += hlist
|
||||
return switch, switches, hosts
|
||||
def makeNet( self, controller ):
|
||||
root, switches, hosts = self.treeNet( controller,
|
||||
self.depth, self.fanout, self.kernel)
|
||||
self.depth, self.fanout )
|
||||
return switches, hosts
|
||||
|
||||
# Grid network
|
||||
@@ -630,9 +646,10 @@ class GridNet( Network ):
|
||||
return switches, hosts
|
||||
|
||||
class LinearNet( GridNet ):
|
||||
def __init__( self, switchCount, kernel=True ):
|
||||
"A network consisting of two hosts connected by a string of switches."
|
||||
def __init__( self, switchCount, **kwargs ):
|
||||
self.switchCount = switchCount
|
||||
GridNet.__init__( self, switchCount, 1, linear=True )
|
||||
GridNet.__init__( self, switchCount, 1, linear=True, **kwargs )
|
||||
|
||||
# Tests
|
||||
|
||||
|
||||
Reference in New Issue
Block a user