diff options
| -rw-r--r-- | rumba/model.py | 2 | ||||
| -rw-r--r-- | rumba/prototypes/rlite.py | 87 | 
2 files changed, 77 insertions, 12 deletions
diff --git a/rumba/model.py b/rumba/model.py index 4ada554..9e6b40d 100644 --- a/rumba/model.py +++ b/rumba/model.py @@ -119,7 +119,7 @@ class NormalDIF(DIF):      def del_policy(self, comp):          del self.policies[comp] -    def __repr__(self): +    def show(self):          s = DIF.__repr__(self)          for comp, pol in self.policies.items():              s += "\n       Component %s has policy %s" % (comp, pol) 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")  | 
