Add port status change command
This commit is contained in:
+10
-1
@@ -33,7 +33,7 @@ Bugs/limitations:
|
|||||||
from subprocess import call
|
from subprocess import call
|
||||||
from cmd import Cmd
|
from cmd import Cmd
|
||||||
|
|
||||||
from mininet.log import info, output
|
from mininet.log import info, output, error
|
||||||
|
|
||||||
class CLI( Cmd ):
|
class CLI( Cmd ):
|
||||||
"Simple command-line interface to talk to nodes."
|
"Simple command-line interface to talk to nodes."
|
||||||
@@ -147,6 +147,15 @@ class CLI( Cmd ):
|
|||||||
for node in self.nodelist:
|
for node in self.nodelist:
|
||||||
output( '%s\n' % node )
|
output( '%s\n' % node )
|
||||||
|
|
||||||
|
def do_link( self, args ):
|
||||||
|
"Bring a link up or down."
|
||||||
|
if len(args) != 3:
|
||||||
|
error( 'invalid number of args: link [up down] end1 end2\n' )
|
||||||
|
elif args[ 0 ] not in [ 'up', 'down' ]:
|
||||||
|
error( 'invalid type: link [up down] end1 end2\n' )
|
||||||
|
else:
|
||||||
|
self.mn.link( *args )
|
||||||
|
|
||||||
def do_exit( self, args ):
|
def do_exit( self, args ):
|
||||||
"Exit"
|
"Exit"
|
||||||
return 'exited by user command'
|
return 'exited by user command'
|
||||||
|
|||||||
@@ -483,6 +483,33 @@ class Mininet( object ):
|
|||||||
"Run iperf UDP test."
|
"Run iperf UDP test."
|
||||||
return self.iperf( l4Type='UDP', udpBw=udpBw )
|
return self.iperf( l4Type='UDP', udpBw=udpBw )
|
||||||
|
|
||||||
|
def link( self, type, src, dst ):
|
||||||
|
"""Change link status.
|
||||||
|
type: string {up, down}
|
||||||
|
src: string
|
||||||
|
dst: string"""
|
||||||
|
if src not in self.nameToNode:
|
||||||
|
error( 'src not in network: %s\n' % src )
|
||||||
|
elif dst not in self.nameToNode:
|
||||||
|
error( 'dst not in network: %s\n' % dst )
|
||||||
|
else:
|
||||||
|
srcNode = self.nameToNode[ src ]
|
||||||
|
dstNode = self.nameToNode[ dst ]
|
||||||
|
srcID = int( src[ 1: ] )
|
||||||
|
dstID = int( dst[ 1: ] )
|
||||||
|
if self.topo.port( srcID, dstID ) is None:
|
||||||
|
error( 'src and dst not connected: %s %s\n' % ( src, dst) )
|
||||||
|
else:
|
||||||
|
srcPort, dstPort = self.topo.port( srcID, dstID )
|
||||||
|
srcIntf = srcNode.intfs[ srcPort ]
|
||||||
|
dstIntf = dstNode.intfs[ dstPort ]
|
||||||
|
result = srcNode.cmd( [ 'ifconfig', srcIntf, type ] )
|
||||||
|
if result:
|
||||||
|
error( 'link src status change failed: %s\n' % result )
|
||||||
|
result = dstNode.cmd( [ 'ifconfig', dstIntf, type ] )
|
||||||
|
if result:
|
||||||
|
error( 'link dst status change failed: %s\n' % result )
|
||||||
|
|
||||||
def interact( self ):
|
def interact( self ):
|
||||||
"Start network and run our simple CLI."
|
"Start network and run our simple CLI."
|
||||||
self.start()
|
self.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user