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.
---
I'm inclined to call this a bug fix since it is not possible
to network boot HVM guests without this patch. Would it be
ok to push this for 1.0.1?
src/libxl/libxl_conf.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 5b6d6fb..4c0e961 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -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
--
1.8.0.1