from nepi.execution.resource import ResourceManager, clsinit_copy, \
ResourceState, reschedule_delay
-
from nepi.execution.attribute import Flags
from nepi.execution.trace import TraceAttr
-reschedule_delay = "1s"
-
@clsinit_copy
class NS3Base(ResourceManager):
_rtype = "abstract::ns3::Object"
self._uuid = None
self._connected = set()
self._trace_filename = dict()
+ self._node = None
@property
def connected(self):
@property
def node(self):
- from nepi.resources.ns3.ns3node import NS3BaseNode
- nodes = self.get_connected(NS3BaseNode.get_rtype())
- if nodes: return nodes[0]
- return None
+ if not self._node:
+ from nepi.resources.ns3.ns3node import NS3BaseNode
+ nodes = self.get_connected(NS3BaseNode.get_rtype())
+ if nodes: self._node = nodes[0]
+
+ return self._node
def trace(self, name, attr = TraceAttr.ALL, block = 512, offset = 0):
filename = self._trace_filename.get(name)
if not filename:
- self.error("Can resolve trace %s. Did you enabled it?" % name)
+ self.error("Can not resolve trace %s. Did you enabled it?" % name)
return ""
return self.simulation.trace(filename, attr, block, offset)
kwargs = dict()
for attr in self._attrs.values():
- if not ( attr.has_flag(Flags.Construct) and attr.has_changed() ):
+ if not ( attr.has_flag(Flags.Construct) and attr.has_changed ):
continue
kwargs[attr.name] = attr._value
def _wait_rms(self):
""" Returns True if dependent RMs are not yer READY, False otherwise"""
for rm in self._rms_to_wait:
- if rm and rm.state < ResourceState.READY:
+ if rm.state < ResourceState.READY:
return True
return False
def do_provision(self):
- # TODO: create run dir for ns3 object !!!!
- # self.simulation.node.mkdir(self.run_home)
-
self._instantiate_object()
self._connect_object()
self._configure_object()