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.py91
1 files changed, 57 insertions, 34 deletions
diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py
index 51f3629..0c16482 100644
--- a/rumba/prototypes/ouroboros.py
+++ b/rumba/prototypes/ouroboros.py
@@ -34,18 +34,62 @@ import rumba.multiprocess as m_processing
import rumba.log as log
import rumba.testbeds.local as local
import rumba.testbeds.dockertb as docker
-
+import rumba.storyboard as sb
logger = log.get_logger(__name__)
+class OurServer(sb.Server):
+
+ def __init__(self, server):
+ super(OurServer, self).__init__(
+ server.ap,
+ server.arrival_rate,
+ server.actual_parameter + server.min_duration,
+ server.options,
+ server.max_clients,
+ server.clients,
+ server.nodes,
+ server.min_duration,
+ server.id,
+ server.as_root,
+ server.difs
+ )
+
+ def _make_run_cmd(self):
+ o_cmd = super(OurServer, self)._make_run_cmd()
+
+ # Run and store PID
+ n_cmd = 'pid=$(%s); ' % (o_cmd,)
+
+ # Add bind command
+ n_cmd += 'irm b process $pid name %s > /dev/null 2>&1; ' % (self.id,)
+
+ # Build register command
+ r_cmd = 'irm r n %s ' % (self.id,)
+ if len(self.difs) == 0:
+ r_cmd += 'layer \'*\''
+ else:
+ r_cmd += ' '.join('layer %s' % (layer,) for layer in self.difs)
+ r_cmd += ' > /dev/null 2>&1; '
+
+ # Add register command
+ n_cmd += r_cmd
+ n_cmd += 'echo $pid' # We need to return the pid for the sb
+
+ return n_cmd
+
+
class Experiment(mod.Experiment):
"""
Represents an Ouroboros experiment.
"""
- def __init__(self, testbed, nodes=None,
+ def __init__(self,
+ testbed,
+ nodes=None,
git_repo='git://ouroboros.ilabt.imec.be/ouroboros',
- git_branch='master', enrollment_strategy='minimal',
+ git_branch='master',
+ enrollment_strategy='minimal',
dt_strategy='full-mesh'):
"""
Initializes the experiment class.
@@ -57,9 +101,16 @@ class Experiment(mod.Experiment):
:param enrollment_strategy: Can be 'full-mesh', 'minimal' or 'manual'.
:param dt_strategy: For data flows, 'full-mesh', 'minimal' or 'manual'.
"""
- mod.Experiment.__init__(self, testbed, nodes, git_repo, git_branch,
- enrollment_strategy=enrollment_strategy,
- dt_strategy=dt_strategy)
+ mod.Experiment.__init__(
+ self,
+ testbed,
+ nodes,
+ git_repo,
+ git_branch,
+ enrollment_strategy=enrollment_strategy,
+ dt_strategy=dt_strategy,
+ server_decorator=OurServer
+ )
self.r_ipcps = dict()
self.set_startup_command("irmd")
@@ -248,34 +299,6 @@ class Experiment(mod.Experiment):
logger.info("Killing IRMd...")
subprocess.check_call('sudo killall -15 irmd'.split())
- def bind_program(self, node, program, name):
- """
- Bind a program to a certain name on a certain node.
-
- :param node: The node
- :param program: The binary name
- :param name: Name to bind to
- """
- node.execute_command('irm b prog %s name %s' % (program, name))
-
- def register_name(self, node, name, layers):
- """
- Bind a program to a certain name on a certain node.
-
- :param node: The node
- :param name: Name to register
- :param layers: Layers to register in. If it is None,
- then it registers in all layers.
- """
- cmd = 'irm r n %s ' % name
- if layers is None:
- cmd += 'layer \'*\''
- else:
- for layer in layers:
- cmd += 'layer %s ' % layer
-
- node.execute_command(cmd)
-
def destroy_dif(self, dif):
for ipcp in dif.ipcps:
ipcp.node.execute_command('irm i d n ' + ipcp.name)