From 72fd120dc85b86f4f1477337223fac85a5cb2171 Mon Sep 17 00:00:00 2001 From: Cody Burkard Date: Fri, 11 Jul 2014 19:04:20 -0700 Subject: [PATCH 1/6] 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 71c76ec..3d01a58 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 8edaee3..d285abc 100755 --- a/mininet/net.py +++ b/mininet/net.py @@ -95,7 +95,7 @@ from itertools import chain, groupby 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 @@ class Mininet( object ): 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 568d986..609b6e5 100644 --- a/mininet/node.py +++ b/mininet/node.py @@ -1278,6 +1278,15 @@ class Controller( Node ): 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" From 796b281bf1955022b4bac8e16b976e0e0ee277ea Mon Sep 17 00:00:00 2001 From: Cody Burkard Date: Mon, 14 Jul 2014 13:09:41 -0700 Subject: [PATCH 2/6] fixed command parameter --- mininet/node.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mininet/node.py b/mininet/node.py index 609b6e5..2680265 100644 --- a/mininet/node.py +++ b/mininet/node.py @@ -1282,10 +1282,11 @@ 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 + controllers = [ 'controller', 'ovs-controller', + 'test-controller' ] for c in controllers: if quietRun( "which " + c ): - Controller.__init__( self, name, controller=c, **kwargs ) + Controller.__init__( self, name, command=c, **kwargs ) break class OVSController( Controller ): From a19cc915373c22bddb2e73360a6e165cf18e5955 Mon Sep 17 00:00:00 2001 From: Cody Burkard Date: Mon, 14 Jul 2014 14:09:39 -0700 Subject: [PATCH 3/6] set DefaultController as the mininet class default --- mininet/net.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mininet/net.py b/mininet/net.py index d285abc..cfd8d08 100755 --- a/mininet/net.py +++ b/mininet/net.py @@ -108,7 +108,7 @@ class Mininet( object ): "Network emulation with hosts spawned in network namespaces." def __init__( self, topo=None, switch=OVSKernelSwitch, host=Host, - controller=Controller, link=Link, intf=Intf, + controller=DefaultController, link=Link, intf=Intf, build=True, xterms=False, cleanup=False, ipBase='10.0.0.0/8', inNamespace=False, autoSetMacs=False, autoStaticArp=False, autoPinCpus=False, From 5ac3cde2bdeec58156f2d34a5ea4de710662b77e Mon Sep 17 00:00:00 2001 From: Cody Burkard Date: Tue, 15 Jul 2014 15:48:18 -0700 Subject: [PATCH 4/6] restructured defaultController into a function --- bin/mn | 2 +- mininet/node.py | 27 +++++++++++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/bin/mn b/bin/mn index 3d01a58..04761da 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, DefaultController, UserSwitch, OVSKernelSwitch, + NOX, DefaultController, RemoteController, UserSwitch, OVSKernelSwitch, OVSLegacyKernelSwitch, IVSSwitch ) from mininet.link import Link, TCLink from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo diff --git a/mininet/node.py b/mininet/node.py index 2680265..41b2d45 100644 --- a/mininet/node.py +++ b/mininet/node.py @@ -1277,23 +1277,19 @@ class Controller( Node ): return '<%s %s: %s:%s pid=%s> ' % ( 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' ] - for c in controllers: - if quietRun( "which " + c ): - Controller.__init__( self, name, command=c, **kwargs ) - break + @classmethod + def isAvailable( self ): + return quietRun( 'which controller' ) class OVSController( Controller ): "Open vSwitch controller" def __init__( self, name, command='ovs-controller', **kwargs ): + if quietRun( 'which test-controller' ): + command = 'test-controller' Controller.__init__( self, name, command=command, **kwargs ) - + @classmethod + def isAvailable( self ): + return quietRun( 'which ovs-controller' ) or quietRun( 'which test-controller' ) class NOX( Controller ): "Controller to run a NOX application." @@ -1348,3 +1344,10 @@ class RemoteController( Controller ): if 'Connected' not in listening: warn( "Unable to contact the remote controller" " at %s:%d\n" % ( self.ip, self.port ) ) + + +def DefaultController( name, order=[ Controller, OVSController ], **kwargs ): + "find a default controller for mininet" + for controller in order: + if controller.isAvailable(): + return controller( name, **kwargs ) From 00d1963484af0b0252e7afd5b014a91598f6a95f Mon Sep 17 00:00:00 2001 From: Cody Burkard Date: Tue, 15 Jul 2014 18:21:56 -0700 Subject: [PATCH 5/6] revised comment on defaultController function --- mininet/node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mininet/node.py b/mininet/node.py index 41b2d45..d9052fa 100644 --- a/mininet/node.py +++ b/mininet/node.py @@ -1347,7 +1347,7 @@ class RemoteController( Controller ): def DefaultController( name, order=[ Controller, OVSController ], **kwargs ): - "find a default controller for mininet" + "find any controller that is available and run it" for controller in order: if controller.isAvailable(): return controller( name, **kwargs ) From 779ea5f0ad2905acd977c2bdcd4e35915d4491d8 Mon Sep 17 00:00:00 2001 From: Cody Burkard Date: Tue, 15 Jul 2014 19:39:50 -0700 Subject: [PATCH 6/6] removed bookmark --- mininet/net.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mininet/net.py b/mininet/net.py index cfd8d08..afe8096 100755 --- a/mininet/net.py +++ b/mininet/net.py @@ -220,7 +220,6 @@ class Mininet( object ): 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