X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Ftestbeds%2Fns3%2Fexecute.py;h=6faf6da113053c1dbfe2bf1e282658a558443c2c;hb=ef8d6828add421180db7104e1393523b0b054082;hp=0635f2624cab348c607ca3b96c65f0475b29c653;hpb=4bea9f9369373d6f6be4b4b781de6d615bfaf610;p=nepi.git diff --git a/src/nepi/testbeds/ns3/execute.py b/src/nepi/testbeds/ns3/execute.py index 0635f262..6faf6da1 100644 --- a/src/nepi/testbeds/ns3/execute.py +++ b/src/nepi/testbeds/ns3/execute.py @@ -1,6 +1,6 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- +from util import _get_ipv4_protocol_guid, _get_node_guid, _get_dev_number from nepi.core import testbed_impl from nepi.core.attributes import Attribute from constants import TESTBED_ID, TESTBED_VERSION @@ -109,8 +109,22 @@ class TestbedController(testbed_impl.TestbedController): if factory_id in self.LOCAL_FACTORIES: setattr(element, name, value) elif not factory.box_attributes.is_attribute_metadata(name): - ns3_value = self._to_ns3_value(guid, name, value) - self._set_attribute(name, ns3_value, element) + if name == "Up": + ipv4_guid = _get_ipv4_protocol_guid(self, guid) + if not ipv4_guid in self._elements: + return + ipv4 = self._elements[ipv4_guid] + if value == False: + nint = ipv4.GetNInterfaces() + for i in xrange(0, nint): + ipv4.SetDown(i) + else: + nint = ipv4.GetNInterfaces() + for i in xrange(0, nint): + ipv4.SetUp(i) + else: + 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) @@ -123,6 +137,19 @@ class TestbedController(testbed_impl.TestbedController): return getattr(element, name) else: return value + else: + if name == "Up": + ipv4_guid = _get_ipv4_protocol_guid(self, guid) + if not ipv4_guid in self._elements: + return True + ipv4 = self._elements[ipv4_guid] + nint = ipv4.GetNInterfaces() + value = True + for i in xrange(0, nint): + value = ipv4.IsUp(i) + if not value: break + return value + if factory.box_attributes.is_attribute_metadata(name): return value @@ -137,6 +164,7 @@ class TestbedController(testbed_impl.TestbedController): 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: return int(value) if attr_type == Attribute.DOUBLE: