diff options
-rw-r--r-- | rumba/prototypes/rlite.py | 87 |
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 <[email protected]> +# Author: Vincenzo Maffione <[email protected]> # # 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") |