Merge pull request #450 from mininet/sw-cmd
adding deleteIntfs option to switches and corresponding CLI command
This commit is contained in:
@@ -351,6 +351,26 @@ class CLI( Cmd ):
|
|||||||
for link in self.mn.links:
|
for link in self.mn.links:
|
||||||
print link, link.status()
|
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 ):
|
def default( self, line ):
|
||||||
"""Called on an input line when the command prefix is not recognized.
|
"""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.
|
Overridden to run shell commands when a node is the first CLI argument.
|
||||||
|
|||||||
+13
-9
@@ -981,11 +981,12 @@ class UserSwitch( Switch ):
|
|||||||
if not intf.IP():
|
if not intf.IP():
|
||||||
self.TCReapply( intf )
|
self.TCReapply( intf )
|
||||||
|
|
||||||
def stop( self ):
|
def stop( self, deleteIntfs=True ):
|
||||||
"Stop OpenFlow reference user datapath."
|
"Stop OpenFlow reference user datapath."
|
||||||
self.cmd( 'kill %ofdatapath' )
|
self.cmd( 'kill %ofdatapath' )
|
||||||
self.cmd( 'kill %ofprotocol' )
|
self.cmd( 'kill %ofprotocol' )
|
||||||
self.deleteIntfs()
|
if deleteIntfs:
|
||||||
|
self.deleteIntfs()
|
||||||
|
|
||||||
|
|
||||||
class OVSLegacyKernelSwitch( Switch ):
|
class OVSLegacyKernelSwitch( Switch ):
|
||||||
@@ -1031,11 +1032,12 @@ class OVSLegacyKernelSwitch( Switch ):
|
|||||||
' 1>' + ofplog + ' 2>' + ofplog + '&' )
|
' 1>' + ofplog + ' 2>' + ofplog + '&' )
|
||||||
self.execed = False
|
self.execed = False
|
||||||
|
|
||||||
def stop( self ):
|
def stop( self, deleteIntfs=True ):
|
||||||
"Terminate kernel datapath."
|
"Terminate kernel datapath."
|
||||||
quietRun( 'ovs-dpctl del-dp ' + self.dp )
|
quietRun( 'ovs-dpctl del-dp ' + self.dp )
|
||||||
self.cmd( 'kill %ovs-openflowd' )
|
self.cmd( 'kill %ovs-openflowd' )
|
||||||
self.deleteIntfs()
|
if deleteIntfs:
|
||||||
|
self.deleteIntfs()
|
||||||
|
|
||||||
|
|
||||||
class OVSSwitch( Switch ):
|
class OVSSwitch( Switch ):
|
||||||
@@ -1183,12 +1185,13 @@ class OVSSwitch( Switch ):
|
|||||||
self.TCReapply( intf )
|
self.TCReapply( intf )
|
||||||
|
|
||||||
|
|
||||||
def stop( self ):
|
def stop( self, deleteIntfs=True ):
|
||||||
"Terminate OVS switch."
|
"Terminate OVS switch."
|
||||||
self.cmd( 'ovs-vsctl del-br', self )
|
self.cmd( 'ovs-vsctl del-br', self )
|
||||||
if self.datapath == 'user':
|
if self.datapath == 'user':
|
||||||
self.cmd( 'ip link del', self )
|
self.cmd( 'ip link del', self )
|
||||||
self.deleteIntfs()
|
if deleteIntfs:
|
||||||
|
self.deleteIntfs()
|
||||||
|
|
||||||
|
|
||||||
OVSKernelSwitch = OVSSwitch
|
OVSKernelSwitch = OVSSwitch
|
||||||
@@ -1205,7 +1208,7 @@ class OVSBridge( OVSSwitch ):
|
|||||||
OVSSwitch.start( self, controllers=[] )
|
OVSSwitch.start( self, controllers=[] )
|
||||||
|
|
||||||
|
|
||||||
class IVSSwitch(Switch):
|
class IVSSwitch( Switch ):
|
||||||
"""IVS virtual switch"""
|
"""IVS virtual switch"""
|
||||||
|
|
||||||
def __init__( self, name, verbose=False, **kwargs ):
|
def __init__( self, name, verbose=False, **kwargs ):
|
||||||
@@ -1251,11 +1254,12 @@ class IVSSwitch(Switch):
|
|||||||
|
|
||||||
self.cmd( ' '.join(args) + ' >' + logfile + ' 2>&1 </dev/null &' )
|
self.cmd( ' '.join(args) + ' >' + logfile + ' 2>&1 </dev/null &' )
|
||||||
|
|
||||||
def stop( self ):
|
def stop( self, deleteIntfs=True ):
|
||||||
"Terminate IVS switch."
|
"Terminate IVS switch."
|
||||||
self.cmd( 'kill %ivs' )
|
self.cmd( 'kill %ivs' )
|
||||||
self.cmd( 'wait' )
|
self.cmd( 'wait' )
|
||||||
self.deleteIntfs()
|
if deleteIntfs:
|
||||||
|
self.deleteIntfs()
|
||||||
|
|
||||||
def attach( self, intf ):
|
def attach( self, intf ):
|
||||||
"Connect a data port"
|
"Connect a data port"
|
||||||
|
|||||||
Reference in New Issue
Block a user