forked from pool/libvirt
56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
|
commit fd43d1f8bd3e8381d266f7c2a7e701568b29e2aa
|
||
|
Author: Chunyan Liu <cyliu@suse.com>
|
||
|
Date: Thu May 8 14:44:04 2014 +0800
|
||
|
|
||
|
libxl: fix support for <interface type="hostdev"> syntax
|
||
|
|
||
|
A VIR_DOMAIN_NET_TYPE_HOSTDEV interface device is really a hostdev
|
||
|
device, which is created by the libxl driver in libxlMakePCIList().
|
||
|
There is no need to create a libxl_device_nic for such hostdev
|
||
|
devices, so skip interfaces of type VIR_DOMAIN_NET_TYPE_HOSTDEV in
|
||
|
libxlMakeNicList().
|
||
|
|
||
|
Signed-off-by: Chunyan Liu <cyliu@suse.com>
|
||
|
|
||
|
Index: libvirt-1.2.4/src/libxl/libxl_conf.c
|
||
|
===================================================================
|
||
|
--- libvirt-1.2.4.orig/src/libxl/libxl_conf.c
|
||
|
+++ libvirt-1.2.4/src/libxl/libxl_conf.c
|
||
|
@@ -921,25 +921,31 @@ static int
|
||
|
libxlMakeNicList(virDomainDefPtr def, libxl_domain_config *d_config)
|
||
|
{
|
||
|
virDomainNetDefPtr *l_nics = def->nets;
|
||
|
- int nnics = def->nnets;
|
||
|
+ size_t nnics = def->nnets;
|
||
|
libxl_device_nic *x_nics;
|
||
|
- size_t i;
|
||
|
+ size_t i, nvnics = 0;
|
||
|
|
||
|
if (VIR_ALLOC_N(x_nics, nnics) < 0)
|
||
|
return -1;
|
||
|
|
||
|
for (i = 0; i < nnics; i++) {
|
||
|
- if (libxlMakeNic(def, l_nics[i], &x_nics[i]))
|
||
|
+ if (l_nics[i]->type == VIR_DOMAIN_NET_TYPE_HOSTDEV)
|
||
|
+ continue;
|
||
|
+
|
||
|
+ if (libxlMakeNic(def, l_nics[i], &x_nics[nvnics]))
|
||
|
goto error;
|
||
|
/*
|
||
|
* The devid (at least right now) will not get initialized by
|
||
|
* libxl in the setup case but is required for starting the
|
||
|
* device-model.
|
||
|
*/
|
||
|
- if (x_nics[i].devid < 0)
|
||
|
- x_nics[i].devid = i;
|
||
|
+ if (x_nics[nvnics].devid < 0)
|
||
|
+ x_nics[nvnics].devid = nvnics;
|
||
|
+
|
||
|
+ nvnics++;
|
||
|
}
|
||
|
|
||
|
+ VIR_SHRINK_N(x_nics, nnics, nnics - nvnics);
|
||
|
d_config->nics = x_nics;
|
||
|
d_config->num_nics = nnics;
|
||
|
|