From c0031a352b01a01f89c7f3528756a987b3a215ba Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Tue, 24 May 2011 15:14:08 +0200 Subject: [PATCH] ns3 set/get during simulation execution --- src/nepi/core/execute.py | 3 ++- src/nepi/testbeds/ns3/execute.py | 33 +++++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/nepi/core/execute.py b/src/nepi/core/execute.py index d2d21c58..b6470d54 100644 --- a/src/nepi/core/execute.py +++ b/src/nepi/core/execute.py @@ -580,7 +580,8 @@ class ExperimentController(object): testbed = self._testbed_for_guid(guid) if testbed != None: testbed.set(guid, name, value, time) - raise RuntimeError("No element exists with guid %d" % guid) + else: + raise RuntimeError("No element exists with guid %d" % guid) def get(self, guid, name, time = TIME_NOW): testbed = self._testbed_for_guid(guid) diff --git a/src/nepi/testbeds/ns3/execute.py b/src/nepi/testbeds/ns3/execute.py index ab34f25e..a9ccd370 100644 --- a/src/nepi/testbeds/ns3/execute.py +++ b/src/nepi/testbeds/ns3/execute.py @@ -1,10 +1,11 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from constants import TESTBED_ID from nepi.core import testbed_impl from nepi.core.attributes import Attribute -from nepi.util.constants import TIME_NOW +from constants import TESTBED_ID +from nepi.util.constants import TIME_NOW, \ + TESTBED_STATUS_STARTED import os import sys import threading @@ -69,8 +70,8 @@ class TestbedController(testbed_impl.TestbedController): elif factory.box_attributes.is_attribute_invisible(name): return else: - ns3_value = self._to_ns3_value(guid, name, value) - element.SetAttribute(name, ns3_value) + ns3_value = self._to_ns3_value(guid, name, value) + self._set_attribute(name, ns3_value, element) def get(self, guid, name, time = TIME_NOW): value = super(TestbedController, self).get(guid, name, time) @@ -94,7 +95,7 @@ class TestbedController(testbed_impl.TestbedController): (name, guid)) checker = info.checker ns3_value = checker.Create() - element.GetAttribute(name, ns3_value) + self._get_attribute(name, ns3_value, element) value = ns3_value.SerializeToString(checker) attr_type = factory.box_attributes.get_attribute_type(name) if attr_type == Attribute.INTEGER: @@ -166,6 +167,28 @@ class TestbedController(testbed_impl.TestbedController): raise RuntimeError('Event could not be scheduled : %s %s ' \ % (repr(func), repr(args))) + def _set_attribute(self, name, ns3_value, element): + if self.status() == TESTBED_STATUS_STARTED: + # schedule the event in the Simulator + self._schedule_event(self._condition, self._set_ns3_attribute, + name, ns3_value, element) + else: + self._set_ns3_attribute(name, ns3_value, element) + + def _get_attribute(self, name, ns3_value, element): + if self.status() == TESTBED_STATUS_STARTED: + # schedule the event in the Simulator + self._schedule_event(self._condition, self._get_ns3_attribute, + name, ns3_value, element) + else: + self._get_ns3_attribute(name, ns3_value, element) + + def _set_ns3_attribute(self, name, ns3_value, element): + element.SetAttribute(name, ns3_value) + + def _get_ns3_attribute(self, name, ns3_value, element): + element.GetAttribute(name, ns3_value) + def _to_ns3_value(self, guid, name, value): factory_id = self._create[guid] TypeId = self.ns3.TypeId() -- 2.43.0