-#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
box_data["factory_id"] = factory_id
self.data[guid] = box_data
- def add_graphical_info_data(self, guid, x, y, width, height, label):
+ def add_graphical_info_data(self, guid, x, y, width, height):
data = self.data[guid]
if not "graphical_info" in data:
data["graphical_info"] = dict()
graphical_info_data["y"] = y
graphical_info_data["width"] = width
graphical_info_data["height"] = height
- graphical_info_data["label"] = label
def add_factory_attribute_data(self, guid, name, value):
data = self.data[guid]
connection_data = connections_data[connector_type_name]
connection_data[other_guid] = other_connector_type_name
- def add_address_data(self, guid, autoconf, address, netprefix,
+ def add_address_data(self, guid, address, netprefix,
broadcast):
data = self.data[guid]
if not "addresses" in data:
data["addresses"] = list()
addresses_data = data["addresses"]
address_data = dict()
- if autoconf:
- address_data["AutoConfigure"] = autoconf
if address:
address_data["Address"] = address
address_data["NetPrefix"] = netprefix
address_data["Broadcast"] = broadcast
addresses_data.append(address_data)
- def add_route_data(self, guid, destination, netprefix, nexthop):
+ def add_route_data(self, guid, destination, netprefix, nexthop, metric, device):
data = self.data[guid]
if not "routes" in data:
data["routes"] = list()
route_data = dict({
"Destination": destination,
"NetPrefix": netprefix,
- "NextHop": nexthop
+ "NextHop": nexthop,
+ "Metric": metric,
+ "Device": device
})
routes_data.append(route_data)
return (graphical_info_data["x"],
graphical_info_data["y"],
graphical_info_data["width"],
- graphical_info_data["height"],
- graphical_info_data["label"])
+ graphical_info_data["height"])
def get_factory_attribute_data(self, guid):
data = self.data[guid]
data = self.data[guid]
if not "traces" in data:
return []
- return [trace_id for trace_id in data["traces"]]
+ return data["traces"]
def get_connection_data(self, guid):
data = self.data[guid]
if not "addresses" in data:
return []
addresses_data = data["addresses"]
- return [(data["AutoConfigure"] if "AutoConfigure" in data else None,
- data["Address"] if "Address" in data else None,
+ return [(data["Address"] if "Address" in data else None,
data["NetPrefix"] if "NetPrefix" in data else None,
data["Broadcast"] if "Broadcast" in data else None) \
for data in addresses_data]
routes_data = data["routes"]
return [(data["Destination"],
data["NetPrefix"],
- data["NextHop"]) \
+ data["NextHop"],
+ data["Metric"],
+ data["Device"]) \
for data in routes_data]
class ExperimentParser(object):
self.attributes_to_data(data, box.guid, box.attributes)
self.traces_to_data(data, box.guid, box.traces)
self.connections_to_data(data, box.guid, box.connectors)
- self.addresses_to_data(data, box.guid, box.addresses)
- self.routes_to_data(data, box.guid, box.routes)
+ if hasattr(box, "addresses"):
+ self.addresses_to_data(data, box.guid, box.addresses)
+ if hasattr(box, "routes"):
+ self.routes_to_data(data, box.guid, box.routes)
return data
def graphical_info_to_data(self, data, guid, g_info):
data.add_graphical_info_data(guid, g_info.x, g_info.y, g_info.width,
- g_info.height, g_info.label)
+ g_info.height)
def factory_attributes_to_data(self, data, guid, factory_attributes):
+ factory_attributes = factory_attributes or dict()
for name, value in factory_attributes.iteritems():
data.add_factory_attribute_data(guid, name, value)
def traces_to_data(self, data, guid, traces):
for trace in traces:
if trace.enabled:
- data.add_trace_data(guid, trace.trace_id)
+ data.add_trace_data(guid, trace.name)
def connections_to_data(self, data, guid, connectors):
for connector in connectors:
def addresses_to_data(self, data, guid, addresses):
for addr in addresses:
- autoconf = addr.get_attribute_value("AutoConfigure")
address = addr.get_attribute_value("Address")
netprefix = addr.get_attribute_value("NetPrefix")
broadcast = addr.get_attribute_value("Broadcast") \
if addr.has_attribute("Broadcast") and \
addr.is_attribute_modified("Broadcast") else None
- data.add_address_data(guid, autoconf, address, netprefix,
- broadcast)
+ data.add_address_data(guid, address, netprefix, broadcast)
def routes_to_data(self, data, guid, routes):
for route in routes:
destination = route.get_attribute_value("Destination")
netprefix = route.get_attribute_value("NetPrefix")
nexthop = route.get_attribute_value("NextHop")
- data.add_route_data(guid, destination, netprefix, nexthop)
+ metric = route.get_attribute_value("Metric")
+ device = route.get_attribute_value("Device")
+ data.add_route_data(guid, destination, netprefix, nexthop,
+ metric, device)
def from_data(self, experiment_description, data):
box_guids = list()
- for guid in data.guids:
+ for guid in sorted(data.guids):
if data.is_testbed_data(guid):
self.testbed_from_data(experiment_description, guid, data)
else:
def testbed_from_data(self, experiment_description, guid, data):
from nepi.core.design import FactoriesProvider
(testbed_id, testbed_version) = data.get_testbed_data(guid)
- provider = FactoriesProvider(testbed_id, testbed_version)
- experiment_description.add_testbed_description(provider)
+ provider = FactoriesProvider(testbed_id)
+ if provider.testbed_version != testbed_version:
+ raise RuntimeError("Bad testbed version on testbed %s. Asked for %s, got %s" % \
+ (testbed_id, testbed_version, provider.testbed_version))
+ experiment_description.add_testbed_description(provider, guid)
testbed_description = experiment_description.testbed_description(guid)
self.graphical_info_from_data(testbed_description, data)
self.attributes_from_data(testbed_description, data)
testbed_guid)
self.factory_attributes_from_data(testbed_description, factory_id,
guid, data)
- box = testbed_description.create(factory_id)
+ box = testbed_description.create(factory_id, guid)
+
self.graphical_info_from_data(box, data)
self.attributes_from_data(box, data)
self.traces_from_data(box, data)
self.routes_from_data(box, data)
def graphical_info_from_data(self, element, data):
- (x, y, width, height, label) = data.get_graphical_info_data(
+ (x, y, width, height) = data.get_graphical_info_data(
element.guid)
element.graphical_info.x = x
element.graphical_info.y = y
element.graphical_info.width = width
element.graphical_info.height = height
- element.graphical_info.label = label
def factory_attributes_from_data(self, testbed_description, factory_id,
guid, data):
box.enable_trace(name)
def addresses_from_data(self, box, data):
- for (autoconf, address, netprefix, broadcast) \
- in data.get_address_data(box.guid):
+ for (address, netprefix, broadcast) in data.get_address_data(box.guid):
addr = box.add_address()
- if autoconf:
- addr.set_attribute_value("AutoConfigure", autoconf)
if address:
addr.set_attribute_value("Address", address)
if netprefix != None:
addr.set_attribute_value("Broadcast", broadcast)
def routes_from_data(self, box, data):
- for (destination, netprefix, nexthop) \
+ for (destination, netprefix, nexthop, metric, device) \
in data.get_route_data(box.guid):
addr = box.add_route()
addr.set_attribute_value("Destination", destination)
addr.set_attribute_value("NetPrefix", netprefix)
addr.set_attribute_value("NextHop", nexthop)
+ addr.set_attribute_value("Metric", metric)
+ addr.set_attribute_value("Device", device)
def connections_from_data(self, experiment_description, guids, data):
for guid in guids: