typedef virDrvStateInitResult
(*virDrvStateInitialize)(bool privileged,
+ const char *root,
virStateInhibitCallback callback,
void *opaque);
static int
netcfStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (virNetcfDriverStateInitialize() < 0)
return VIR_DRV_STATE_INIT_ERROR;
static int
udevStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
int ret = VIR_DRV_STATE_INIT_ERROR;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (VIR_ALLOC(driver) < 0)
goto cleanup;
* virStateInitialize:
* @privileged: set to true if running with root privilege, false otherwise
* @mandatory: set to true if all drivers must report success, not skipped
+ * @root: directory to use for embedded mode
* @callback: callback to invoke to inhibit shutdown of the daemon
* @opaque: data to pass to @callback
*
* Initialize all virtualization drivers.
*
+ * Passing a non-NULL @root instructs the driver to run in embedded mode.
+ * Instead of using the compile time $prefix as the basis for directory
+ * paths, @root should be used instead. In addition any '/libvirt'
+ * component of the paths should be stripped.
+ *
+ * eg consider a build with prefix=/usr/local. A driver might use the
+ * locations
+ *
+ * /usr/local/etc/libvirt/$DRIVER/
+ * /usr/local/var/lib/libvirt/$DRIVER/
+ * /usr/local/run/libvirt/$DRIVER/
+ *
+ * When run with @root, the locations should instead be
+ *
+ * @root/etc/$DRIVER/
+ * @root/var/lib/$DRIVER/
+ * @root/run/$DRIVER/
+ *
* Returns 0 if all succeed, -1 upon any failure.
*/
int
virStateInitialize(bool privileged,
bool mandatory,
+ const char *root,
virStateInhibitCallback callback,
void *opaque)
{
VIR_DEBUG("Running global init for %s state driver",
virStateDriverTab[i]->name);
ret = virStateDriverTab[i]->stateInitialize(privileged,
+ root,
callback,
opaque);
VIR_DEBUG("State init result %d (mandatory=%d)", ret, mandatory);
int virStateInitialize(bool privileged,
bool mandatory,
+ const char *root,
virStateInhibitCallback inhibit,
- void *opaque);
+ void *opaque)
+ ATTRIBUTE_NONNULL(2);
int virStateCleanup(void);
int virStateReload(void);
int virStateStop(void);
static int
libxlStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback,
void *opaque)
{
char ebuf[1024];
bool autostart = true;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (!libxlDriverShouldLoad(privileged))
return VIR_DRV_STATE_INIT_SKIPPED;
static int lxcStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback,
void *opaque);
static int lxcStateCleanup(void);
static int lxcStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
virLXCDriverConfigPtr cfg = NULL;
bool autostart = true;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
/* Check that the user is root, silently disable if not */
if (!privileged) {
VIR_INFO("Not running privileged, disabling driver");
*/
static int
networkStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
DBusConnection *sysbus = NULL;
#endif
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (VIR_ALLOC(network_driver) < 0)
goto error;
static int
nodeStateInitialize(bool privileged G_GNUC_UNUSED,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
DBusConnection *sysbus;
DBusError err;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
/* Ensure caps_tbl is sorted by capability name */
qsort(caps_tbl, G_N_ELEMENTS(caps_tbl), sizeof(caps_tbl[0]),
cmpstringp);
static int
nodeStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
struct udev *udev = NULL;
virThread enumThread;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (VIR_ALLOC(driver) < 0)
return VIR_DRV_STATE_INIT_ERROR;
*/
static int
nwfilterStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
DBusConnection *sysbus = NULL;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (virDBusHasSystemBus() &&
!(sysbus = virDBusGetSystemBus()))
return VIR_DRV_STATE_INIT_ERROR;
*/
static int
qemuStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback,
void *opaque)
{
const char *defsecmodel = NULL;
g_autofree virSecurityManagerPtr *sec_managers = NULL;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (VIR_ALLOC(qemu_driver) < 0)
return VIR_DRV_STATE_INIT_ERROR;
* seriously delay OS bootup process */
if (virStateInitialize(virNetDaemonIsPrivileged(dmn),
mandatory,
+ NULL,
daemonInhibitCallback,
dmn) < 0) {
VIR_ERROR(_("Driver state initialization failed"));
static int
remoteStateInitialize(bool privileged G_GNUC_UNUSED,
+ const char *root G_GNUC_UNUSED,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
static int
secretStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (VIR_ALLOC(driver) < 0)
return VIR_DRV_STATE_INIT_ERROR;
*/
static int
storageStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
g_autofree char *rundir = NULL;
bool autostart = true;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
if (VIR_ALLOC(driver) < 0)
return VIR_DRV_STATE_INIT_ERROR;
static int
vzStateInitialize(bool privileged,
+ const char *root,
virStateInhibitCallback callback G_GNUC_UNUSED,
void *opaque G_GNUC_UNUSED)
{
if (!privileged)
return VIR_DRV_STATE_INIT_SKIPPED;
+ if (root != NULL) {
+ virReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("Driver does not support embedded mode"));
+ return -1;
+ }
+
vz_driver_privileged = privileged;
if (virFileMakePathWithMode(VZ_STATEDIR, S_IRWXU) < 0) {