From: Jim Fehlig Date: Wed, 12 Dec 2012 21:28:24 +0000 (-0700) Subject: Support network boot for HVM guests in libxl X-Git-Tag: v1.0.1-rc2~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f6b5ed5ef0979223dd20a569605c3d3b5c6854cc;p=thirdparty%2Flibvirt.git Support network boot for HVM guests in libxl 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. --- diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 5b6d6fb67e..55d2ef43b4 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