From 0158188d584031c31e7f24442713792874fd09fd Mon Sep 17 00:00:00 2001
From: Claudio-Daniel Freire <claudio-daniel.freire@inria.fr>
Date: Wed, 7 Sep 2011 04:44:47 +0200
Subject: [PATCH] Fix TUN shutdown: waitkill was not effective because of a
 faulty if_alive

---
 src/nepi/testbeds/planetlab/tunproto.py | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/nepi/testbeds/planetlab/tunproto.py b/src/nepi/testbeds/planetlab/tunproto.py
index aeb4e674..84972a6b 100644
--- a/src/nepi/testbeds/planetlab/tunproto.py
+++ b/src/nepi/testbeds/planetlab/tunproto.py
@@ -429,7 +429,7 @@ class TunProtoBase(object):
             local = self.local()
             for i in xrange(30):
                 (out,err),proc = server.eintr_retry(server.popen_ssh_command)(
-                    "ip show %s >/dev/null 2>&1 && echo ALIVE || echo DEAD" % (name,),
+                    "ip link show %s >/dev/null 2>&1 && echo ALIVE || echo DEAD" % (name,),
                     host = local.node.hostname,
                     port = None,
                     user = local.node.slicename,
@@ -537,7 +537,23 @@ class TunProtoBase(object):
                     break
                 time.sleep(interval)
                 interval = min(30.0, interval * 1.1)
-    
+            else:
+                local = self.local()
+                
+                if local:
+                    # Forcibly shut down interface
+                    (out,err),proc = server.eintr_retry(server.popen_ssh_command)(
+                        "sudo -S bash -c 'echo %s > /vsys/vif_down.in'" % (self.if_name,),
+                        host = local.node.hostname,
+                        port = None,
+                        user = local.node.slicename,
+                        agent = None,
+                        ident_key = local.node.ident_path,
+                        server_key = local.node.server_key,
+                        timeout = 60,
+                        err_on_timeout = False
+                        )
+                    proc.wait()    
     _TRACEMAP = {
         # tracename : (remotename, localname)
         'packets' : ('capture','capture'),
-- 
2.47.0