diff options
author | Marco Capitani <m.capitani@nextworks.it> | 2017-04-14 09:45:04 +0200 |
---|---|---|
committer | Marco Capitani <m.capitani@nextworks.it> | 2017-04-14 09:45:04 +0200 |
commit | 1ccea182dbde7cc2b875f8a5e5434b0f7ba822cd (patch) | |
tree | 58ef3799038e8dd5cf60ba0277bd2fcf3fd0f377 /rumba/testbeds/qemu.py | |
parent | af692809383b55ec3b9d7cb96e50b553ffbcd496 (diff) | |
parent | a2b315d257e595af10cf55abdcf026c7c0954020 (diff) | |
download | rumba-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.py | 39 |
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 |