Skip to content
Snippets Groups Projects
Commit 0a9ea29f authored by Bob Lantz's avatar Bob Lantz
Browse files

Fixed problem for empty lists in cleanup.

Added retry() function for createLink to see if it helps (probably won't.)
Random edits to docs.
parent 696a619d
No related branches found
No related tags found
No related merge requests found
...@@ -4,7 +4,7 @@ Preliminary Mininet Installation/Configuration Notes ...@@ -4,7 +4,7 @@ Preliminary Mininet Installation/Configuration Notes
- This is not (yet) a 'release'; things may be broken. - This is not (yet) a 'release'; things may be broken.
- Mininet is not currently 'installed.' If you want to install it, - Mininet is not currently 'installed.' If you want to install it,
so that you can 'import mininet', place it somewhere in your so that you can 'import mininet', place mininet.py somewhere in your
python path. python path.
- A functional netns binary is required to run mininet, but currently you - A functional netns binary is required to run mininet, but currently you
......
...@@ -21,7 +21,8 @@ creation of OpenFlow networks of varying sizes and topologies. ...@@ -21,7 +21,8 @@ creation of OpenFlow networks of varying sizes and topologies.
In order to run Mininet, you must have: In order to run Mininet, you must have:
* A Linux 2.6.26 or greater kernel compiled with network namespace support * A Linux 2.6.26 or greater kernel compiled with network namespace support
enabled. (debian-testing seems to have such a kernel.) enabled. (debian-testing seems to have such a kernel, but it doesn't
work for compiling nox, unfortunately.)
* The OpenFlow reference implementation (either the user or kernel * The OpenFlow reference implementation (either the user or kernel
datapath may be used, and the tun or ofdatapath kernel modules must be datapath may be used, and the tun or ofdatapath kernel modules must be
......
...@@ -31,7 +31,7 @@ def cleanup(): ...@@ -31,7 +31,7 @@ def cleanup():
print "*** Removing all links of the pattern foo-ethX" print "*** Removing all links of the pattern foo-ethX"
links = sh( "ip link show | egrep -o '(\w+-eth\w+)'" ).split( '\n' ) links = sh( "ip link show | egrep -o '(\w+-eth\w+)'" ).split( '\n' )
for link in links: for link in links:
if link: sh( "ip link del " + link ) if link != '': sh( "ip link del " + link )
print "*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes" print "*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes"
zombies = 'controller ofprotocol ofdatapath ping nox_core lt-nox_core' zombies = 'controller ofprotocol ofdatapath ping nox_core lt-nox_core'
...@@ -43,7 +43,7 @@ def cleanup(): ...@@ -43,7 +43,7 @@ def cleanup():
print "*** Removing excess kernel datapaths" print "*** Removing excess kernel datapaths"
dps = sh( "ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'" ).split( '\n') dps = sh( "ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'" ).split( '\n')
for dp in dps: for dp in dps:
if dp: sh( 'ip link del ' + link ) if dp != '': sh( 'ip link del ' + link )
print "*** Removing junk from /tmp" print "*** Removing junk from /tmp"
sh( 'rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log' ) sh( 'rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log' )
......
...@@ -346,21 +346,30 @@ def makeIntfPair( intf1, intf2 ): ...@@ -346,21 +346,30 @@ def makeIntfPair( intf1, intf2 ):
def moveIntf( intf, node ): def moveIntf( intf, node ):
"Move intf to node." "Move intf to node."
cmd = 'ip link set ' + intf + ' netns ' + `node.pid` cmd = 'ip link set ' + intf + ' netns ' + `node.pid`
checkRun( cmd ) quietRun( cmd )
links = node.cmd( 'ip link show' ) links = node.cmd( 'ip link show' )
if not intf in links: if not intf in links:
print "*** Error: moveIntf:", intf, "not successfully moved to", print "*** Error: moveIntf:", intf, "not successfully moved to",
print node.name,":" print node.name,":"
exit( 1 ) return False
return return True
def retry( n, fn, *args):
"Try something N times before giving up."
tries = 0
while not apply( fn, args ) and tries < 3:
sleep( 1 )
print "*** retrying..."; flush()
tries += 1
if tries > 3: exit( 1 )
def createLink( node1, node2 ): def createLink( node1, node2 ):
"Create a link node1-intf1 <---> node2-intf2." "Create a link node1-intf1 <---> node2-intf2."
intf1 = node1.newIntf() intf1 = node1.newIntf()
intf2 = node2.newIntf() intf2 = node2.newIntf()
makeIntfPair( intf1, intf2 ) makeIntfPair( intf1, intf2 )
if node1.inNamespace: moveIntf( intf1, node1 ) if node1.inNamespace: retry( 3, moveIntf, intf1, node1 )
if node2.inNamespace: moveIntf( intf2, node2 ) if node2.inNamespace: retry( 3, moveIntf, intf2, node2 )
node1.connection[ intf1 ] = ( node2, intf2 ) node1.connection[ intf1 ] = ( node2, intf2 )
node2.connection[ intf2 ] = ( node1, intf1 ) node2.connection[ intf2 ] = ( node1, intf1 )
return intf1, intf2 return intf1, intf2
......
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