aboutsummaryrefslogtreecommitdiff
path: root/rumba/testbeds
diff options
context:
space:
mode:
Diffstat (limited to 'rumba/testbeds')
-rw-r--r--rumba/testbeds/jfed.py51
-rw-r--r--rumba/testbeds/qemu.py31
2 files changed, 73 insertions, 9 deletions
diff --git a/rumba/testbeds/jfed.py b/rumba/testbeds/jfed.py
index 5394146..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__)
@@ -38,7 +38,12 @@ class Testbed(mod.Testbed):
proj_name="ARCFIRE", authority="wall2.ilabt.iminds.be",
image=None):
passwd = getpass.getpass(prompt="Password for certificate file: ")
- mod.Testbed.__init__(self, exp_name, username, passwd, proj_name)
+ mod.Testbed.__init__(self,
+ exp_name,
+ username,
+ passwd,
+ proj_name,
+ http_proxy="https://proxy.atlantis.ugent.be:8080")
self.authority = "urn:publicid:IDN+" + authority + "+authority+cm"
self.auth_name = authority
self.cert_file = cert_file
@@ -49,7 +54,7 @@ class Testbed(mod.Testbed):
self.jfed_jar = "jfed_cli/experimenter-cli.jar"
if image is not None:
self.image = "urn:publicid:IDN+" + authority + \
- "+image+GeniSlices:" + image
+ "+image+wall2-ilabt-iminds-be:" + image
else:
self.image = None
@@ -63,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()
@@ -164,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 a916525..df02ab6 100644
--- a/rumba/testbeds/qemu.py
+++ b/rumba/testbeds/qemu.py
@@ -26,24 +26,25 @@ import os
import rumba.model as mod
import rumba.log as log
import rumba.ssh_support as ssh_support
+import wget
logger = log.get_logger(__name__)
class Testbed(mod.Testbed):
- def __init__(self, exp_name, bzimage, initramfs, proj_name="ARCFIRE",
+ def __init__(self, exp_name, bzimage=None, initramfs=None, proj_name="ARCFIRE",
password="root", username="root",
use_vhost=True, qemu_logs_dir=None):
mod.Testbed.__init__(self, exp_name, username, password, proj_name)
self.vms = {}
self.shims = []
- self.bzimage = bzimage
- self.initramfs = initramfs
self.vhost = use_vhost
self.qemu_logs_dir = os.getcwd() if qemu_logs_dir is None \
else qemu_logs_dir
self.boot_processes = []
+ self.bzimage = bzimage
+ self.initramfs = initramfs
@staticmethod
def _run_command_chain(commands, results_queue,
@@ -110,10 +111,34 @@ 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')
logger.info("swapping in")
+
+ # Download the proper buildroot images, if the user did not specify
+ # local images
+ url_prefix = "https://bitbucket.org/vmaffione/rina-images/downloads/"
+ if not self.bzimage:
+ self.bzimage = '%s.bzImage' % (experiment.prototype_name())
+ if not os.path.exists(self.bzimage):
+ logger.info("Downloading %s" % (url_prefix + self.bzimage))
+ wget.download(url_prefix + self.bzimage)
+ print("\n")
+ if not self.initramfs:
+ self.initramfs = '%s.rootfs.cpio' % (experiment.prototype_name())
+ if not os.path.exists(self.initramfs):
+ logger.info("Downloading %s" % (url_prefix + self.initramfs))
+ wget.download(url_prefix + self.initramfs)
+ print("\n")
+
logger.info('Setting up interfaces.')
# Building bridges and taps