carlosmscabral | f40ecd1 | 2013-02-01 18:15:58 -0200 | [diff] [blame] | 1 | """ |
| 2 | Mininet Cleanup |
| 3 | author: Bob Lantz (rlantz@cs.stanford.edu) |
| 4 | |
| 5 | Unfortunately, Mininet and OpenFlow (and the Linux kernel) |
| 6 | don't always clean up properly after themselves. Until they do |
| 7 | (or until cleanup functionality is integrated into the Python |
| 8 | code), this script may be used to get rid of unwanted garbage. |
| 9 | It may also get rid of 'false positives', but hopefully |
| 10 | nothing irreplaceable! |
| 11 | """ |
| 12 | |
| 13 | from subprocess import Popen, PIPE |
| 14 | |
| 15 | from mininet.log import info |
| 16 | from mininet.term import cleanUpScreens |
| 17 | |
| 18 | def sh( cmd ): |
| 19 | "Print a command and send it to the shell" |
| 20 | info( cmd + '\n' ) |
| 21 | return Popen( [ '/bin/sh', '-c', cmd ], stdout=PIPE ).communicate()[ 0 ] |
| 22 | |
| 23 | def cleanup(): |
| 24 | """Clean up junk which might be left over from old runs; |
| 25 | do fast stuff before slow dp and link removal!""" |
| 26 | |
| 27 | info("*** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes" |
| 28 | "\n") |
| 29 | zombies = 'controller ofprotocol ofdatapath ping nox_core lt-nox_core ' |
| 30 | zombies += 'ovs-openflowd udpbwtest' |
| 31 | # Note: real zombie processes can't actually be killed, since they |
| 32 | # are already (un)dead. Then again, |
| 33 | # you can't connect to them either, so they're mostly harmless. |
| 34 | sh( 'killall -9 ' + zombies + ' 2> /dev/null' ) |
| 35 | |
| 36 | info( "*** Removing junk from /tmp\n" ) |
| 37 | sh( 'rm -f /tmp/vconn* /tmp/vlogs* /tmp/*.out /tmp/*.log' ) |
| 38 | |
| 39 | info( "*** Removing old screen sessions\n" ) |
| 40 | cleanUpScreens() |
| 41 | |
| 42 | info( "*** Removing excess kernel datapaths\n" ) |
| 43 | dps = sh( "ps ax | egrep -o 'dp[0-9]+' | sed 's/dp/nl:/'" ).split( '\n' ) |
| 44 | for dp in dps: |
| 45 | if dp != '': |
| 46 | sh( 'dpctl deldp ' + dp ) |
| 47 | |
| 48 | info( "*** Removing OVS datapaths" ) |
| 49 | dps = sh("ovs-vsctl list-br").split( '\n' ) |
| 50 | for dp in dps: |
| 51 | if dp: |
| 52 | sh( 'ovs-vsctl del-br ' + dp ) |
| 53 | |
| 54 | info( "*** Removing all links of the pattern foo-ethX\n" ) |
| 55 | links = sh( "ip link show | egrep -o '(\w+-eth\w+)'" ).split( '\n' ) |
| 56 | for link in links: |
| 57 | if link != '': |
| 58 | sh( "ip link del " + link ) |
| 59 | |
| 60 | info( "*** Cleanup complete.\n" ) |