testing link stuff

This commit is contained in:
cody burkard
2014-07-19 02:05:37 -07:00
parent 191df1cb73
commit 4d381f0b58
4 changed files with 35 additions and 9 deletions
-1
View File
@@ -272,7 +272,6 @@ class MininetRunner( object ):
if self.options.post:
CLI( mn, script=self.options.post )
mn.stop()
elapsed = float( time.time() - start )
info( 'completed in %0.3f seconds\n' % elapsed )
+22 -4
View File
@@ -86,6 +86,7 @@ class Intf( object ):
def updateMAC( self ):
"Return updated MAC address based on ifconfig"
#heres where we send the unecessary ifconfigs
ifconfig = self.ifconfig()
macs = self._macMatchRegex.findall( ifconfig )
self.mac = macs[ 0 ] if macs else None
@@ -102,8 +103,13 @@ class Intf( object ):
def isUp( self, setUp=False ):
"Return whether interface is up"
if setUp:
self.ifconfig( 'up' )
return "UP" in self.ifconfig()
r = self.ifconfig( 'up' )
if r:
return False
else:
return True
else:
return "UP" in self.ifconfig()
def rename( self, newname ):
"Rename interface"
@@ -138,6 +144,16 @@ class Intf( object ):
results[ name ] = result
return result
def updateAddr( self ):
"instead of updating ip and mac separately, use one ifconfig call to do it simultaneously"
ifconfig = self.ifconfig()
print ifconfig
ips = self._ipMatchRegex.findall( ifconfig )
macs = self._macMatchRegex.findall( ifconfig )
self.ip = ips[ 0 ] if ips else None
self.mac = macs[ 0 ] if macs else None
return self.ip, self.mac
def config( self, mac=None, ip=None, ifconfig=None,
up=True, **_params ):
"""Configure Node according to (optional) parameters:
@@ -154,8 +170,10 @@ class Intf( object ):
self.setParam( r, 'setIP', ip=ip )
self.setParam( r, 'isUp', up=up )
self.setParam( r, 'ifconfig', ifconfig=ifconfig )
self.updateIP()
self.updateMAC()
#should combine these next two operations into one. this is unecessary
#self.updateAddr()
#self.updateIP()
#self.updateMAC()
return r
def delete( self ):
+8 -1
View File
@@ -100,6 +100,7 @@ from mininet.link import Link, Intf
from mininet.util import quietRun, fixLimits, numCores, ensureRoot
from mininet.util import macColonHex, ipStr, ipParse, netParse, ipAdd
from mininet.term import cleanUpScreens, makeTerms
from multiprocessing.pool import ThreadPool
# Mininet version: should be consistent with README and LICENSE
VERSION = "2.1.0+"
@@ -157,6 +158,8 @@ class Mininet( object ):
self.terms = [] # list of spawned xterm processes
self.pool = ThreadPool( 64 )
Mininet.init() # Initialize Mininet if necessary
self.built = False
@@ -337,13 +340,17 @@ class Mininet( object ):
info( switchName + ' ' )
info( '\n*** Adding links:\n' )
# need to 'asynchronize' this too
for srcName, dstName in topo.links(sort=True):
src, dst = self.nameToNode[ srcName ], self.nameToNode[ dstName ]
params = topo.linkInfo( srcName, dstName )
srcPort, dstPort = topo.port( srcName, dstName )
self.addLink( src, dst, srcPort, dstPort, **params )
#self.pool.apply( self.addLink, ( src, dst, srcPort, dstPort, params, ) )
#self.pool.apply_async( self.addLink, args = ( src, dst )+ params, kwds = { 'Port1':srcPort, 'Port2':dstPort } )
info( '(%s, %s) ' % ( src.name, dst.name ) )
#self.pool.close()
#self.pool.join()
info( '\n' )
def configureControlNetwork( self ):
+5 -3
View File
@@ -82,6 +82,8 @@ def errRun( *cmd, **kwargs ):
poller.register( popen.stdout, POLLIN )
fdtofile = { popen.stdout.fileno(): popen.stdout }
outDone, errDone = False, True
#bookmark: rearrange this for aynch startup. shouldnt have to keep
# maybe we dont rearrange this. we really just need a method to call a command and NOT poll for output
if popen.stderr:
fdtofile[ popen.stderr.fileno() ] = popen.stderr
poller.register( popen.stderr, POLLIN )
@@ -185,10 +187,10 @@ def moveIntfNoRetry( intf, dstNode, srcNode=None, printError=False ):
intf = str( intf )
cmd = 'ip link set %s netns %s' % ( intf, dstNode.pid )
if srcNode:
srcNode.cmd( cmd )
output = srcNode.cmd( cmd )
else:
quietRun( cmd )
if ( ' %s:' % intf ) not in dstNode.cmd( 'ip link show', intf ):
output = quietRun( cmd )
if output:
if printError:
error( '*** Error: moveIntf: ' + intf +
' not successfully moved to ' + dstNode.name + '\n' )