# Copyright (C) 2014 INRIA
#
# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation;
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
from nepi.execution.attribute import Attribute, Flags, Types
from nepi.execution.trace import Trace, TraceAttr
from nepi.execution.resource import ResourceManager, clsinit_copy, \
- ResourceState, ResourceFactory, reschedule_delay
+ ResourceState, ResourceFactory
from nepi.resources.linux.application import LinuxApplication
from nepi.util.timefuncs import tnow, tdiffsec
from nepi.resources.ns3.ns3simulation import NS3Simulation
import time
import threading
-## TODO: Clean up DCE part. All that is DCE specific should go
-## in the linux ns3dceapplication.py
-
@clsinit_copy
class LinuxNS3Simulation(LinuxApplication, NS3Simulation):
- _rtype = "LinuxNS3Simulation"
+ _rtype = "linux::ns3::Simulation"
@classmethod
def _register_attributes(cls):
self._client = None
self._home = "ns3-simu-%s" % self.guid
self._socket_name = "ns3-%s.sock" % os.urandom(4).encode('hex')
- self._dce_manager_helper_uuid = None
- self._dce_application_helper_uuid = None
self._enable_dce = None
+ self._dce_helper = None
@property
def socket_name(self):
self.debug("---- RESCHEDULING DEPLOY ---- node state %s " % self.node.state )
# ccnd needs to wait until node is deployed and running
- self.ec.schedule(reschedule_delay, self.deploy)
+ self.ec.schedule(self.reschedule_delay, self.deploy)
else:
if not self.get("command"):
self.set("command", self._start_command)
else:
msg = " Failed to execute command '%s'" % command
self.error(msg, out, err)
- raise RuntimeError, msg
+ raise RuntimeError(msg)
def do_stop(self):
""" Stops simulation execution
super(LinuxApplication, self).do_release()
+ @property
+ def state(self):
+ super(LinuxApplication, self).state
+
+ if self._state == ResourceState.STARTED:
+ try:
+ is_finished = self.invoke(SIMULATOR_UUID, "isFinished")
+
+ if is_finished:
+ self.set_stopped()
+ except:
+ msg = "Simulator failed. Can not retrieve state"
+ out = ""
+
+ import traceback
+ err = traceback.format_exc()
+ self.error(msg, out, err)
+ self.do_fail()
+
+ return self._state
+
@property
def enable_dce(self):
if self._enable_dce is None:
rm = self.ec.get_resource(guid)
if isinstance(rm, rclass):
self._enable_dce = True
+
+ from nepi.resources.ns3.ns3dcehelper import NS3DceHelper
+ self._dce_helper = NS3DceHelper(self)
break
return self._enable_dce
+ @property
+ def dce_helper(self):
+ return self._dce_helper
+
@property
def _start_command(self):
command = []