aboutsummaryrefslogtreecommitdiff
path: root/rumba/prototypes/ouroboros.py
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri.staessens@ugent.be>2017-11-12 18:05:00 +0100
committerDimitri Staessens <dimitri.staessens@ugent.be>2017-11-13 11:54:54 +0100
commitfb07e4517e2e0649d2106968ff1589f23950db16 (patch)
tree118dab1bb5be8c45ab237990fe4cf596860f5a51 /rumba/prototypes/ouroboros.py
parent16529f5a517e4952921d29ddcb89b73c8dbcd2e4 (diff)
downloadrumba-fb07e4517e2e0649d2106968ff1589f23950db16.tar.gz
rumba-fb07e4517e2e0649d2106968ff1589f23950db16.zip
prototypes: Fix ouroboros multi-layer enrollment
Enrollments were performed together before connection setup was performed in lower rank DIFs, which caused IPCPs of N+1 DIFs to enroll over DIFs that had no data transfer connectivity. Enrollment and connection establishment are now performed per-DIF to solve this.
Diffstat (limited to 'rumba/prototypes/ouroboros.py')
-rw-r--r--rumba/prototypes/ouroboros.py82
1 files changed, 39 insertions, 43 deletions
diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py
index 97cd05f..cb0bf08 100644
--- a/rumba/prototypes/ouroboros.py
+++ b/rumba/prototypes/ouroboros.py
@@ -51,8 +51,10 @@ class Experiment(mod.Experiment):
cmds.append("sudo apt-get update")
cmds.append("sudo apt-get install cmake protobuf-c-compiler " +
- "git libfuse-dev --yes")
- cmds.append("sudo rm -r ~/ouroboros/build")
+ "git libfuse-dev libgcrypt20-dev libssl-dev --yes")
+ cmds.append("sudo apt-get install libprotobuf-c-dev --yes || true")
+ cmds.append("sudo rm -r ~/ouroboros || true")
+ cmds.append("git clone -b be git://ouroboros.ilabt.imec.be/ouroboros")
cmds.append("cd ~/ouroboros; sudo ./install_debug.sh /")
for node in self.nodes:
@@ -104,44 +106,36 @@ class Experiment(mod.Experiment):
ssh.execute_commands(self.testbed, node.ssh_config, cmds,
time_out=None)
- def enroll_ipcps(self):
- for el in self.enrollments:
- for e in el:
- ipcp = e['enrollee']
- cmds = list()
- cmd = "irm i e n " + ipcp.name + " dif " + e['dif'].name
- cmds.append(cmd)
- cmd = "irm b i " + ipcp.name + " name " + ipcp.dif.name
- cmds.append(cmd)
- cmd = "irm r n " + ipcp.name
- for dif_b in e['enrollee'].node.dif_registrations[ipcp.dif]:
- cmd += " dif " + dif_b.name
- cmds.append(cmd)
- cmd = "irm r n " + ipcp.dif.name
- for dif_b in e['enrollee'].node.dif_registrations[ipcp.dif]:
- cmd += " dif " + dif_b.name
- cmds.append(cmd)
+ def enroll_dif(self, el):
+ for e in el:
+ ipcp = e['enrollee']
+ cmds = list()
+ cmd = "irm i e n " + ipcp.name + " dif " + e['dif'].name
+ cmds.append(cmd)
+ cmd = "irm b i " + ipcp.name + " name " + ipcp.dif.name
+ cmds.append(cmd)
+ cmd = "irm r n " + ipcp.name
+ for dif_b in e['enrollee'].node.dif_registrations[ipcp.dif]:
+ cmd += " dif " + dif_b.name
+ cmds.append(cmd)
+ cmd = "irm r n " + ipcp.dif.name
+ for dif_b in e['enrollee'].node.dif_registrations[ipcp.dif]:
+ cmd += " dif " + dif_b.name
+ cmds.append(cmd)
+
+ ssh.execute_commands(self.testbed,
+ e['enrollee'].node.ssh_config,
+ cmds, time_out=None)
- ssh.execute_commands(self.testbed,
- e['enrollee'].node.ssh_config,
- cmds, time_out=None)
-
- def setup_flows(self, flows):
- for el in flows:
- for e in el:
- ipcp = e['src']
- if flows == self.mgmt_flows:
- comp = 'mgmt'
- elif flows == self.dt_flows:
- comp = 'dt'
- else:
- assert(False)
+ def setup_flows(self, el, comp):
+ for e in el:
+ ipcp = e['src']
+ cmd = "irm i conn n " + ipcp.name + " comp " + \
+ comp + " dst " + e['dst'].name
- cmd = "irm i conn n " + ipcp.name + " comp " + \
- comp + " dst " + e['dst'].name
- ssh.execute_command(self.testbed,
- ipcp.node.ssh_config,
- cmd, time_out=None)
+ ssh.execute_command(self.testbed,
+ ipcp.node.ssh_config,
+ cmd, time_out=None)
def install_prototype(self):
logger.info("Installing Ouroboros...")
@@ -154,9 +148,11 @@ class Experiment(mod.Experiment):
logger.info("Creating IPCPs")
self.create_ipcps()
logger.info("Enrolling IPCPs...")
- self.enroll_ipcps()
- logger.info("Setting up management flows...")
- self.setup_flows(self.mgmt_flows)
- logger.info("Setting up data transfer flows...")
- self.setup_flows(self.dt_flows)
+ i = 0
+ for element in self.enrollments:
+ self.enroll_dif(element)
+ self.setup_flows(self.mgmt_flows[i], comp="mgmt")
+ self.setup_flows(self.dt_flows[i], comp="dt")
+ i = i + 1
+
logger.info("All done, have fun!")