Fix NOX controller so that mn --controller nox,pyswitch,... works.

This commit is contained in:
Bob Lantz
2012-03-08 22:07:19 -08:00
parent 0dbfd3a636
commit 2db4268ba8
2 changed files with 19 additions and 11 deletions
+13 -7
View File
@@ -18,7 +18,7 @@ import time
from mininet.clean import cleanup from mininet.clean import cleanup
from mininet.cli import CLI from mininet.cli import CLI
from mininet.log import lg, LEVELS, info from mininet.log import lg, LEVELS, info, warn
from mininet.net import Mininet, init from mininet.net import Mininet, init
from mininet.node import Host, CPULimitedHost, Controller, NOX from mininet.node import Host, CPULimitedHost, Controller, NOX
from mininet.node import RemoteController, UserSwitch, OVSKernelSwitch from mininet.node import RemoteController, UserSwitch, OVSKernelSwitch
@@ -29,19 +29,25 @@ from mininet.util import makeNumeric, custom
def customNode( constructors, argStr ): def customNode( constructors, argStr ):
"Return custom Node constructor based on argStr" "Return custom Node constructor based on argStr"
cname, noargs, kwargs = splitArgs( argStr ) cname, newargs, kwargs = splitArgs( argStr )
constructor = constructors.get( cname, None ) constructor = constructors.get( cname, None )
if noargs: #if args:
raise Exception( "please specify keyword arguments for " + cname ) # raise Exception( "please specify keyword arguments for " + cname )
if not constructor: if not constructor:
raise Exception( "error: %s is unknown - please specify one of %s" % raise Exception( "error: %s is unknown - please specify one of %s" %
( cname, constructors.keys() ) ) ( cname, constructors.keys() ) )
def custom( *args, **params ): def custom( name, *args, **params ):
params.update( kwargs ) params.update( kwargs )
# print 'CONSTRUCTOR', constructor, 'ARGS', args, 'PARAMS', params if not newargs:
return constructor( *args, **params ) return constructor( name, *args, **params )
if args:
warn( 'warning: %s replacing %s with %s\n',
constructor, args, newargs )
return constructor( name, *newargs, **params )
return custom return custom
# built in topologies, created only when run # built in topologies, created only when run
TOPODEF = 'minimal' TOPODEF = 'minimal'
TOPOS = { 'minimal': lambda: SingleSwitchTopo( k=2 ), TOPOS = { 'minimal': lambda: SingleSwitchTopo( k=2 ),
+6 -4
View File
@@ -50,7 +50,7 @@ import signal
import select import select
from subprocess import Popen, PIPE, STDOUT from subprocess import Popen, PIPE, STDOUT
from mininet.log import info, error, debug from mininet.log import info, error, warn, debug
from mininet.util import quietRun, errRun, errFail, moveIntf, isShellBuiltin from mininet.util import quietRun, errRun, errFail, moveIntf, isShellBuiltin
from mininet.util import numCores from mininet.util import numCores
from mininet.moduledeps import moduleDeps, pathCheck, OVS_KMOD, OF_KMOD, TUN from mininet.moduledeps import moduleDeps, pathCheck, OVS_KMOD, OF_KMOD, TUN
@@ -864,13 +864,15 @@ class ControllerParams( object ):
class NOX( Controller ): class NOX( Controller ):
"Controller to run a NOX application." "Controller to run a NOX application."
def __init__( self, name, noxArgs=[], **kwargs ): def __init__( self, name, *noxArgs, **kwargs ):
"""Init. """Init.
name: name to give controller name: name to give controller
noxArgs: list of args, or single arg, to pass to NOX""" noxArgs: arguments (strings) to pass to NOX"""
if not noxArgs: if not noxArgs:
warn( 'warning: no NOX modules specified; '
'running packetdump only\n' )
noxArgs = [ 'packetdump' ] noxArgs = [ 'packetdump' ]
elif type( noxArgs ) != list: elif type( noxArgs ) not in ( list, tuple ):
noxArgs = [ noxArgs ] noxArgs = [ noxArgs ]
if 'NOX_CORE_DIR' not in os.environ: if 'NOX_CORE_DIR' not in os.environ: