# 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
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 = "linux::ns3::Simulation"
self._home = "ns3-simu-%s" % self.guid
self._socket_name = "ns3-%s.sock" % os.urandom(4).encode('hex')
self._enable_dce = None
+ self._dce_helper = None
@property
def socket_name(self):
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 = []
"""
command = " [ -e %s ] && echo 'DONE' " % self.remote_socket
- for i in xrange(200):
+ for i in range(200):
(out, err), proc = self.node.execute(command, retry = 1,
with_lock = True)