aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rumba/model.py1
-rwxr-xr-xrumba/prototypes/enroll.py8
-rw-r--r--rumba/prototypes/irati.py28
-rw-r--r--rumba/ssh_support.py10
-rw-r--r--rumba/testbeds/jfed.py42
-rwxr-xr-xrumba/testbeds/mac2ifname.sh2
-rw-r--r--rumba/testbeds/qemu.py7
-rwxr-xr-xtools/democonf2rumba.py2
8 files changed, 74 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..2ae4723 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"""
+ time.sleep(5)
+ logger.info("Waiting 5 seconds for the ipcm to start.")
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/mac2ifname.sh b/rumba/testbeds/mac2ifname.sh
new file mode 100755
index 0000000..5a87ee1
--- /dev/null
+++ b/rumba/testbeds/mac2ifname.sh
@@ -0,0 +1,2 @@
+mac="$1"
+cd / && ./sbin/ifconfig -a | awk '/^[a-z]/ { if ( "'"$mac"'" == $5 ) print $1}'
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')