Skip to content
Snippets Groups Projects
Commit 4e644d74 authored by lantz's avatar lantz
Browse files

Merge pull request #450 from mininet/sw-cmd

adding deleteIntfs option to switches and corresponding CLI command
parents 596fd9d0 23dfbe4a
No related branches found
No related tags found
No related merge requests found
......@@ -351,6 +351,26 @@ def do_links( self, line ):
for link in self.mn.links:
print link, link.status()
def do_switch( self, line ):
"Starts or stops a switch"
args = line.split()
if len(args) != 2:
error( 'invalid number of args: switch <switch name> {start, stop}\n' )
return
sw = args[ 0 ]
command = args[ 1 ]
if sw not in self.mn or self.mn.get( sw ) not in self.mn.switches :
error( 'invalid switch: %s\n' % args[ 1 ] )
else:
sw = args[ 0 ]
command = args[ 1 ]
if command == 'start':
self.mn.get( sw ).start( self.mn.controllers )
elif command == 'stop':
self.mn.get( sw ).stop( deleteIntfs=False )
else:
error( 'invalid command: switch <switch name> {start, stop}\n' )
def default( self, line ):
"""Called on an input line when the command prefix is not recognized.
Overridden to run shell commands when a node is the first CLI argument.
......
......@@ -981,11 +981,12 @@ def start( self, controllers ):
if not intf.IP():
self.TCReapply( intf )
def stop( self ):
def stop( self, deleteIntfs=True ):
"Stop OpenFlow reference user datapath."
self.cmd( 'kill %ofdatapath' )
self.cmd( 'kill %ofprotocol' )
self.deleteIntfs()
if deleteIntfs:
self.deleteIntfs()
class OVSLegacyKernelSwitch( Switch ):
......@@ -1031,11 +1032,12 @@ def start( self, controllers ):
' 1>' + ofplog + ' 2>' + ofplog + '&' )
self.execed = False
def stop( self ):
def stop( self, deleteIntfs=True ):
"Terminate kernel datapath."
quietRun( 'ovs-dpctl del-dp ' + self.dp )
self.cmd( 'kill %ovs-openflowd' )
self.deleteIntfs()
if deleteIntfs:
self.deleteIntfs()
class OVSSwitch( Switch ):
......@@ -1183,12 +1185,13 @@ def start( self, controllers ):
self.TCReapply( intf )
def stop( self ):
def stop( self, deleteIntfs=True ):
"Terminate OVS switch."
self.cmd( 'ovs-vsctl del-br', self )
if self.datapath == 'user':
self.cmd( 'ip link del', self )
self.deleteIntfs()
if deleteIntfs:
self.deleteIntfs()
OVSKernelSwitch = OVSSwitch
......@@ -1205,7 +1208,7 @@ def start( self, controllers ):
OVSSwitch.start( self, controllers=[] )
class IVSSwitch(Switch):
class IVSSwitch( Switch ):
"""IVS virtual switch"""
def __init__( self, name, verbose=False, **kwargs ):
......@@ -1251,11 +1254,12 @@ def start( self, controllers ):
self.cmd( ' '.join(args) + ' >' + logfile + ' 2>&1 </dev/null &' )
def stop( self ):
def stop( self, deleteIntfs=True ):
"Terminate IVS switch."
self.cmd( 'kill %ivs' )
self.cmd( 'wait' )
self.deleteIntfs()
if deleteIntfs:
self.deleteIntfs()
def attach( self, intf ):
"Connect a data port"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment