[libvirt] [PATCH] bhyve: add config file support

Michal Privoznik mprivozn at redhat.com
Tue Mar 14 10:17:11 UTC 2017


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/Makefile.am b/src/Makefile.am
> index 02579659a..f0d8efe50 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -930,6 +930,8 @@ BHYVE_DRIVER_SOURCES =						\
>  		bhyve/bhyve_capabilities.h			\
>  		bhyve/bhyve_command.c				\
>  		bhyve/bhyve_command.h				\
> +		bhyve/bhyve_conf.c				\
> +		bhyve/bhyve_conf.h				\
>  		bhyve/bhyve_parse_command.c			\
>  		bhyve/bhyve_parse_command.h			\
>  		bhyve/bhyve_device.c				\
> @@ -1575,7 +1577,14 @@ libvirt_driver_bhyve_impl_la_CFLAGS = \
>  	$(AM_CFLAGS)
>  libvirt_driver_bhyve_impl_la_LDFLAGS = $(AM_LDFLAGS)
>  libvirt_driver_bhyve_impl_la_SOURCES = $(BHYVE_DRIVER_SOURCES)
> +
> +conf_DATA += bhyve/bhyve.conf
> +augeas_DATA += bhyve/libvirtd_bhyve.aug
> +augeastest_DATA += test_libvirtd_bhyve.aug
>  endif WITH_BHYVE
> +EXTRA_DIST += bhyve/bhyve.conf \
> +	bhyve/libvirtd_bhyve.aug \
> +	bhyve/test_libvirtd_bhyve.aug.in
>  
>  if WITH_NETWORK
>  noinst_LTLIBRARIES += libvirt_driver_network_impl.la
> @@ -2125,11 +2134,12 @@ check-local: check-augeas
>  	check-augeas-sanlock \
>  	check-augeas-lockd \
>  	check-augeas-libxl \
> +	check-augeas-bhyve \
>  	$(NULL)
>  
>  check-augeas: check-augeas-qemu check-augeas-lxc check-augeas-sanlock \
>  	check-augeas-lockd check-augeas-virtlockd check-augeas-libxl \
> -	check-augeas-virtlogd
> +	check-augeas-bhyve check-augeas-virtlogd
>  
>  AUG_GENTEST = $(PERL) $(top_srcdir)/build-aux/augeas-gentest.pl
>  EXTRA_DIST += $(top_srcdir)/build-aux/augeas-gentest.pl
> @@ -2212,6 +2222,19 @@ else ! WITH_LIBXL
>  check-augeas-libxl:
>  endif ! WITH_LIBXL
>  
> +if WITH_BHYVE
> +test_libvirtd_bhyve.aug: bhyve/test_libvirtd_bhyve.aug.in \
> +		$(srcdir)/bhyve/bhyve.conf $(AUG_GENTEST)
> +	$(AM_V_GEN)$(AUG_GENTEST) $(srcdir)/bhyve/bhyve.conf $< $@
> +
> +check-augeas-bhyve: test_libvirtd_bhyve.aug
> +	$(AM_V_GEN)if test -x '$(AUGPARSE)'; then \
> +	    '$(AUGPARSE)' -I $(srcdir)/bhyve test_libvirtd_bhyve.aug; \
> +	fi
> +else ! WITH_BHYVE
> +check-augeas-bhyve:
> +endif ! WITH_BHYVE
> +
>  test_virtlogd.aug: logging/test_virtlogd.aug.in \
>  		logging/virtlogd.conf $(AUG_GENTEST)
>  	$(AM_V_GEN)$(AUG_GENTEST) $(srcdir)/logging/virtlogd.conf $< $@
> diff --git a/src/bhyve/bhyve.conf b/src/bhyve/bhyve.conf
> new file mode 100644
> index 000000000..2a8baacff
> --- /dev/null
> +++ b/src/bhyve/bhyve.conf
> @@ -0,0 +1,7 @@
> +# Master configuration file for the bhyve driver.
> +# All settings described here are optional - if omitted, sensible
> +# defaults are used.
> +
> +# Path to a directory with firmware files. By default it's pointing
> +# to the directory that sysutils/bhyve-firmware installs files into.
> +#firmware_dir = "/usr/local/share/uefi-firmware"
> 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.

> +    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.
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:

diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c
index 0b7881d60..4672170b3 100644
--- a/src/bhyve/bhyve_capabilities.c
+++ b/src/bhyve/bhyve_capabilities.c
@@ -32,10 +32,10 @@
 #include "virstring.h"
 #include "cpu/cpu.h"
 #include "nodeinfo.h"
-#include "bhyve_utils.h"
 #include "domain_conf.h"
 #include "vircommand.h"
 #include "bhyve_capabilities.h"
+#include "bhyve_conf.h"
 
 #define VIR_FROM_THIS   VIR_FROM_BHYVE
 
diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h
index 3d8edb490..e6d934bc2 100644
--- a/src/bhyve/bhyve_capabilities.h
+++ b/src/bhyve/bhyve_capabilities.h
@@ -24,8 +24,7 @@
 
 # include "capabilities.h"
 # include "conf/domain_capabilities.h"
-
-# include "bhyve_conf.h"
+# include "bhyve_utils.h"
 
 virCapsPtr virBhyveCapsBuild(void);
 virDomainCapsPtr virBhyveDomainCapsBuild(bhyveConnPtr,


>  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




More information about the libvir-list mailing list