aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rumba/prototypes/rlite.py87
1 files changed, 76 insertions, 11 deletions
diff --git a/rumba/prototypes/rlite.py b/rumba/prototypes/rlite.py
index 0ff680d..9568d7e 100644
--- a/rumba/prototypes/rlite.py
+++ b/rumba/prototypes/rlite.py
@@ -1,7 +1,7 @@
#
# Commands to setup and instruct rlite
#
-# Vincenzo Maffione <v.maffione@nextworks.it>
+# Author: 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
@@ -22,13 +22,18 @@ import rumba.ssh_support as ssh
import rumba.model as mod
import time
-# An experiment over the RLITE implementation
+# An experiment over the rlite implementation
class Experiment(mod.Experiment):
+
def __init__(self, testbed, nodes=None):
mod.Experiment.__init__(self, testbed, nodes)
- def setup(self):
- cmds = list()
+ def execute_commands(self, node, cmds):
+ ssh.execute_commands(self.testbed, node.ssh_config,
+ cmds, time_out=None)
+
+ def init(self):
+ cmds = []
if False: # ubuntu
cmds.append("apt-get update")
@@ -38,19 +43,79 @@ class Experiment(mod.Experiment):
cmds.append("rm -rf ~/rlite")
cmds.append("cd ~; git clone https://github.com/vmaffione/rlite")
cmds.append("cd ~/rlite && ./configure && make && sudo make install")
+
+ # Load kernel modules
cmds.append("modprobe rlite")
cmds.append("modprobe rlite-normal")
cmds.append("modprobe rlite-shim-eth")
cmds.append("modprobe rlite-shim-udp4")
cmds.append("modprobe rlite-shim-loopback")
- cmds.append("nohup rlite-uipcps -v DBG -k 0 -U -A &> uipcp.log &")
+
+ # Start the uipcps daemon
+ cmds.append("rlite-uipcps -v DBG -k 0 &> uipcp.log &")
for node in self.nodes:
- ssh.execute_commands(self.testbed, node.ssh_config,
- cmds, time_out=None)
+ self.execute_commands(node, cmds)
+
+ def create_ipcps(self):
+ for node in self.nodes:
+ cmds = []
+
+ for ipcp in node.ipcps:
+ # Generate the command to create the IPCP
+ if type(ipcp.dif) is mod.NormalDIF:
+ ipcp_type = 'normal'
+ elif type(ipcp.dif) is mod.ShimEthDIF:
+ ipcp_type = 'shim-eth'
+ elif type(ipcp.dif) is mod.ShimUDPDIF:
+ ipcp_type = 'shim-udp4'
+ else:
+ print("unknown type for DIF %s, default to loopback" \
+ % ipcp.dif.name)
+ ipcp_type = 'shim-loopback'
+
+ cmds.append("rlite-ctl ipcp-create %s %s %s" % \
+ (ipcp.name, ipcp_type, ipcp.dif.name))
+
+ # Generate the command to configure the interface
+ # name for the shim-eth
+ if type(ipcp.dif) is mod.ShimEthDIF:
+ ipcp.ifname = 'eth1'
+ cmds.append("rlite-ctl ipcp-config %s netdev %s" \
+ % (ipcp.name, ipcp.ifname))
+
+ self.execute_commands(node, cmds)
+
+ def register_ipcps(self):
+ for node in self.nodes:
+ cmds = []
+
+ for ipcp in node.ipcps:
+ for lower in ipcp.registrations:
+ cmds.append("rlite-ctl ipcp-register %s %s" \
+ % (ipcp.name, lower.name))
+
+ self.execute_commands(node, cmds)
+
+ def enroll_ipcps(self):
+ for el in self.enrollments:
+ for e in el:
+ d = {'enrollee': e['enrollee'].name,
+ 'dif': e['dif'].name,
+ 'lower_dif': e['lower_dif'].name,
+ 'enroller': e['enroller'].name
+ }
+ cmd = "rlite-ctl ipcp-enroll %(enrollee)s %(dif)s "\
+ "%(lower_dif)s %(enroller)s" % d
+ self.execute_commands(e['enrollee'], [cmd])
def run_prototype(self):
- print("[RLITE experiment] start")
- print("Setting up rlite on the nodes...")
- self.setup()
- print("[RLITE experiment] end")
+ print("rlite: setting up")
+ self.init()
+ print("rlite: software initialized on all nodes")
+ self.create_ipcps()
+ print("rlite: IPCPs created on all nodes")
+ self.register_ipcps()
+ print("rlite: IPCPs registered to their lower DIFs on all nodes")
+ self.enroll_ipcps()
+ print("rlite: enrollment completed in all DIFs")