tools/virsh-volume.c
tools/virsh.c
tools/virt-admin.c
+tools/virt-host-validate-bhyve.c
tools/virt-host-validate-common.c
tools/virt-host-validate-lxc.c
tools/virt-host-validate-qemu.c
virt_host_validate_SOURCES = \
virt-host-validate.c \
- virt-host-validate-common.c virt-host-validate-common.h \
- virt-host-validate-qemu.c virt-host-validate-qemu.h \
- virt-host-validate-lxc.c virt-host-validate-lxc.h \
- $(NULL)
+ virt-host-validate-common.c virt-host-validate-common.h
+
+VIRT_HOST_VALIDATE_QEMU = \
+ virt-host-validate-qemu.c \
+ virt-host-validate-qemu.h
+VIRT_HOST_VALIDATE_LXC = \
+ virt-host-validate-lxc.c \
+ virt-host-validate-lxc.h
+VIRT_HOST_VALIDATE_BHYVE = \
+ virt-host-validate-bhyve.c \
+ virt-host-validate-bhyve.h
+if WITH_QEMU
+virt_host_validate_SOURCES += $(VIRT_HOST_VALIDATE_QEMU)
+else ! WITH_QEMU
+EXTRA_DIST += $(VIRT_HOST_VALIDATE_QEMU)
+endif ! WITH_QEMU
+
+if WITH_LXC
+virt_host_validate_SOURCES += $(VIRT_HOST_VALIDATE_LXC)
+else ! WITH_LXC
+EXTRA_DIST += $(VIRT_HOST_VALIDATE_LXC)
+endif ! WITH_LXC
+
+if WITH_BHYVE
+virt_host_validate_SOURCES += $(VIRT_HOST_VALIDATE_BHYVE)
+else ! WITH_BHYVE
+EXTRA_DIST += $(VIRT_HOST_VALIDATE_BHYVE)
+endif ! WITH_BHYVE
virt_host_validate_LDFLAGS = \
$(AM_LDFLAGS) \
--- /dev/null
+/*
+ * virt-host-validate-bhyve.c: Sanity check a bhyve hypervisor host
+ *
+ * Copyright (C) 2017 Roman Bogorodskiy
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <config.h>
+
+#include <sys/param.h>
+#include <sys/linker.h>
+#include <stdio.h>
+
+#include "virt-host-validate-bhyve.h"
+#include "virt-host-validate-common.h"
+
+#define MODULE_STATUS(mod, err_msg, err_code) \
+ virHostMsgCheck("BHYVE", _("for %s module"), #mod); \
+ if (mod ## _loaded) { \
+ virHostMsgPass(); \
+ } else { \
+ virHostMsgFail(err_code, \
+ _("%s module is not loaded, " err_msg), \
+ #mod); \
+ ret = -1; \
+ } \
+
+#define MODULE_STATUS_FAIL(mod, err_msg) \
+ MODULE_STATUS(mod, err_msg, VIR_HOST_VALIDATE_FAIL)
+
+#define MODULE_STATUS_WARN(mod, err_msg) \
+ MODULE_STATUS(mod, err_msg, VIR_HOST_VALIDATE_WARN)
+
+
+int virHostValidateBhyve(void)
+{
+ int ret = 0;
+ int fileid = 0;
+ struct kld_file_stat stat;
+ bool vmm_loaded = false, if_tap_loaded = false;
+ bool if_bridge_loaded = false, nmdm_loaded = false;
+
+ for (fileid = kldnext(0); fileid > 0; fileid = kldnext(fileid)) {
+ stat.version = sizeof(struct kld_file_stat);
+ if (kldstat(fileid, &stat) < 0)
+ continue;
+
+ if (STREQ(stat.name, "vmm.ko"))
+ vmm_loaded = true;
+ else if (STREQ(stat.name, "if_tap.ko"))
+ if_tap_loaded = true;
+ else if (STREQ(stat.name, "if_bridge.ko"))
+ if_bridge_loaded = true;
+ else if (STREQ(stat.name, "nmdm.ko"))
+ nmdm_loaded = true;
+ }
+
+ MODULE_STATUS_FAIL(vmm, "will not be able to start VMs");
+ MODULE_STATUS_WARN(if_tap, "networking will not work");
+ MODULE_STATUS_WARN(if_bridge, "bridged networking will not work");
+ MODULE_STATUS_WARN(nmdm, "nmdm console will not work");
+
+ return ret;
+}
--- /dev/null
+/*
+ * virt-host-validate-bhyve.h: Sanity check a bhyve hypervisor host
+ *
+ * Copyright (C) 2017 Roman Bogorodskiy
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef __VIRT_HOST_VALIDATE_BHYVE_H__
+# define __VIRT_HOST_VALIDATE_BHYVE_H__
+
+int virHostValidateBhyve(void);
+
+#endif /* __VIRT_HOST_VALIDATE_BHYVE_H__ */
#if WITH_LXC
# include "virt-host-validate-lxc.h"
#endif
+#if WITH_BHYVE
+# include "virt-host-validate-bhyve.h"
+#endif
static void
show_help(FILE *out, const char *argv0)
"\n"
" - qemu\n"
" - lxc\n"
+ " - bhyve\n"
"\n"
" Options:\n"
" -h, --help Display command line help\n"
}
#endif
+#if WITH_BHYVE
+ if (!hvname || STREQ(hvname, "bhyve")) {
+ usedHvname = true;
+ if (virHostValidateBhyve() < 0)
+ ret = EXIT_FAILURE;
+ }
+#endif
+
if (hvname && !usedHvname) {
fprintf(stderr, _("%s: unsupported hypervisor name %s\n"),
argv[0], hvname);
way to run libvirt hypervisor drivers. If invoked without any
arguments it will check support for all hypervisor drivers it
is aware of. Optionally it can be given a particular hypervisor
-type ('qemu' or 'lxc') to restrict the checks to those relevant
-for that virtualization technology
+type ('qemu', 'lxc' or 'bhyve') to restrict the checks
+to those relevant for that virtualization technology
=head1 OPTIONS