[libvirt] [PATCH] Support network boot for HVM guests in libxl

Jim Fehlig jfehlig at suse.com
Wed Dec 12 21:42:04 UTC 2012


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




More information about the libvir-list mailing list