bhyve: virBhyveProbeCaps: BHYVE_CAP_LPC_BOOTROM

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.
This commit is contained in:
Fabian Freyer 2016-05-24 15:30:56 +02:00 committed by Roman Bogorodskiy
parent 321ff4087c
commit b6ae129534
2 changed files with 27 additions and 0 deletions

View File

@ -239,6 +239,29 @@ bhyveProbeCapsNetE1000(unsigned int *caps, char *binary)
return ret;
}
static int
bhyveProbeCapsLPC_Bootrom(unsigned int *caps, char *binary)
{
char *error;
virCommandPtr cmd = NULL;
int ret = -1, exit;
cmd = virCommandNew(binary);
virCommandAddArgList(cmd, "-l", "bootrom", NULL);
virCommandSetErrorBuffer(cmd, &error);
if (virCommandRun(cmd, &exit) < 0)
goto cleanup;
if (strstr(error, "bhyve: invalid lpc device configuration 'bootrom'") == NULL)
*caps |= BHYVE_CAP_LPC_BOOTROM;
ret = 0;
cleanup:
VIR_FREE(error);
virCommandFree(cmd);
return ret;
}
int
virBhyveProbeCaps(unsigned int *caps)
{
@ -260,6 +283,9 @@ virBhyveProbeCaps(unsigned int *caps)
if ((ret = bhyveProbeCapsNetE1000(caps, binary)))
goto out;
if ((ret = bhyveProbeCapsLPC_Bootrom(caps, binary)))
goto out;
out:
VIR_FREE(binary);
return ret;

View File

@ -40,6 +40,7 @@ typedef enum {
BHYVE_CAP_RTC_UTC = 1 << 0,
BHYVE_CAP_AHCI32SLOT = 1 << 1,
BHYVE_CAP_NET_E1000 = 1 << 2,
BHYVE_CAP_LPC_BOOTROM = 1 << 3,
} virBhyveCapsFlags;
int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps);