aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example.py3
-rw-r--r--ouroboros_support.py42
-rwxr-xr-xrhumba.py57
-rw-r--r--rhumba_irati.py50
-rw-r--r--rhumba_ouroboros.py60
-rw-r--r--rhumba_rlite.py51
6 files changed, 183 insertions, 80 deletions
diff --git a/example.py b/example.py
index 931eb73..6013173 100644
--- a/example.py
+++ b/example.py
@@ -3,6 +3,9 @@
# An example script using rhumba.py
from rhumba import *
+import rhumba_ouroboros as our
+import rhumba_rlite as rl
+import rhumba_irati as irati
n1 = NormalDIF("n1", policies = {"rmt.pff": "lfa",
"security-manager": "passwd"})
diff --git a/ouroboros_support.py b/ouroboros_support.py
deleted file mode 100644
index 061c097..0000000
--- a/ouroboros_support.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Commands to instruct Ouroboros
-#
-# Sander Vrijders <sander.vrijders@intec.ugent.be>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA 02110-1301 USA
-
-import ssh_support as ssh
-
-def setup_ouroboros(testbed, nodes):
- cmds = list()
-
- cmds.append("sudo apt-get update")
- cmds.append("sudo apt-get install cmake protobuf-c-compiler git --yes")
- cmds.append("sudo rm -r ~/ouroboros/build")
- cmds.append("cd ~/ouroboros; sudo ./install_release.sh")
- cmds.append("sudo nohup irmd > /dev/null &")
-
- for node in nodes:
- ssh.execute_commands(testbed, node.full_name, cmds, time_out = None)
- return
-
-def bind_names(testbed, nodes):
- for node in nodes:
- cmds = list()
- for name, ap in node.bindings.items():
- cmds.append("irm b ap " + ap + " n " + name)
-
- ssh.execute_commands(testbed, node.full_name, cmds, time_out = None)
diff --git a/rhumba.py b/rhumba.py
index fbcfc8f..1ffd092 100755
--- a/rhumba.py
+++ b/rhumba.py
@@ -23,7 +23,6 @@ import emulab_support as es
import jfed_support as js
import abc
import getpass
-import ouroboros_support as our
# Represents generic testbed info
#
@@ -41,7 +40,8 @@ class Testbed:
@abc.abstractmethod
def create_experiment(self, nodes, links):
- return
+ raise Exception('create_experiment() not implemented')
+
# Represents an emulab testbed info
#
@@ -62,6 +62,7 @@ class EmulabTestbed:
es.wait_until_nodes_up(self)
es.complete_experiment_graph(self, nodes, links)
+
class jFedTestbed:
def __init__(self, exp_name, username, cert_file, jfed_jar, exp_hours = "2",
proj_name = "ARCFIRE", authority = "wall2.ilabt.iminds.be"):
@@ -76,6 +77,17 @@ class jFedTestbed:
def create_experiment(self, nodes, links):
js.create_experiment(self, nodes, links)
+
+# Fake testbed, useful for testing
+class FakeTestbed:
+ def __init__(self, exp_name, username, proj_name = "ARCFIRE",
+ password = ""):
+ Testbed.__init__(self, exp_name, username, password, proj_name)
+
+ def create_experiment(self, nodes, links):
+ print("[Fake testbed] experiment swapped in")
+
+
# Represents an interface on a node
#
# @name [string] interface name
@@ -277,46 +289,15 @@ class Experiment:
def add_node(self, node):
self.nodes.append(node)
- def add_node(self, node):
+ def del_node(self, node):
self.nodes.remove(node)
- def run(self):
+ # Realize the experiment, using a testbed-specific setup
+ def swap_in(self):
self.links = get_links(self.nodes)
self.testbed.create_experiment(self.nodes, self.links)
-# An experiment over the IRATI implementation
-class IRATIExperiment(Experiment):
- def __init__(self, testbed, nodes = list()):
- Experiment.__init__(self, testbed, nodes)
-
- def run(self):
- print("[IRATI experiment] start")
- Experiment.run(self)
- print("[IRATI experiment] end")
-
-
-# An experiment over the RLITE implementation
-class RLITEExperiment(Experiment):
- def __init__(self, testbed, nodes = list()):
- Experiment.__init__(self, testbed, nodes)
-
+ @abc.abstractmethod
def run(self):
- print("[RLITE experiment] start")
- Experiment.run(self)
- print("[RLITE experiment] end")
-
+ raise Exception('run() method not implemented')
-# An experiment over the Ouroboros implementation
-class OuroborosExperiment(Experiment):
- def __init__(self, testbed, nodes = list()):
- Experiment.__init__(self, testbed, nodes)
-
- def run(self):
- print("[Ouroboros experiment] start")
- print("Creating resources...")
- Experiment.run(self)
- print("Setting up Ouroboros...")
- our.setup_ouroboros(self.testbed, self.nodes)
- print("Binding names...")
- our.bind_names(self.testbed, self.nodes)
- print("[Ouroboros experiment] end")
diff --git a/rhumba_irati.py b/rhumba_irati.py
new file mode 100644
index 0000000..d5c66d2
--- /dev/null
+++ b/rhumba_irati.py
@@ -0,0 +1,50 @@
+#
+# Commands to setup and instruct IRATI
+#
+# Vincenzo Maffione <v.maffione@nextworks.it>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+
+import ssh_support as ssh
+import rhumba
+
+
+# An experiment over the IRATI implementation
+class IRATIExperiment(rhumba.Experiment):
+ def __init__(self, testbed, nodes = list()):
+ rhumba.Experiment.__init__(self, testbed, nodes)
+
+ def setup(self):
+ cmds = list()
+
+ cmds.append("sudo apt-get update")
+ cmds.append("sudo apt-get install g++ gcc "
+ "protobuf-compiler libprotobuf-dev git --yes")
+ cmds.append("sudo rm -rf ~/irati")
+ cmds.append("cd && git clone https://github.com/IRATI/stack irati")
+ cmds.append("cd ~/irati && sudo ./install-from-scratch")
+ cmds.append("sudo nohup ipcm &> ipcm.log &")
+
+ for node in self.nodes:
+ ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None)
+
+ def run(self):
+ print("[IRATI experiment] start")
+ self.swap_in()
+ print("Setting up IRATI on the nodes...")
+ self.setup()
+ print("[IRATI experiment] end")
+
diff --git a/rhumba_ouroboros.py b/rhumba_ouroboros.py
new file mode 100644
index 0000000..aca1f5f
--- /dev/null
+++ b/rhumba_ouroboros.py
@@ -0,0 +1,60 @@
+#
+# Commands to instruct Ouroboros
+#
+# Sander Vrijders <sander.vrijders@intec.ugent.be>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+
+import ssh_support as ssh
+import rhumba
+
+
+# An experiment over the Ouroboros implementation
+class OuroborosExperiment(rhumba.Experiment):
+ def __init__(self, testbed, nodes = list()):
+ rhumba.Experiment.__init__(self, testbed, nodes)
+
+ def setup_ouroboros(self):
+ cmds = list()
+
+ cmds.append("sudo apt-get update")
+ cmds.append("sudo apt-get install cmake protobuf-c-compiler git --yes")
+ cmds.append("sudo rm -r ~/ouroboros/build")
+ cmds.append("cd ~/ouroboros; sudo ./install_release.sh")
+ cmds.append("sudo nohup irmd > /dev/null &")
+
+ for node in self.nodes:
+ ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None)
+ return
+
+ def bind_names(self):
+ for node in self.nodes:
+ cmds = list()
+ for name, ap in node.bindings.items():
+ cmds.append("irm b ap " + ap + " n " + name)
+
+ ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None)
+
+ def run(self):
+ print("[Ouroboros experiment] start")
+ print("Creating resources...")
+ self.swap_in()
+ print("Setting up Ouroboros...")
+ self.setup_ouroboros()
+ print("Binding names...")
+ self.bind_names()
+ print("[Ouroboros experiment] end")
+
diff --git a/rhumba_rlite.py b/rhumba_rlite.py
new file mode 100644
index 0000000..ac1f081
--- /dev/null
+++ b/rhumba_rlite.py
@@ -0,0 +1,51 @@
+#
+# Commands to setup and instruct rlite
+#
+# Vincenzo Maffione <v.maffione@nextworks.it>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+
+import ssh_support as ssh
+import rhumba
+
+
+# An experiment over the RLITE implementation
+class RLITEExperiment(rhumba.Experiment):
+ def __init__(self, testbed, nodes = list()):
+ rhumba.Experiment.__init__(self, testbed, nodes)
+
+ def setup(self):
+ cmds = list()
+
+ cmds.append("sudo apt-get update")
+ cmds.append("sudo apt-get install g++ gcc cmake "
+ "linux-headers-$(uname -r) "
+ "protobuf-compiler libprotobuf-dev git --yes")
+ cmds.append("sudo rm -rf ~/rlite")
+ cmds.append("cd ~; git clone https://github.com/vmaffione/rlite")
+ cmds.append("cd ~/rlite && ./configure && make && sudo make install")
+ cmds.append("sudo nohup rlite-uipcps -v DBG -k 0 -U -A &> uipcp.log &")
+
+ for node in self.nodes:
+ ssh.execute_commands(self.testbed, node.full_name, cmds, time_out = None)
+
+ def run(self):
+ print("[RLITE experiment] start")
+ self.swap_in()
+ print("Setting up rlite on the nodes...")
+ self.setup()
+ print("[RLITE experiment] end")
+