X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Femuvim%2Fdcemulator%2Fnet.py;h=2c5ce14227133d9b5f89ca9d03f8b37273d8f3d7;hb=404f26f2896b92af8ddb1bec28edcc6813819e4d;hp=b201112d0790e0de8fdc01eec53360b5b41f18dd;hpb=79ef6aee3dc52f49d1261e40ec5f258fb4372a1e;p=osm%2Fvim-emu.git diff --git a/src/emuvim/dcemulator/net.py b/src/emuvim/dcemulator/net.py index b201112..2c5ce14 100755 --- a/src/emuvim/dcemulator/net.py +++ b/src/emuvim/dcemulator/net.py @@ -65,6 +65,11 @@ class DCNetwork(Containernet): """ self.dcs = {} + # make sure any remaining Ryu processes are killed + self.killRyu() + # make sure no containers are left over from a previous emulator run. + self.removeLeftoverContainers() + # call original Docker.__init__ and setup default controller Containernet.__init__( self, switch=OVSKernelSwitch, controller=controller, **kwargs) @@ -261,7 +266,7 @@ class DCNetwork(Containernet): if kwargs.get('bidirectional'): ret = ret +'\n' + self._chainAddFlow(vnf_dst_name, vnf_src_name, vnf_dst_interface, vnf_src_interface, **kwargs) - elif cmd == 'del-flows': # TODO: del-flow to be implemented + elif cmd == 'del-flows': ret = self._chainAddFlow(vnf_src_name, vnf_dst_name, vnf_src_interface, vnf_dst_interface, **kwargs) if kwargs.get('bidirectional'): ret = ret + '\n' + self._chainAddFlow(vnf_dst_name, vnf_src_name, vnf_dst_interface, vnf_src_interface, **kwargs) @@ -274,7 +279,6 @@ class DCNetwork(Containernet): def _chainAddFlow(self, vnf_src_name, vnf_dst_name, vnf_src_interface=None, vnf_dst_interface=None, **kwargs): - # TODO: this needs to be cleaned up #check if port is specified (vnf:port) if vnf_src_interface is None: # take first interface by default @@ -501,6 +505,16 @@ class DCNetwork(Containernet): if self.ryu_process is not None: self.ryu_process.terminate() self.ryu_process.kill() + self.killRyu() + + @staticmethod + def removeLeftoverContainers(): + # TODO can be more python-based using eg. docker-py? + Popen('docker ps -a -q --filter="name=mn.*" | xargs -r docker rm -f', shell=True) + + @staticmethod + def killRyu(): + Popen(['pkill', '-f', 'ryu-manager']) def ryu_REST(self, prefix, dpid=None, data=None): try: