diff options
| author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2017-06-13 07:54:38 +0000 | 
|---|---|---|
| committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2017-06-13 07:54:38 +0000 | 
| commit | 53602860e17d650f9ab850cf9a206de6a8712c15 (patch) | |
| tree | 52686db738484abd73b364751988561f1e2a747a | |
| parent | a5e67722327ecb2046798e6ad9a103fb42cb09e8 (diff) | |
| parent | 8e455f04cbb524e50e17ce87a88aa386febe0bea (diff) | |
| download | rumba-53602860e17d650f9ab850cf9a206de6a8712c15.tar.gz rumba-53602860e17d650f9ab850cf9a206de6a8712c15.zip  | |
Merge branch 'jfed-irati-fixes' into 'master'
Jfed irati fixes
See merge request !57
| -rw-r--r-- | rumba/model.py | 1 | ||||
| -rwxr-xr-x | rumba/prototypes/enroll.py | 8 | ||||
| -rw-r--r-- | rumba/prototypes/irati.py | 28 | ||||
| -rw-r--r-- | rumba/ssh_support.py | 10 | ||||
| -rw-r--r-- | rumba/testbeds/jfed.py | 42 | ||||
| -rw-r--r-- | rumba/testbeds/qemu.py | 7 | ||||
| -rwxr-xr-x | tools/democonf2rumba.py | 2 | 
7 files changed, 72 insertions, 26 deletions
diff --git a/rumba/model.py b/rumba/model.py index d1b9988..9818ac7 100644 --- a/rumba/model.py +++ b/rumba/model.py @@ -49,6 +49,7 @@ class Testbed:          self.proj_name = proj_name          self.exp_name = exp_name          self.http_proxy = http_proxy +        self.flags = {'no_vlan_offload': False}      @abc.abstractmethod      def swap_in(self, experiment): diff --git a/rumba/prototypes/enroll.py b/rumba/prototypes/enroll.py index 458736a..99b49a6 100755 --- a/rumba/prototypes/enroll.py +++ b/rumba/prototypes/enroll.py @@ -78,8 +78,8 @@ if connected:          get_response(s)          # Send the IPCP list command -        cmd = 'list-ipcps\n' -        s.sendall(bytes(cmd, 'ascii')) +        cmd = u'list-ipcps\n' +        s.sendall(cmd.encode('ascii'))          # Get the list of IPCPs and parse it to look for the enroller ID          print('Looking up identifier for IPCP %s' % args.enrollee_name) @@ -98,11 +98,11 @@ if connected:              raise Exception()          # Send the enroll command -        cmd = 'enroll-to-dif %s %s %s %s 1\n' \ +        cmd = u'enroll-to-dif %s %s %s %s 1\n' \                  % (enrollee_id, args.dif, args.lower_dif, args.enroller_name)          print(cmd) -        s.sendall(bytes(cmd, 'ascii')) +        s.sendall(cmd.encode('ascii'))          # Get the enroll command answer          lines = get_response(s) diff --git a/rumba/prototypes/irati.py b/rumba/prototypes/irati.py index 462933b..42afe3b 100644 --- a/rumba/prototypes/irati.py +++ b/rumba/prototypes/irati.py @@ -21,8 +21,6 @@  import copy  import json -import subprocess -  import os  import time @@ -72,14 +70,19 @@ class Experiment(mod.Experiment):      def install(self):          """Installs IRATI on the nodes.""" -        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 = [self.sudo("apt-get update"), +                "export https_proxy=\"https://proxy.atlantis.ugent.be:8080\"; " +                + self.sudo("apt-get install g++ gcc " +                            "protobuf-compiler libprotobuf-dev git --yes " +                            "pkg-config " +                            "libnl-3-dev libnl-genl-3-dev"), +                self.sudo("rm -rf ~/irati"), +                "cd ~; " +                "export https_proxy=\"https://proxy.atlantis.ugent.be:8080\"; " +                + "git clone https://github.com/IRATI/stack irati", +                "cd ~/irati && git checkout arcfire", +                "cd ~/irati && " +                + self.sudo("./install-from-scratch")]          for node in self.nodes:              ssh.execute_proxy_commands(self.testbed, node.ssh_config, @@ -139,7 +142,6 @@ class Experiment(mod.Experiment):                         'genfiles': gen_files,                         'genfilesconf': ' '.join(gen_files_conf),                         'genfilesbin': gen_files_bin, -                       'installpath': '/usr',                         'verb': 'DBG',                         'ipcmcomps': ipcm_components} @@ -159,7 +161,7 @@ class Experiment(mod.Experiment):          cmds += [self.sudo('modprobe rina-default-plugin'),                   self.sudo('modprobe shim-eth-vlan'),                   self.sudo('modprobe normal-ipcp'), -                 self.sudo('%(installpath)s/bin/ipcm -a \"%(ipcmcomps)s\" ' +                 self.sudo('ipcm -a \"%(ipcmcomps)s\" '                             '-c /etc/%(name)s.ipcm.conf -l %(verb)s &> log &'                             % format_args)] @@ -168,6 +170,8 @@ class Experiment(mod.Experiment):      def enroll_nodes(self):          """Runs the enrollments one by one, respecting dependencies""" +        logger.info("Waiting 5 seconds for the ipcm to start.") +        time.sleep(5)          for enrollment_list in self.enrollments:              for e in enrollment_list:                  logger.info( diff --git a/rumba/ssh_support.py b/rumba/ssh_support.py index f8ba03b..a1e1ba4 100644 --- a/rumba/ssh_support.py +++ b/rumba/ssh_support.py @@ -275,9 +275,9 @@ def setup_vlan(testbed, node, vlan_id, int_name):                   % args),              sudo("ifconfig %(ifname)s.%(vlan)s up"                   % args)] -    # TODO: is ethtool needed? Should install or check if it is present. -    # cmds += [sudo("ethtool -K %(ifname)s rxvlan off" -    #               % args), -    #          sudo("ethtool -K %(ifname)s txvlan off" -    #               % args)] +    if testbed.flags['no_vlan_offload']: +        cmds += [sudo("ethtool -K %(ifname)s rxvlan off" +                      % args), +                 sudo("ethtool -K %(ifname)s txvlan off" +                      % args)]      execute_commands(testbed, node.ssh_config, cmds) diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py index c8e7900..83fbce7 100644 --- a/rumba/testbeds/jfed.py +++ b/rumba/testbeds/jfed.py @@ -27,7 +27,7 @@ import tarfile  import rumba.model as mod  import rumba.log as log - +from rumba import ssh_support  logger = log.get_logger(__name__) @@ -68,6 +68,7 @@ class Testbed(mod.Testbed):              tar.close()              logger.info("Extracted in current directory")              os.remove(tarball) +        self.flags['no_vlan_offload'] = True      def create_rspec(self, experiment):          impl = xml.getDOMImplementation() @@ -169,22 +170,55 @@ class Testbed(mod.Testbed):          rspec = xml.parse(self.manifest)          xml_nodes = rspec.getElementsByTagName("node") +        dir_path = os.path.dirname(os.path.abspath(__file__)) +          # Complete details of the nodes after swapin          for xml_node in xml_nodes:              n_name = xml_node.getAttribute("client_id")              intfs = xml_node.getElementsByTagName("interface") +            got = False              for node in experiment.nodes:                  if node.name == n_name:                      node_n = node +                    got = True +            if not got: +                logger.error("Not found node %s", n_name)              for intf in intfs: +                aux_mac_address = intf.getAttribute("mac_address") +                mac = ":".join( +                    [aux_mac_address[i:i+2] for i in range(0, 12, 2)] +                ) +                command = ( +                    'echo "mac=\\"\$1\\"; cd / && ./sbin/ifconfig -a | ' +                    'awk \'/^[a-z]/ { if ( \\"\'\\"\$mac\\"\'\\" == \$5 )' +                    ' print \$1}\'" > mac2ifname.sh') +                ssh_support.execute_command(self, node_n.ssh_config, command) + +                # ssh_support.copy_path_to_testbed( +                #     self, +                #     node_n.ssh_config, +                #     os.path.join(dir_path, 'mac2ifname.sh'), +                #     '') +                ssh_support.execute_command( +                    self, +                    node_n.ssh_config, +                    'cd ~ && chmod a+x mac2ifname.sh') +                ifname = ssh_support.execute_command( +                    self, +                    node_n.ssh_config, +                    './mac2ifname.sh ' + mac +                )                  i_name = intf.getAttribute("client_id")                  for ipcp in node_n.ipcps:                      if isinstance(ipcp, mod.ShimEthIPCP):                          if self.if_id[ipcp] == i_name: -                            comp_id = intf.getAttribute("component_id") -                            comp_arr = comp_id.split(":") -                            ipcp.ifname = comp_arr[-1] +                            ipcp.ifname = ifname +                            logger.debug("Node %s interface %s has name %s." +                                         % (node_n.name, mac, ifname)) +                            # comp_id = intf.getAttribute("component_id") +                            # comp_arr = comp_id.split(":") +                            # ipcp.ifname = comp_arr[-1]                              # xml_ip = intf.getElementsByTagName("ip")                              # interface.ip = xml_ip[0].getAttribute("address") diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py index b7ebef9..df02ab6 100644 --- a/rumba/testbeds/qemu.py +++ b/rumba/testbeds/qemu.py @@ -111,6 +111,13 @@ class Testbed(mod.Testbed):          if os.geteuid() != 0:              try:                  subprocess.check_call(["sudo", "-v"]) +                if not os.access("/dev/vhost-net", os.R_OK) \ +                        or not os.access("/dev/vhost-net", os.W_OK) \ +                        or not os.access("/dev/kvm", os.R_OK) \ +                        or not os.access("/dev/kvm", os.W_OK): +                    raise Exception('Cannot open vhost device. Make sure it is' +                                    'available and you have rw permissions ' +                                    'on /dev/vhost-net')              except subprocess.CalledProcessError:                  raise Exception('Not authenticated') diff --git a/tools/democonf2rumba.py b/tools/democonf2rumba.py index 9c6d64f..dc2f0a4 100755 --- a/tools/democonf2rumba.py +++ b/tools/democonf2rumba.py @@ -210,7 +210,7 @@ if __name__ == '__main__':                          required=True,                          help='Certificate file')      jfed_p.add_argument('-H', '--exp_hours', metavar='HOURS', type=str, -                        default=2, help='Experiment hours') +                        default="2", help='Experiment hours')      jfed_p.add_argument('-A', '--authority', metavar='AUTH', type=str,                          default="wall2.ilabt.iminds.be",                          help='Authority')  | 
