aboutsummaryrefslogtreecommitdiff
path: root/rumba/testbeds/qemu.py
diff options
context:
space:
mode:
authorMarco Capitani <m.capitani@nextworks.it>2017-04-14 09:45:04 +0200
committerMarco Capitani <m.capitani@nextworks.it>2017-04-14 09:45:04 +0200
commit1ccea182dbde7cc2b875f8a5e5434b0f7ba822cd (patch)
tree58ef3799038e8dd5cf60ba0277bd2fcf3fd0f377 /rumba/testbeds/qemu.py
parentaf692809383b55ec3b9d7cb96e50b553ffbcd496 (diff)
parenta2b315d257e595af10cf55abdcf026c7c0954020 (diff)
downloadrumba-1ccea182dbde7cc2b875f8a5e5434b0f7ba822cd.tar.gz
rumba-1ccea182dbde7cc2b875f8a5e5434b0f7ba822cd.zip
QEMU: ifname compilation and vm port activation
Diffstat (limited to 'rumba/testbeds/qemu.py')
-rw-r--r--rumba/testbeds/qemu.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/rumba/testbeds/qemu.py b/rumba/testbeds/qemu.py
index da3c7b9..d3e1698 100644
--- a/rumba/testbeds/qemu.py
+++ b/rumba/testbeds/qemu.py
@@ -24,6 +24,7 @@ import subprocess
import os
import rumba.model as mod
+from rumba import ssh_support
class Testbed(mod.Testbed):
@@ -74,6 +75,41 @@ class Testbed(mod.Testbed):
else:
results_queue.put("Command chain ran with %d errors" % errors)
+ def recover_if_names(self, experiment):
+ for node in experiment.nodes:
+ for ipcp in node.ipcps:
+ if isinstance(ipcp, mod.ShimEthIPCP):
+ shim_name, node_name = ipcp.name.split('.')
+ port_set = [x for x in self.vms[node_name]['ports']
+ if x['shim'].name == shim_name]
+ port = port_set[0]
+ port_id = port['port_id']
+ vm_id = self.vms[node_name]['id']
+ mac = '00:0a:0a:0a:%02x:%02x' % (vm_id, port_id)
+ print('DEBUG: recovering ifname for port: '
+ + port['tap_id'] + '.')
+ output = ssh_support.return_commands(
+ self,
+ node.ssh_config,
+ ['mac2ifname ' + mac])
+ print('DEBUG: output is %s' % output)
+ if not hasattr(output, '__len__') or len(output) != 1:
+ raise Exception("Could not retrieve ifname for ipcp %s."
+ % ipcp.name)
+ ipcp.ifname = output[0]
+ args = {'vlan': int(port['shim'].name), 'port': ipcp.ifname}
+ cmds = ['ip link set %(port)s up'
+ % args,
+ 'ip link add link %(port)s name %(port)s.%(vlan)s '
+ 'type vlan id %(vlan)s'
+ % args,
+ 'ip link set %(port)s.%(vlan)s up'
+ % args]
+ ssh_support.execute_commands(self,
+ node.ssh_config,
+ cmds)
+
+
def swap_in(self, experiment):
"""
:type experiment mod.Experiment
@@ -190,6 +226,7 @@ class Testbed(mod.Testbed):
for node in experiment.nodes:
name = node.name
vm = self.vms.setdefault(name, {'vm': node, 'ports': []})
+ vm['id'] = vmid
fwdp = base_port + vmid
fwdc = fwdp + 10000
mac = '00:0a:0a:0a:%02x:%02x' % (vmid, 99)
@@ -266,6 +303,8 @@ class Testbed(mod.Testbed):
print('Sleeping %s secs waiting for the last VMs to boot' % tsleep)
time.sleep(tsleep)
+ self.recover_if_names(experiment)
+
def swap_out(self, experiment):
"""
:rtype str