From 72fd120dc85b86f4f1477337223fac85a5cb2171 Mon Sep 17 00:00:00 2001 From: Cody Burkard <cody@onlab.us> Date: Fri, 11 Jul 2014 19:04:20 -0700 Subject: [PATCH] added default controller class --- bin/mn | 5 +++-- mininet/net.py | 7 ++++--- mininet/node.py | 9 +++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/bin/mn b/bin/mn index 71c76ecf..3d01a583 100755 --- a/bin/mn +++ b/bin/mn @@ -25,7 +25,7 @@ from mininet.cli import CLI from mininet.log import lg, LEVELS, info, debug, error from mininet.net import Mininet, MininetWithControlNet, VERSION from mininet.node import ( Host, CPULimitedHost, Controller, OVSController, - NOX, RemoteController, UserSwitch, OVSKernelSwitch, + NOX, RemoteController, DefaultController, UserSwitch, OVSKernelSwitch, OVSLegacyKernelSwitch, IVSSwitch ) from mininet.link import Link, TCLink from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo @@ -53,11 +53,12 @@ HOSTS = { 'proc': Host, 'rt': custom( CPULimitedHost, sched='rt' ), 'cfs': custom( CPULimitedHost, sched='cfs' ) } -CONTROLLERDEF = 'ovsc' +CONTROLLERDEF = 'default' CONTROLLERS = { 'ref': Controller, 'ovsc': OVSController, 'nox': NOX, 'remote': RemoteController, + 'default': DefaultController, 'none': lambda name: None } LINKDEF = 'default' diff --git a/mininet/net.py b/mininet/net.py index 8edaee3d..d285abce 100755 --- a/mininet/net.py +++ b/mininet/net.py @@ -95,7 +95,7 @@ from mininet.cli import CLI from mininet.log import info, error, debug, output -from mininet.node import Host, OVSKernelSwitch, Controller +from mininet.node import Host, OVSKernelSwitch, DefaultController, Controller from mininet.link import Link, Intf from mininet.util import quietRun, fixLimits, numCores, ensureRoot from mininet.util import macColonHex, ipStr, ipParse, netParse, ipAdd @@ -213,16 +213,17 @@ def addController( self, name='c0', controller=None, **params ): if not controller: controller = self.controller # Construct new controller if one is not given - if isinstance(name, Controller): + if isinstance( name, Controller ): controller_new = name # Pylint thinks controller is a str() # pylint: disable=E1103 name = controller_new.name # pylint: enable=E1103 else: + # bookmark controller_new = controller( name, **params ) # Add new controller to net - if controller_new: # allow controller-less setups + if controller_new: # allow controller-less setups self.controllers.append( controller_new ) self.nameToNode[ name ] = controller_new return controller_new diff --git a/mininet/node.py b/mininet/node.py index 568d9863..609b6e50 100644 --- a/mininet/node.py +++ b/mininet/node.py @@ -1278,6 +1278,15 @@ def __repr__( self ): self.__class__.__name__, self.name, self.IP(), self.port, self.pid ) +class DefaultController( Controller ): + "find any controller that is available and run it" + def __init__( self, name, **kwargs ): + "search for any installed controller" + controllers = [ 'controller', 'ovs-controller', 'test-controller' ] # , 'pox', 'ryu' ] # test-controller is the important part + for c in controllers: + if quietRun( "which " + c ): + Controller.__init__( self, name, controller=c, **kwargs ) + break class OVSController( Controller ): "Open vSwitch controller" -- GitLab