aboutsummaryrefslogtreecommitdiff
path: root/rumba/prototypes/ouroboros.py
diff options
context:
space:
mode:
Diffstat (limited to 'rumba/prototypes/ouroboros.py')
-rw-r--r--rumba/prototypes/ouroboros.py79
1 files changed, 59 insertions, 20 deletions
diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py
index 6dec9e4..c588405 100644
--- a/rumba/prototypes/ouroboros.py
+++ b/rumba/prototypes/ouroboros.py
@@ -25,11 +25,13 @@
#
import time
+import subprocess
import rumba.ssh_support as ssh
import rumba.model as mod
import rumba.multiprocess as m_processing
import rumba.log as log
+import rumba.testbeds.faketestbed as fake
logger = log.get_logger(__name__)
@@ -53,13 +55,33 @@ class Experiment(mod.Experiment):
def prototype_name(self):
return 'ouroboros'
+ def exec_local_cmd(self, cmd):
+ try:
+ logger.info(cmd)
+ subprocess.check_call(cmd.split(' '))
+ except subprocess.CalledProcessError as e:
+ logger.error("Return code was " + str(e.returncode))
+ raise
+
+ def exec_local_cmds(self, cmds):
+ for cmd in cmds:
+ self.exec_local_cmd(cmd)
+
def setup_ouroboros(self):
- for node in self.nodes:
- ssh.execute_command(self.testbed, node.ssh_config,
- "sudo nohup irmd > /dev/null &",
- time_out=None)
+ if isinstance(self.testbed, fake.Testbed):
+ self.irmd = subprocess.Popen(["irmd"])
+ logger.info("Started IRMd, sleeping 2 seconds...")
+ time.sleep(2)
+ else:
+ for node in self.nodes:
+ ssh.execute_command(self.testbed, node.ssh_config,
+ "sudo nohup irmd > /dev/null &",
+ time_out=None)
def install_ouroboros(self):
+ if isinstance(self.testbed, fake.Testbed):
+ return
+
packages = ["cmake", "protobuf-c-compiler", "git", "libfuse-dev",
"libgcrypt20-dev", "libssl-dev"]
@@ -97,11 +119,11 @@ class Experiment(mod.Experiment):
cmd = "irm i c n " + ipcp.name
if isinstance(ipcp.dif, mod.ShimEthDIF):
- # NOTE: Here to test with fake testbed
- if ipcp.ifname is None:
- ipcp.ifname = "eth0"
- cmd += " type eth-llc if_name " + ipcp.ifname
- cmd += " layer " + ipcp.dif.name
+ if isinstance(self.testbed, fake.Testbed):
+ cmd += " type local layer " + ipcp.dif.name
+ else:
+ cmd += " type eth-llc if_name " + ipcp.ifname
+ cmd += " layer " + ipcp.dif.name
elif isinstance(ipcp.dif, mod.NormalDIF):
cmd += " type normal"
if ipcp.dif_bootstrapper:
@@ -131,8 +153,11 @@ class Experiment(mod.Experiment):
# Postpone registrations
self.r_ipcps[ipcp] = cmds2
- ssh.execute_commands(self.testbed, node.ssh_config, cmds,
- time_out=None)
+ if isinstance(self.testbed, fake.Testbed):
+ self.exec_local_cmds(cmds)
+ else:
+ ssh.execute_commands(self.testbed, node.ssh_config, cmds,
+ time_out=None)
def enroll_dif(self, el):
for e in el:
@@ -141,9 +166,13 @@ class Experiment(mod.Experiment):
# Execute postponed registration
if e['enroller'] in self.r_ipcps:
- ssh.execute_commands(self.testbed,
- e['enroller'].node.ssh_config,
- self.r_ipcps[e['enroller']], time_out=None)
+ if isinstance(self.testbed, fake.Testbed):
+ self.exec_local_cmds(self.r_ipcps[e['enroller']])
+ else:
+ ssh.execute_commands(self.testbed,
+ e['enroller'].node.ssh_config,
+ self.r_ipcps[e['enroller']],
+ time_out=None)
self.r_ipcps.pop(e['enroller'], None)
cmd = "irm r n " + ipcp.name
@@ -158,9 +187,12 @@ class Experiment(mod.Experiment):
cmd += " layer " + dif_b.name
cmds.append(cmd)
- ssh.execute_commands(self.testbed,
- e['enrollee'].node.ssh_config,
- cmds, time_out=None)
+ if isinstance(self.testbed, fake.Testbed):
+ self.exec_local_cmds(cmds)
+ else:
+ ssh.execute_commands(self.testbed,
+ e['enrollee'].node.ssh_config,
+ cmds, time_out=None)
def setup_flows(self, el, comp):
for e in el:
@@ -168,9 +200,12 @@ class Experiment(mod.Experiment):
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)
+ if isinstance(self.testbed, fake.Testbed):
+ self.exec_local_cmd(cmd)
+ else:
+ ssh.execute_command(self.testbed,
+ ipcp.node.ssh_config,
+ cmd, time_out=None)
def _install_prototype(self):
logger.info("Installing Ouroboros...")
@@ -192,3 +227,7 @@ class Experiment(mod.Experiment):
self.setup_flows(dt, comp="dt")
logger.info("All done, have fun!")
+
+ def _terminate_prototype(self):
+ if isinstance(self.testbed, fake.Testbed):
+ self.irmd.terminate()