Added routes to OMF nodes
[nepi.git] / src / nepi / util / parser / base.py
index 5cbd072..eeaf594 100644 (file)
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
 import sys
@@ -86,7 +85,7 @@ class ExperimentData(object):
             address_data["Broadcast"] = broadcast
         addresses_data.append(address_data)
 
-    def add_route_data(self, guid, destination, netprefix, nexthop, metric):
+    def add_route_data(self, guid, destination, netprefix, nexthop, metric, device):
         data = self.data[guid]
         if not "routes" in data:
             data["routes"] = list()
@@ -95,7 +94,8 @@ class ExperimentData(object):
             "Destination": destination,
             "NetPrefix": netprefix, 
             "NextHop": nexthop, 
-            "Metric": metric
+            "Metric": metric,
+            "Device": device
             })
         routes_data.append(route_data)
 
@@ -184,7 +184,8 @@ class ExperimentData(object):
         return [(data["Destination"],
                  data["NetPrefix"],
                  data["NextHop"],
-                 data["Metric"]) \
+                 data["Metric"],
+                 data["Device"]) \
                          for data in routes_data]
 
 class ExperimentParser(object):
@@ -255,7 +256,9 @@ class ExperimentParser(object):
              netprefix = route.get_attribute_value("NetPrefix")
              nexthop = route.get_attribute_value("NextHop")
              metric = route.get_attribute_value("Metric")
-             data.add_route_data(guid, destination, netprefix, nexthop, 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()
@@ -270,7 +273,10 @@ class ExperimentParser(object):
     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)
+        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)
@@ -323,13 +329,14 @@ class ExperimentParser(object):
                 addr.set_attribute_value("Broadcast", broadcast)
 
     def routes_from_data(self, box, data):
-         for (destination, netprefix, nexthop, metric) \
+         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: