Revert "Add ability to pause and resume any node"
This reverts commit 07aad11081.
When the semantics are clear, functionality like this will get added back to
Mininet.
Conflicts:
mininet/node.py
This commit is contained in:
@@ -161,26 +161,6 @@ class CLI( Cmd ):
|
|||||||
else:
|
else:
|
||||||
self.mn.configLinkStatus( *args )
|
self.mn.configLinkStatus( *args )
|
||||||
|
|
||||||
def do_pause( self, args ):
|
|
||||||
"Temporarily bring a node down."
|
|
||||||
args = args.split()
|
|
||||||
if len(args) != 1:
|
|
||||||
error( 'invalid number of args: pause [node]\n' )
|
|
||||||
elif args[0] not in self.nodemap:
|
|
||||||
error( 'invalid node: %s\n' % args[0] )
|
|
||||||
else:
|
|
||||||
self.nodemap[ args[ 0 ] ].pause()
|
|
||||||
|
|
||||||
def do_resume( self, args ):
|
|
||||||
"Temporarily bring a node up."
|
|
||||||
args = args.split()
|
|
||||||
if len(args) != 1:
|
|
||||||
error( 'invalid number of args: resume [node]\n' )
|
|
||||||
elif args[0] not in self.nodemap:
|
|
||||||
error( 'invalid node: %s\n' % args[0] )
|
|
||||||
else:
|
|
||||||
self.nodemap[ args[ 0 ] ].resume()
|
|
||||||
|
|
||||||
def do_exit( self, args ):
|
def do_exit( self, args ):
|
||||||
"Exit"
|
"Exit"
|
||||||
return 'exited by user command'
|
return 'exited by user command'
|
||||||
|
|||||||
@@ -365,12 +365,6 @@ class Node( object ):
|
|||||||
"Check if an interface is up."
|
"Check if an interface is up."
|
||||||
return 'UP' in self.cmd( 'ifconfig ' + intf )
|
return 'UP' in self.cmd( 'ifconfig ' + intf )
|
||||||
|
|
||||||
def modIntfs( self, action ):
|
|
||||||
"""Bring all interfaces up or down.
|
|
||||||
action: string to pass to ifconfig"""
|
|
||||||
for intf in self.intfs.values():
|
|
||||||
self.cmd( [ 'ifconfig', intf, action ] )
|
|
||||||
|
|
||||||
# Other methods
|
# Other methods
|
||||||
def __str__( self ):
|
def __str__( self ):
|
||||||
result = self.name + ':'
|
result = self.name + ':'
|
||||||
@@ -384,18 +378,6 @@ class Node( object ):
|
|||||||
class Host( Node ):
|
class Host( Node ):
|
||||||
"A host is simply a Node."
|
"A host is simply a Node."
|
||||||
|
|
||||||
# Ideally, pausing a host would pause the bash process corresponding to
|
|
||||||
# that host. However, when one tries to run a command on a paused host,
|
|
||||||
# it leads to an exception later. For now, disable interfaces to "pause"
|
|
||||||
# the host.
|
|
||||||
|
|
||||||
def pause( self ):
|
|
||||||
"Disable interfaces."
|
|
||||||
self.modIntfs('down')
|
|
||||||
|
|
||||||
def resume( self ):
|
|
||||||
"Re-enable interfaces"
|
|
||||||
self.modIntfs('up')
|
|
||||||
|
|
||||||
class Switch( Node ):
|
class Switch( Node ):
|
||||||
"""A Switch is a Node that is running (or has execed?)
|
"""A Switch is a Node that is running (or has execed?)
|
||||||
@@ -455,17 +437,6 @@ class UserSwitch( Switch ):
|
|||||||
self.cmd( 'kill %ofprotocol' )
|
self.cmd( 'kill %ofprotocol' )
|
||||||
self.deleteIntfs()
|
self.deleteIntfs()
|
||||||
|
|
||||||
def pause( self ):
|
|
||||||
"Pause ofprotocol and ofdatapath."
|
|
||||||
self.cmd( 'kill -STOP %ofdatapath' )
|
|
||||||
self.cmd( 'kill -STOP %ofprotocol' )
|
|
||||||
|
|
||||||
def resume( self ):
|
|
||||||
"Resume ofprotocol and datapath."
|
|
||||||
self.cmd( 'kill -CONT %ofdatapath' )
|
|
||||||
self.cmd( 'kill -CONT %ofprotocol' )
|
|
||||||
|
|
||||||
|
|
||||||
class KernelSwitch( Switch ):
|
class KernelSwitch( Switch ):
|
||||||
"""Kernel-space switch.
|
"""Kernel-space switch.
|
||||||
Currently only works in root namespace."""
|
Currently only works in root namespace."""
|
||||||
@@ -518,18 +489,6 @@ class KernelSwitch( Switch ):
|
|||||||
self.cmd( 'kill %ofprotocol' )
|
self.cmd( 'kill %ofprotocol' )
|
||||||
self.deleteIntfs()
|
self.deleteIntfs()
|
||||||
|
|
||||||
# Since kernel threads cannot receive signals like user-space processes,
|
|
||||||
# disabling the interfaces and ofdatapath is our workaround.
|
|
||||||
|
|
||||||
def pause( self ):
|
|
||||||
"Disable interfaces and pause ofprotocol."
|
|
||||||
self.cmd( 'kill -STOP %ofprotocol' )
|
|
||||||
self.modIntfs('down')
|
|
||||||
|
|
||||||
def resume( self ):
|
|
||||||
"Re-enable interfaces and resume ofprotocol."
|
|
||||||
self.cmd( 'kill -CONT %ofprotocol' )
|
|
||||||
self.modIntfs('up')
|
|
||||||
|
|
||||||
class OVSKernelSwitch( Switch ):
|
class OVSKernelSwitch( Switch ):
|
||||||
"""Open VSwitch kernel-space switch.
|
"""Open VSwitch kernel-space switch.
|
||||||
@@ -584,19 +543,6 @@ class OVSKernelSwitch( Switch ):
|
|||||||
self.cmd( 'kill %ovs-openflowd' )
|
self.cmd( 'kill %ovs-openflowd' )
|
||||||
self.deleteIntfs()
|
self.deleteIntfs()
|
||||||
|
|
||||||
# Since kernel threads cannot receive signals like user-space processes,
|
|
||||||
# disabling the interfaces and ovs-openflowd is our workaround.
|
|
||||||
|
|
||||||
def pause( self ):
|
|
||||||
"Disable interfaces and pause ovs-openflowd."
|
|
||||||
self.cmd( 'kill -STOP %ovs-openflowd' )
|
|
||||||
self.modIntfs('down')
|
|
||||||
|
|
||||||
def resume( self ):
|
|
||||||
"Re-enable interfaces and resume ovs-openflowd."
|
|
||||||
self.cmd( 'kill -CONT %ovs-openflowd' )
|
|
||||||
self.modIntfs('up')
|
|
||||||
|
|
||||||
|
|
||||||
class Controller( Node ):
|
class Controller( Node ):
|
||||||
"""A Controller is a Node that is running (or has execed?) an
|
"""A Controller is a Node that is running (or has execed?) an
|
||||||
@@ -627,14 +573,6 @@ class Controller( Node ):
|
|||||||
self.cmd( 'kill %' + self.controller )
|
self.cmd( 'kill %' + self.controller )
|
||||||
self.terminate()
|
self.terminate()
|
||||||
|
|
||||||
def pause( self ):
|
|
||||||
"Pause controller."
|
|
||||||
self.cmd( 'kill -STOP %' + self.controller )
|
|
||||||
|
|
||||||
def resume( self ):
|
|
||||||
"Resume controller."
|
|
||||||
self.cmd( 'kill -CONT %' + self.controller )
|
|
||||||
|
|
||||||
def IP( self, intf=None ):
|
def IP( self, intf=None ):
|
||||||
"Return IP address of the Controller"
|
"Return IP address of the Controller"
|
||||||
ip = Node.IP( self, intf=intf )
|
ip = Node.IP( self, intf=intf )
|
||||||
@@ -642,7 +580,6 @@ class Controller( Node ):
|
|||||||
ip = self.defaultIP
|
ip = self.defaultIP
|
||||||
return ip
|
return ip
|
||||||
|
|
||||||
|
|
||||||
class ControllerParams( object ):
|
class ControllerParams( object ):
|
||||||
"Container for controller IP parameters."
|
"Container for controller IP parameters."
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user