[libvirt] [PATCH 2/4] bhyve: virBhyveProbeCaps: BHYVE_CAP_LPC_BOOTROM

Fabian Freyer fabian.freyer at physik.tu-berlin.de
Thu Jun 30 03:10:45 UTC 2016


Implement the BHACE_CAP_LPC_BOOTROM capability by checking the stderr
output of 'bhyve -l bootrom'. If the bootrom option is unsupported, this
will contain the following output:

    bhyve: invalid lpc device configuration 'bootrom'

On newer bhyve versions that do support specifying a bootrom image, the
standard help will be printed.
---
 src/bhyve/bhyve_capabilities.c | 28 ++++++++++++++++++++++++++++
 src/bhyve/bhyve_capabilities.h |  1 +
 2 files changed, 29 insertions(+)

diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c
index cf764c0..5d0485e 100644
--- a/src/bhyve/bhyve_capabilities.c
+++ b/src/bhyve/bhyve_capabilities.c
@@ -166,6 +166,31 @@ bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
     return ret;
 }
 
+static int
+bhyveProbeCapsLPC_Bootrom(unsigned int *caps, char *binary)
+{
+    char *error;
+    virCommandPtr cmd = NULL;
+    int ret = 0, exit;
+
+    cmd = virCommandNew(binary);
+    virCommandAddArgList(cmd, "-l", "bootrom", NULL);
+    virCommandSetErrorBuffer(cmd, &error);
+    if (virCommandRun(cmd, &exit) < 0) {
+        ret = -1;
+        goto out;
+    }
+
+    if (strstr(error, "bhyve: invalid lpc device configuration 'bootrom'") == NULL)
+        *caps |= BHYVE_CAP_LPC_BOOTROM;
+
+ out:
+    VIR_FREE(error);
+    virCommandFree(cmd);
+    return ret;
+}
+
+
 int
 virBhyveProbeCaps(unsigned int *caps)
 {
@@ -181,6 +206,9 @@ virBhyveProbeCaps(unsigned int *caps)
     if ((ret = bhyveProbeCapsRTC_UTC(caps, binary)))
         goto out;
 
+    if ((ret = bhyveProbeCapsLPC_Bootrom(caps, binary)))
+        goto out;
+
  out:
     VIR_FREE(binary);
     return ret;
diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h
index 0eb22a4..5ea3294 100644
--- a/src/bhyve/bhyve_capabilities.h
+++ b/src/bhyve/bhyve_capabilities.h
@@ -33,6 +33,7 @@ typedef enum {
 
 typedef enum {
     BHYVE_CAP_RTC_UTC = 1,
+    BHYVE_CAP_LPC_BOOTROM = 2,
 } virBhyveCapsFlags;
 
 int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps);
-- 
2.7.0




More information about the libvir-list mailing list