diff --git a/mininet/node.py b/mininet/node.py index 19a4babd69068fa1ce00564de866ab0e3e73a5a0..005eb7829c727f921d0dd686ad52b04f2d9307f8 100644 --- a/mininet/node.py +++ b/mininet/node.py @@ -35,10 +35,11 @@ """ -from subprocess import Popen, PIPE, STDOUT import os +import re import signal import select +from subprocess import Popen, PIPE, STDOUT from time import sleep from mininet.log import info, error, debug @@ -227,7 +228,6 @@ def deleteIntfs( self ): # However, this takes time, so we're better off removing them # explicitly so that we won't get errors if we run before they # have been removed by the kernel. Unfortunately this is very slow. - self.cmd( 'kill %ofprotocol' ) for intf in self.intfs.values(): quietRun( 'ip link del ' + intf ) info( '.' ) @@ -275,6 +275,15 @@ def IP( self ): "Return IP address of interface 0" return self.ips.get( self.intfs.get( 0 , None ), None ) + def MAC( self ): + "Return MAC address of interface 0" + ifconfig = self.cmd( 'ifconfig ' + self.intfs[ 0 ] ) + macs = re.findall( '..:..:..:..:..:..', ifconfig ) + if len( macs ) > 0: + return macs[ 0 ] + else: + return None + def intfIsUp( self, port ): """Check if interface for a given port number is up. port: port number""" @@ -388,6 +397,7 @@ def start( self, controllers ): def stop( self ): "Terminate kernel datapath." quietRun( 'dpctl deldp nl:%i' % self.dp ) + self.cmd( 'kill %ofprotocol' ) self.deleteIntfs() class OVSKernelSwitch( Switch ): @@ -431,6 +441,7 @@ def start( self, controllers ): def stop( self ): "Terminate kernel datapath." quietRun( 'ovs-dpctl del-dp dp%i' % self.dp ) + self.cmd( 'kill %ovs-openflowd' ) self.deleteIntfs()