aboutsummaryrefslogtreecommitdiff
path: root/rumba/testbeds/jfed.py
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@ugent.be>2017-03-28 13:18:26 +0200
committerSander Vrijders <sander.vrijders@ugent.be>2017-03-28 16:29:51 +0200
commit0e8936e55956813f7f7db633b1cb96241a78ea58 (patch)
tree39b26c2cf3b8943d9f34d87fb9a537c0b13e860f /rumba/testbeds/jfed.py
parent99d8c66180e24849bb4f0f7edd1be4fe852f44db (diff)
downloadrumba-0e8936e55956813f7f7db633b1cb96241a78ea58.tar.gz
rumba-0e8936e55956813f7f7db633b1cb96241a78ea58.zip
testbeds: Port to new API
The new API passes the Experiment instance to the testbeds, so that the configs for the testbeds can be generated starting from the IPCPs. The classes Link, Interface, P2PLink have been deprecated.
Diffstat (limited to 'rumba/testbeds/jfed.py')
-rw-r--r--rumba/testbeds/jfed.py78
1 files changed, 37 insertions, 41 deletions
diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py
index 92e615f..04c57ba 100644
--- a/rumba/testbeds/jfed.py
+++ b/rumba/testbeds/jfed.py
@@ -35,7 +35,7 @@ class Testbed(mod.Testbed):
self.jfed_jar = jfed_jar
self.exp_hours = exp_hours
- def create_rspec(self, nodes, links):
+ def create_rspec(self, experiment):
self.rspec = self.exp_name + ".rspec"
impl = xml.getDOMImplementation()
@@ -66,7 +66,7 @@ class Testbed(mod.Testbed):
"resources/rspec/3 http://www.geni.net/" +
"resources/rspec/3/request.xsd")
- for node in nodes:
+ for node in experiment.nodes:
el = doc.createElement("node")
top_el.appendChild(el)
el.setAttribute("client_id", node.name)
@@ -78,50 +78,41 @@ class Testbed(mod.Testbed):
el2.setAttribute("name", "raw-pc")
node.ifs = 0
- for link in links:
- if link.node_a == node or link.node_b == node:
+ for ipcp in node.ipcps:
+ if type(ipcp) is mod.ShimEthIPCP:
el3 = doc.createElement("interface")
- if link.node_a == node:
- link.int_a.id = node.name + ":if" + str(node.ifs)
- link_id = link.int_a.id
- if link.node_b == node:
- link.int_b.id = node.name + ":if" + str(node.ifs)
- link_id = link.int_b.id
-
- el3.setAttribute("client_id", link_id)
+ ipcp.if_id = node.name + ":if" + str(node.ifs)
+ el3.setAttribute("client_id", ipcp.if_id)
node.ifs += 1
el.appendChild(el3)
- for link in links:
- el = doc.createElement("link")
- top_el.appendChild(el)
- el.setAttribute("client_id", link.name)
-
- el2 = doc.createElement("component_manager_id")
- el2.setAttribute("name", self.authority)
- el.appendChild(el2)
+ for dif in experiment.dif_ordering:
+ if type(dif) is mod.ShimEthDIF:
+ el = doc.createElement("link")
+ top_el.appendChild(el)
+ el.setAttribute("client_id", dif.name)
- el3 = doc.createElement("interface_ref")
- el3.setAttribute("client_id", link.int_a.id)
- el.appendChild(el3)
+ el2 = doc.createElement("component_manager_id")
+ el2.setAttribute("name", self.authority)
+ el.appendChild(el2)
- el4 = doc.createElement("interface_ref")
- el4.setAttribute("client_id", link.int_b.id)
- el.appendChild(el4)
+ for ipcp in dif.ipcps:
+ el3 = doc.createElement("interface_ref")
+ el3.setAttribute("client_id", ipcp.if_id)
+ el.appendChild(el3)
file = open(self.rspec, "w")
file.write(doc.toprettyxml())
file.close()
- def create_experiment(self, nodes, links):
- self.create_rspec(nodes, links)
+ def create_experiment(self, experiment):
+ self.create_rspec(experiment)
self.manifest = self.exp_name + ".rrspec"
- for node in nodes:
+ for node in experiment.nodes:
auth_name_r = self.auth_name.replace(".", "-")
node.full_name = node.name + "." + self.exp_name + "." + \
- self.proj_name + "." + auth_name_r + \
- "." + self.auth_name
+ auth_name_r + "." + self.auth_name
subprocess.call(["java", "-jar", self.jfed_jar, "create", "-S", \
self.proj_name, "--rspec", \
@@ -136,17 +127,22 @@ class Testbed(mod.Testbed):
rspec = xml.parse(self.manifest)
xml_nodes = rspec.getElementsByTagName("node")
+ # Complete details of the nodes after swapin
for xml_node in xml_nodes:
n_name = xml_node.getAttribute("client_id")
intfs = xml_node.getElementsByTagName("interface")
- for link in links:
- if link.node_a.name == n_name:
- interface = link.int_a
- if link.node_b.name == n_name:
- interface = link.int_b
+
+ for node in experiment.nodes:
+ if node.name == n_name:
+ node_n = node
+
for intf in intfs:
- comp_id = intf.getAttribute("component_id")
- comp_arr = comp_id.split(":")
- interface.name = comp_arr[-1]
- xml_ip = intf.getElementsByTagName("ip")
- interface.ip = xml_ip[0].getAttribute("address")
+ i_name = intf.getAttribute("client_id")
+ for ipcp in node_n.ipcps:
+ if type(ipcp) is mod.ShimEthIPCP:
+ if ipcp.if_id == i_name:
+ comp_id = intf.getAttribute("component_id")
+ comp_arr = comp_id.split(":")
+ ipcp.ifname = comp_arr[-1]
+ #xml_ip = intf.getElementsByTagName("ip")
+ #interface.ip = xml_ip[0].getAttribute("address")