]> xenbits.xensource.com Git - libvirt.git/commitdiff
libxl: fix support for <interface type="hostdev"> syntax
authorChunyan Liu <cyliu@suse.com>
Thu, 8 May 2014 06:44:04 +0000 (14:44 +0800)
committerJim Fehlig <jfehlig@suse.com>
Mon, 12 May 2014 20:52:50 +0000 (14:52 -0600)
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>
src/libxl/libxl_conf.c

index 298c8a1333a789de9a9ef8fc605a856ec01a8ea4..b7fed7fc1fcbfedf64f4e85da7f88c5702645586 100644 (file)
@@ -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;