From fb07e4517e2e0649d2106968ff1589f23950db16 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Sun, 12 Nov 2017 18:05:00 +0100 Subject: 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. --- rumba/prototypes/ouroboros.py | 82 ++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 43 deletions(-) (limited to 'rumba/prototypes/ouroboros.py') 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!") -- cgit v1.2.3