[libvirt] [PATCH 1/3] bhyve: implement support for commandline args
John Ferlan
jferlan at redhat.com
Fri Jan 25 15:12:09 UTC 2019
On 1/18/19 10:41 AM, Roman Bogorodskiy wrote:
> Implement support for passing custom command line arguments
> to bhyve using the 'bhyve:commandline' element:
>
> <bhyve:commandline>
> <bhyve:arg value='-newarg'/>
> </bhyve:commandline>
>
> * Define virDomainXMLNamespace for the bhyve driver, which
> at this point supports only the 'commandline' element
> described above,
> * Update command generation code to inject these command line
> arguments between driver-generated arguments and the vmname
> positional argument.
>
> Signed-off-by: Roman Bogorodskiy <bogorodskiy at gmail.com>
> ---
> docs/schemas/domaincommon.rng | 17 +++
> src/bhyve/bhyve_command.c | 9 ++
> src/bhyve/bhyve_conf.c | 15 +++
> src/bhyve/bhyve_conf.h | 9 ++
> src/bhyve/bhyve_domain.c | 107 +++++++++++++++++-
> src/bhyve/bhyve_domain.h | 1 +
> .../bhyvexml2argv-commandline.args | 9 ++
> .../bhyvexml2argv-commandline.ldargs | 3 +
> .../bhyvexml2argv-commandline.xml | 27 +++++
> tests/bhyvexml2argvtest.c | 1 +
> .../bhyvexml2xmlout-commandline.xml | 37 ++++++
> tests/bhyvexml2xmltest.c | 1 +
> 12 files changed, 235 insertions(+), 1 deletion(-)
> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-commandline.args
> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-commandline.ldargs
> create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-commandline.xml
> create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-commandline.xml
>
[...]
> diff --git a/src/bhyve/bhyve_conf.c b/src/bhyve/bhyve_conf.c
> index 60baa2e848..75709801c7 100644
> --- a/src/bhyve/bhyve_conf.c
> +++ b/src/bhyve/bhyve_conf.c
> @@ -25,6 +25,7 @@
> #include "virlog.h"
> #include "virstring.h"
> #include "bhyve_conf.h"
> +#include "bhyve_domain.h"
> #include "configmake.h"
>
> #define VIR_FROM_THIS VIR_FROM_BHYVE
> @@ -107,3 +108,17 @@ virBhyveDriverConfigDispose(void *obj)
>
> VIR_FREE(cfg->firmwareDir);
> }
> +
> +void bhyveDomainCmdlineDefFree(bhyveDomainCmdlineDefPtr def)
NIT: for current conventions...
void
bhyveDomainCmdlineDefFree(bhyveDomainCmdlineDefPtr def)
> +{
> + size_t i;
> +
> + if (!def)
> + return;
> +
> + for (i = 0; i < def->num_args; i++)
> + VIR_FREE(def->args[i]);
> +
> + VIR_FREE(def->args);
> + VIR_FREE(def);
> +}
[...]
> diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c
> index e54af75f4d..554188ebeb 100644
> --- a/src/bhyve/bhyve_domain.c
> +++ b/src/bhyve/bhyve_domain.c
[...]
> +static int
> +bhyveDomainDefNamespaceParse(xmlDocPtr xml ATTRIBUTE_UNUSED,
> + xmlNodePtr root ATTRIBUTE_UNUSED,
> + xmlXPathContextPtr ctxt,
> + void **data)
> +{
> + bhyveDomainCmdlineDefPtr cmd = NULL;
> + bool uses_bhyve_ns = false;
> + xmlNodePtr *nodes = NULL;
> + int n;
> + size_t i;
Alternative:
int ret = -1;
> +
> + if (xmlXPathRegisterNs(ctxt, BAD_CAST "bhyve", BAD_CAST BHYVE_NAMESPACE_HREF) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to register xml namespace '%s'"),
> + BHYVE_NAMESPACE_HREF);
> + return -1;
> + }
> +
> + if (VIR_ALLOC(cmd) < 0)
> + return -1;
> +
> + n = virXPathNodeSet("./bhyve:commandline/bhyve:arg", ctxt, &nodes);
> + if (n < 0)
> + goto error;
> + uses_bhyve_ns = n > 0;
Alternative:
if (n == 0)
ret = 0;
if (n <= 0)
goto cleanup;
> +
> + if (n && VIR_ALLOC_N(cmd->args, n) < 0)
> + goto error;
Alternative "goto cleanup;"
> +
> + for (i = 0; i < n; i++) {
> + cmd->args[cmd->num_args] = virXMLPropString(nodes[i], "value");
> + if (cmd->args[cmd->num_args] == NULL) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + "%s", _("No bhyve command-line argument specified"));
> + goto error;
Alternative "goto cleanup;"
> + }
> + cmd->num_args++;
> + }
> +
> + VIR_FREE(nodes);
> +
> + if (uses_bhyve_ns)
> + *data = cmd;
> + else
> + VIR_FREE(cmd);
Alternative:
VIR_STEAL_PTR(*data, cmd);
ret = 0;
cleanup:
VIR_FREE(nodes);
bhyveDomainCmdlineDefFree(cmd);
return ret;
> +
> + return 0;
> +
> + error:
> + VIR_FREE(nodes);
> + bhyveDomainDefNamespaceFree(cmd);
> + return -1;
> +}
> +
[...]
> diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-commandline.args b/tests/bhyvexml2argvdata/bhyvexml2argv-commandline.args
> new file mode 100644
> index 0000000000..cb21b99cd6
> --- /dev/null
> +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-commandline.args
> @@ -0,0 +1,9 @@
> +/usr/sbin/bhyve \
> +-c 1 \
> +-m 214 \
> +-u \
> +-H \
> +-P \
> +-s 0:0,hostbridge \
> +-s 2:0,ahci,hd:/tmp/freebsd.img \
> +-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 ARGUMENT1 ARGUMENT2 bhyve
>From the not that matters but viewpoint:
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 \
ARGUMENT1 ARGUMENT2 bhyve
Reviewed-by: John Ferlan <jferlan at redhat.com>
John
[...]
More information about the libvir-list
mailing list