2 # -*- coding: utf-8 -*-
4 from constants import TESTBED_ID
5 from nepi.core import testbed_impl
6 from nepi.core.metadata import Metadata
7 from nepi.util import validation
8 from nepi.util.constants import AF_INET, AF_INET6
11 class TestbedInstance(testbed_impl.TestbedInstance):
12 def __init__(self, testbed_version):
13 super(TestbedInstance, self).__init__(TESTBED_ID, testbed_version)
15 self._home_directory = None
19 def home_directory(self):
20 return self._home_directory
27 self._home_directory = self._attributes.\
28 get_attribute_value("homeDirectory")
29 self._netns = self._load_netns_module()
31 def do_configure(self):
33 # configure addressess
34 for guid, addresses in self._add_address.iteritems():
35 element = self._elements[guid]
36 for address in addresses:
37 (family, address, netprefix, broadcast) = address
39 element.add_v4_address(address, netprefix)
41 for guid, routes in self._add_route.iteritems():
42 element = self._elements[guid]
44 (destination, netprefix, nexthop) = route
45 element.add_route(prefix = destination, prefix_len = netprefix,
48 def set(self, time, guid, name, value):
49 super(TestbedInstance, self).set(time, guid, name, value)
50 # TODO: take on account schedule time for the task
51 element = self._elements[guid]
53 setattr(element, name, value)
55 def get(self, time, guid, name):
56 # TODO: take on account schedule time for the task
57 element = self._elements[guid]
58 return getattr(element, name)
60 def action(self, time, guid, action):
61 raise NotImplementedError
63 def trace(self, guid, trace_id):
64 f = open(self.trace_filename(guid, trace_id), "r")
70 for trace in self._traces.values():
72 for element in self._elements.values():
75 def trace_filename(self, guid, trace_id):
76 # TODO: Need to be defined inside a home!!!! with and experiment id_code
77 return os.path.join(self.home_directory, "%d_%s" % (guid, trace_id))
79 def follow_trace(self, trace_id, trace):
80 self._traces[trace_id] = trace
82 def _load_netns_module(self):
83 # TODO: Do something with the configuration!!!
86 netns_mod = sys.modules["netns"]
88 enable_debug = self._attributes.get_attribute_value("enableDebug")
90 netns_mod.environ.set_log_level(netns_mod.environ.LOG_DEBUG)