
Michal Privoznik wrote:
On 03/13/2017 07:02 PM, Roman Bogorodskiy wrote:
Introduce config file support for the bhyve driver. The only available setting at present is 'firmware_dir' for specifying a directory with UEFI firmware files. --- src/Makefile.am | 25 +++++++- src/bhyve/bhyve.conf | 7 +++ src/bhyve/bhyve_capabilities.c | 9 ++- src/bhyve/bhyve_capabilities.h | 5 +- src/bhyve/bhyve_conf.c | 112 +++++++++++++++++++++++++++++++++++ src/bhyve/bhyve_conf.h | 32 ++++++++++ src/bhyve/bhyve_driver.c | 11 +++- src/bhyve/bhyve_utils.h | 12 ++++ src/bhyve/libvirtd_bhyve.aug | 39 ++++++++++++ src/bhyve/test_libvirtd_bhyve.aug.in | 5 ++ 10 files changed, 252 insertions(+), 5 deletions(-) create mode 100644 src/bhyve/bhyve.conf create mode 100644 src/bhyve/bhyve_conf.c create mode 100644 src/bhyve/bhyve_conf.h create mode 100644 src/bhyve/libvirtd_bhyve.aug create mode 100644 src/bhyve/test_libvirtd_bhyve.aug.in
diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 5e6094e3c..da06ba711 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -111,7 +111,8 @@ virBhyveCapsBuild(void) }
virDomainCapsPtr -virBhyveDomainCapsBuild(const char *emulatorbin, +virBhyveDomainCapsBuild(bhyveConnPtr conn, + const char *emulatorbin, const char *machine, virArch arch, virDomainVirtType virttype) @@ -120,8 +121,9 @@ virBhyveDomainCapsBuild(const char *emulatorbin, unsigned int bhyve_caps = 0; DIR *dir; struct dirent *entry; - const char *firmware_dir = "/usr/local/share/uefi-firmware"; size_t firmwares_alloc = 0; + virBhyveDriverConfigPtr cfg = virBhyveDriverGetConfig(conn);
You need to unref @cfg.
Fixed.
+ const char *firmware_dir = cfg->firmwareDir;
if (!(caps = virDomainCapsNew(emulatorbin, machine, arch, virttype))) goto cleanup; @@ -152,7 +154,10 @@ virBhyveDomainCapsBuild(const char *emulatorbin,
caps->os.loader.values.nvalues++; } + } else { + VIR_WARN("Cannot open firmware directory %s", firmware_dir); } + caps->disk.supported = true; VIR_DOMAIN_CAPS_ENUM_SET(caps->disk.diskDevice, VIR_DOMAIN_DISK_DEVICE_DISK, diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h index 8fb97d730..3d8edb490 100644 --- a/src/bhyve/bhyve_capabilities.h +++ b/src/bhyve/bhyve_capabilities.h @@ -25,8 +25,11 @@ # include "capabilities.h" # include "conf/domain_capabilities.h"
+# include "bhyve_conf.h" +
This include is because of bhyveConnPtr type I assume. Well, that one is defined in bhyve_utils.h which is the file you should be including.
Actually it's simpler: initially I planned to pass virBhyveDriverConfigPtr instead of bhyveConnPtr to virBhyveDomainCapsBuild(), but then decided to call virBhyveDriverGetConfig() in the place where it's actually used and made a last minute change forgetting to change includes (which unfortunately didn't trigger a warning).
After you've done that you'll find that bhyve_capabilities needs to include bhyve_conf.h" because of virBhyveDriverGetConfig call. But that's okay - you can replace include of bhyve_utils.h there with bhyve_conf.h:
virCapsPtr virBhyveCapsBuild(void); -virDomainCapsPtr virBhyveDomainCapsBuild(const char *emulatorbin, +virDomainCapsPtr virBhyveDomainCapsBuild(bhyveConnPtr, + const char *emulatorbin, const char *machine, virArch arch, virDomainVirtType virttype);
With that squashed in, and unrefing @cfg you have my ACK.
Michal
Pushed with the fixes applied, thanks! Roman Bogorodskiy