- def state(self):
- # First check if the ccnd has failed
- state_check_delay = 0.5
- if self._state == ResourceState.STARTED and \
- tdiffsec(tnow(), self._last_state_check) > state_check_delay:
-
- if self.get("deviceName"):
- (out, err), proc = self.node.execute("ifconfig")
-
- if out.strip().find(self.get("deviceName")) == -1:
- # tap is not running is not running (socket not found)
- self.finish()
-
- self._last_state_check = tnow()
-
- return self._state
-
- def release(self):
- # Node needs to wait until all associated RMs are released
- # to be released
- try:
- from nepi.resources.linux.udptunnel import UdpTunnel
- rms = self.get_connected(UdpTunnel.rtype())
- for rm in rms:
- if rm.state < ResourceState.STOPPED:
- self.ec.schedule(reschedule_delay, self.release)
- return
- except:
- import traceback
- err = traceback.format_exc()
- self.error(err)
-
- super(PlanetlabTap, self).release()
-
- def wait_if_name(self):
- """ Waits until the if_name file for the command is generated,
- and returns the if_name for the device """
- if_name = None
- delay = 1.0
-
- for i in xrange(4):
- (out, err), proc = self.node.check_output(self.run_home, "if_name")
-
- if out:
- if_name = out.strip()
- break
- else:
- time.sleep(delay)
- delay = delay * 1.5