]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Support network boot for HVM guests in libxl
authorJim Fehlig <jfehlig@suse.com>
Wed, 12 Dec 2012 21:28:24 +0000 (14:28 -0700)
committerJim Fehlig <jfehlig@suse.com>
Thu, 13 Dec 2012 15:05:12 +0000 (08:05 -0700)
The libxl driver ignored boot devices in the domain config,
preventing PXE booting HVM domains.  This patch accounts for
user-specified boot devices when building the libxl domain
configuration.

src/libxl/libxl_conf.c

index 5b6d6fb67e643722fa876d89974a382c973cfea0..55d2ef43b4da4df1cee922f0ba02e194392f5591 100644 (file)
@@ -438,6 +438,8 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, libxl_domain_config *d_config)
     b_info->max_memkb = def->mem.max_balloon;
     b_info->target_memkb = def->mem.cur_balloon;
     if (hvm) {
+        char bootorder[VIR_DOMAIN_BOOT_LAST + 1];
+
         libxl_defbool_set(&b_info->u.hvm.pae,
                           def->features & (1 << VIR_DOMAIN_FEATURE_PAE));
         libxl_defbool_set(&b_info->u.hvm.apic,
@@ -450,6 +452,34 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, libxl_domain_config *d_config)
                 libxl_defbool_set(&b_info->u.hvm.hpet, 1);
             }
         }
+        for (i = 0 ; i < def->os.nBootDevs ; i++) {
+            switch (def->os.bootDevs[i]) {
+                case VIR_DOMAIN_BOOT_FLOPPY:
+                    bootorder[i] = 'a';
+                    break;
+                default:
+                case VIR_DOMAIN_BOOT_DISK:
+                    bootorder[i] = 'c';
+                    break;
+                case VIR_DOMAIN_BOOT_CDROM:
+                    bootorder[i] = 'd';
+                    break;
+                case VIR_DOMAIN_BOOT_NET:
+                    bootorder[i] = 'n';
+                    break;
+            }
+        }
+        if (def->os.nBootDevs == 0) {
+            bootorder[0] = 'c';
+            bootorder[1] = '\0';
+        }
+        else {
+            bootorder[def->os.nBootDevs] = '\0';
+        }
+        if ((b_info->u.hvm.boot = strdup(bootorder)) == NULL) {
+            virReportOOMError();
+            goto error;
+        }
 
         /*
          * The following comment and calculation were taken directly from