Re: [PATCH] qemu: update netdevs of the same mac addrs correctly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



ping 

On 2015/6/8 16:25, zhang bo wrote:

> If a guest has multiple network devices with the same MAC address,
> when we online update the second device, libvirtd always updates
> the first one.
> 
> commit def31e4c forgot to fix the online updating scenario. We need to
> use virDomainNetFindIdx() to find the correct network device.
> 
> Signed-off-by: Zhou Yimin <zhouyimin@xxxxxxxxxx>
> Signed-off-by: Zhang Bo <oscar.zhangbo@xxxxxxxxxx>
> ---
>  src/qemu/qemu_hotplug.c | 23 +++++++----------------
>  1 file changed, 7 insertions(+), 16 deletions(-)
> 
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 94ebe35..d455bd6 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -2052,20 +2052,6 @@ int qemuDomainAttachHostDevice(virConnectPtr conn,
>      return -1;
>  }
>  
> -static virDomainNetDefPtr *qemuDomainFindNet(virDomainObjPtr vm,
> -                                             virDomainNetDefPtr dev)
> -{
> -    size_t i;
> -
> -    for (i = 0; i < vm->def->nnets; i++) {
> -        if (virMacAddrCmp(&vm->def->nets[i]->mac, &dev->mac) == 0)
> -            return &vm->def->nets[i];
> -    }
> -
> -    return NULL;
> -}
> -
> -
>  static int
>  qemuDomainChangeNetBridge(virDomainObjPtr vm,
>                            virDomainNetDefPtr olddev,
> @@ -2195,7 +2181,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
>                      virDomainDeviceDefPtr dev)
>  {
>      virDomainNetDefPtr newdev = dev->data.net;
> -    virDomainNetDefPtr *devslot = qemuDomainFindNet(vm, newdev);
> +    virDomainNetDefPtr *devslot = NULL;
>      virDomainNetDefPtr olddev;
>      int oldType, newType;
>      bool needReconnect = false;
> @@ -2205,8 +2191,13 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
>      bool needReplaceDevDef = false;
>      bool needBandwidthSet = false;
>      int ret = -1;
> +    int changeidx = -1;
> +
> +    if ((changeidx = virDomainNetFindIdx(vm->def, newdev)) < 0)
> +        goto cleanup;
> +    devslot = &vm->def->nets[changeidx];
>  
> -    if (!devslot || !(olddev = *devslot)) {
> +    if (!(olddev = *devslot)) {
>          virReportError(VIR_ERR_OPERATION_FAILED, "%s",
>                         _("cannot find existing network device to modify"));
>          goto cleanup;



-- 
Oscar    
oscar.zhangbo@xxxxxxxxxx  

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]