Allow creating of machine with tap devices which are not connected to bridge. Add function for fill virtnet object with address. Signed-off-by: Jiří Župka <jzupka@xxxxxxxxxx> --- client/tests/virt/virttest/kvm_vm.py | 9 +++++---- client/tests/virt/virttest/utils_misc.py | 3 ++- client/tests/virt/virttest/virt_vm.py | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/client/tests/virt/virttest/kvm_vm.py b/client/tests/virt/virttest/kvm_vm.py index 247f0eb..d3b4ede 100644 --- a/client/tests/virt/virttest/kvm_vm.py +++ b/client/tests/virt/virttest/kvm_vm.py @@ -949,7 +949,7 @@ class VM(virt_vm.BaseVM): qemu_cmd += add_name(hlp, name) # no automagic devices please defaults = params.get("defaults", "no") - if has_option(hlp,"nodefaults") and defaults != "yes": + if has_option(hlp, "nodefaults") and defaults != "yes": qemu_cmd += " -nodefaults" # Add monitors for monitor_name in params.objects("monitors"): @@ -1065,7 +1065,7 @@ class VM(virt_vm.BaseVM): for nic in vm.virtnet: # setup nic parameters as needed - nic = vm.add_nic(**dict(nic)) # add_netdev if netdev_id not set + nic = vm.add_nic(**dict(nic)) # add_netdev if netdev_id not set # gather set values or None if unset vlan = int(nic.get('vlan')) netdev_id = nic.get('netdev_id') @@ -2064,7 +2064,7 @@ class VM(virt_vm.BaseVM): nic.set_if_none('nettype', 'bridge') if nic.nettype == 'bridge': # implies tap # destination is required, hard-code reasonable default if unset - nic.set_if_none('netdst', 'virbr0') + # nic.set_if_none('netdst', 'virbr0') # tapfd allocated/set in activate because requires system resources nic.set_if_none('tapfd_id', utils_misc.generate_random_id()) elif nic.nettype == 'user': @@ -2142,7 +2142,8 @@ class VM(virt_vm.BaseVM): error.context("Raising bridge for " + msg_sfx + attach_cmd, logging.debug) # assume this will puke if netdst unset - utils_misc.add_to_bridge(nic.ifname, nic.netdst) + if not nic.netdst is None: + utils_misc.add_to_bridge(nic.ifname, nic.netdst) elif nic.nettype == 'user': attach_cmd += " user,name=%s" % nic.ifname else: # unsupported nettype diff --git a/client/tests/virt/virttest/utils_misc.py b/client/tests/virt/virttest/utils_misc.py index e416551..b4799e7 100644 --- a/client/tests/virt/virttest/utils_misc.py +++ b/client/tests/virt/virttest/utils_misc.py @@ -719,7 +719,8 @@ class VirtIface(PropCan): Networking information for single guest interface and host connection. """ - __slots__ = ['nic_name', 'mac', 'nic_model', 'ip', 'nettype', 'netdst'] + __slots__ = ['nic_name', 'g_nic_name', 'mac', 'nic_model', 'ip', + 'nettype', 'netdst'] # Make sure first byte generated is always zero and it follows # the class definition. This helps provide more predictable # addressing while avoiding clashes between multiple NICs. diff --git a/client/tests/virt/virttest/virt_vm.py b/client/tests/virt/virttest/virt_vm.py index 79dd08b..ff6a0f7 100644 --- a/client/tests/virt/virttest/virt_vm.py +++ b/client/tests/virt/virttest/virt_vm.py @@ -518,6 +518,7 @@ class BaseVM(object): # Make sure the IP address is assigned to one or more macs # for this guest macs = self.virtnet.mac_list() + if not utils_misc.verify_ip_address_ownership(arp_ip, macs): raise VMAddressVerificationError(nic.mac, arp_ip) logging.debug('Found/Verified IP %s for VM %s NIC %s' % ( @@ -525,6 +526,25 @@ class BaseVM(object): return arp_ip + def fill_addrs(self, addrs): + """ + Fill VM's nic address to the virtnet structure based on VM's address + structure addrs. + + @param addrs: Dict of interfaces and address + {"if_name":{"mac":['addrs',], + "ipv4":['addrs',], + "ipv6":['addrs',]}, + ...} + """ + for virtnet in self.virtnet: + for iface_name, iface in addrs.iteritems(): + if virtnet.mac in iface["mac"]: + virtnet.ip = {"ipv4": iface["ipv4"], + "ipv6": iface["ipv6"]} + virtnet.g_nic_name = iface_name + + def get_port(self, port, nic_index=0): """ Return the port in host space corresponding to port in guest space. -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html