2010-12-16 09:23:41 -06:00
|
|
|
/*
|
|
|
|
* qemu_domain.h: QEMU domain private state
|
|
|
|
*
|
2011-01-07 17:36:25 -06:00
|
|
|
* Copyright (C) 2006-2011 Red Hat, Inc.
|
2010-12-16 09:23:41 -06:00
|
|
|
* Copyright (C) 2006 Daniel P. Berrange
|
|
|
|
*
|
|
|
|
* 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, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
* Author: Daniel P. Berrange <berrange@redhat.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __QEMU_DOMAIN_H__
|
|
|
|
# define __QEMU_DOMAIN_H__
|
|
|
|
|
|
|
|
# include "threads.h"
|
|
|
|
# include "domain_conf.h"
|
|
|
|
# include "qemu_monitor.h"
|
2010-12-16 10:12:02 -06:00
|
|
|
# include "qemu_conf.h"
|
2011-05-04 06:55:38 -05:00
|
|
|
# include "bitmap.h"
|
2010-12-16 09:23:41 -06:00
|
|
|
|
|
|
|
/* Only 1 job is allowed at any time
|
|
|
|
* A job includes *all* monitor commands, even those just querying
|
|
|
|
* information, not merely actions */
|
|
|
|
enum qemuDomainJob {
|
|
|
|
QEMU_JOB_NONE = 0, /* Always set to 0 for easy if (jobActive) conditions */
|
|
|
|
QEMU_JOB_UNSPECIFIED,
|
|
|
|
QEMU_JOB_MIGRATION_OUT,
|
|
|
|
QEMU_JOB_MIGRATION_IN,
|
|
|
|
QEMU_JOB_SAVE,
|
|
|
|
QEMU_JOB_DUMP,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum qemuDomainJobSignals {
|
|
|
|
QEMU_JOB_SIGNAL_CANCEL = 1 << 0, /* Request job cancellation */
|
|
|
|
QEMU_JOB_SIGNAL_SUSPEND = 1 << 1, /* Request VM suspend to finish live migration offline */
|
|
|
|
QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME = 1 << 2, /* Request migration downtime change */
|
2011-02-17 08:33:00 -06:00
|
|
|
QEMU_JOB_SIGNAL_MIGRATE_SPEED = 1 << 3, /* Request migration speed change */
|
2011-05-13 05:11:47 -05:00
|
|
|
QEMU_JOB_SIGNAL_BLKSTAT = 1 << 4, /* Request blkstat during migration */
|
|
|
|
QEMU_JOB_SIGNAL_BLKINFO = 1 << 5, /* Request blkinfo during migration */
|
2010-12-16 09:23:41 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
struct qemuDomainJobSignalsData {
|
|
|
|
unsigned long long migrateDowntime; /* Data for QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME */
|
2011-02-17 08:33:00 -06:00
|
|
|
unsigned long migrateBandwidth; /* Data for QEMU_JOB_SIGNAL_MIGRATE_SPEED */
|
2011-05-13 05:11:47 -05:00
|
|
|
char *statDevName; /* Device name used by blkstat calls */
|
|
|
|
virDomainBlockStatsPtr blockStat; /* Block statistics for QEMU_JOB_SIGNAL_BLKSTAT */
|
|
|
|
int *statRetCode; /* Return code for the blkstat calls */
|
|
|
|
char *infoDevName; /* Device name used by blkinfo calls */
|
|
|
|
virDomainBlockInfoPtr blockInfo; /* Block information for QEMU_JOB_SIGNAL_BLKINFO */
|
|
|
|
int *infoRetCode; /* Return code for the blkinfo calls */
|
2010-12-16 09:23:41 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct _qemuDomainPCIAddressSet qemuDomainPCIAddressSet;
|
|
|
|
typedef qemuDomainPCIAddressSet *qemuDomainPCIAddressSetPtr;
|
|
|
|
|
|
|
|
typedef struct _qemuDomainObjPrivate qemuDomainObjPrivate;
|
|
|
|
typedef qemuDomainObjPrivate *qemuDomainObjPrivatePtr;
|
|
|
|
struct _qemuDomainObjPrivate {
|
|
|
|
virCond jobCond; /* Use in conjunction with main virDomainObjPtr lock */
|
2011-05-13 05:11:47 -05:00
|
|
|
virCond signalCond; /* Use to coordinate the safe queries during migration */
|
2010-12-16 09:23:41 -06:00
|
|
|
enum qemuDomainJob jobActive; /* Currently running job */
|
|
|
|
unsigned int jobSignals; /* Signals for running job */
|
|
|
|
struct qemuDomainJobSignalsData jobSignalsData; /* Signal specific data */
|
|
|
|
virDomainJobInfo jobInfo;
|
|
|
|
unsigned long long jobStart;
|
|
|
|
|
|
|
|
qemuMonitorPtr mon;
|
2011-01-07 17:36:25 -06:00
|
|
|
virDomainChrSourceDefPtr monConfig;
|
2010-12-16 09:23:41 -06:00
|
|
|
int monJSON;
|
|
|
|
bool gotShutdown;
|
|
|
|
|
|
|
|
int nvcpupids;
|
|
|
|
int *vcpupids;
|
|
|
|
|
|
|
|
qemuDomainPCIAddressSetPtr pciaddrs;
|
|
|
|
int persistentAddrs;
|
2011-05-04 06:55:38 -05:00
|
|
|
|
|
|
|
virBitmapPtr qemuCaps;
|
2010-12-16 09:23:41 -06:00
|
|
|
};
|
|
|
|
|
2011-02-14 10:09:39 -06:00
|
|
|
struct qemuDomainWatchdogEvent
|
|
|
|
{
|
|
|
|
virDomainObjPtr vm;
|
|
|
|
int action;
|
|
|
|
};
|
|
|
|
|
|
|
|
void qemuDomainEventFlush(int timer ATTRIBUTE_UNUSED, void *opaque);
|
|
|
|
|
|
|
|
/* driver must be locked before calling */
|
|
|
|
void qemuDomainEventQueue(struct qemud_driver *driver,
|
|
|
|
virDomainEventPtr event);
|
2010-12-16 09:23:41 -06:00
|
|
|
|
|
|
|
void qemuDomainSetPrivateDataHooks(virCapsPtr caps);
|
|
|
|
void qemuDomainSetNamespaceHooks(virCapsPtr caps);
|
|
|
|
|
2010-12-16 10:12:02 -06:00
|
|
|
int qemuDomainObjBeginJob(virDomainObjPtr obj) ATTRIBUTE_RETURN_CHECK;
|
|
|
|
int qemuDomainObjBeginJobWithDriver(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj) ATTRIBUTE_RETURN_CHECK;
|
|
|
|
int qemuDomainObjEndJob(virDomainObjPtr obj) ATTRIBUTE_RETURN_CHECK;
|
|
|
|
void qemuDomainObjEnterMonitor(virDomainObjPtr obj);
|
|
|
|
void qemuDomainObjExitMonitor(virDomainObjPtr obj);
|
|
|
|
void qemuDomainObjEnterMonitorWithDriver(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj);
|
|
|
|
void qemuDomainObjExitMonitorWithDriver(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj);
|
|
|
|
void qemuDomainObjEnterRemoteWithDriver(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj);
|
|
|
|
void qemuDomainObjExitRemoteWithDriver(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj);
|
|
|
|
|
2011-01-31 04:47:03 -06:00
|
|
|
char *qemuDomainFormatXML(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr vm,
|
|
|
|
int flags);
|
|
|
|
|
2011-05-04 05:59:20 -05:00
|
|
|
void qemuDomainObjTaint(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj,
|
2011-05-05 06:48:07 -05:00
|
|
|
enum virDomainTaintFlags taint,
|
|
|
|
int logFD);
|
2011-05-04 05:59:20 -05:00
|
|
|
|
|
|
|
void qemuDomainObjCheckTaint(struct qemud_driver *driver,
|
2011-05-05 06:48:07 -05:00
|
|
|
virDomainObjPtr obj,
|
|
|
|
int logFD);
|
2011-05-04 05:59:20 -05:00
|
|
|
void qemuDomainObjCheckDiskTaint(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj,
|
2011-05-05 06:48:07 -05:00
|
|
|
virDomainDiskDefPtr disk,
|
|
|
|
int logFD);
|
2011-05-04 05:59:20 -05:00
|
|
|
void qemuDomainObjCheckNetTaint(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr obj,
|
2011-05-05 06:48:07 -05:00
|
|
|
virDomainNetDefPtr net,
|
|
|
|
int logFD);
|
2011-05-04 05:59:20 -05:00
|
|
|
|
2011-05-05 06:38:04 -05:00
|
|
|
|
|
|
|
int qemuDomainCreateLog(struct qemud_driver *driver, virDomainObjPtr vm, bool append);
|
|
|
|
int qemuDomainOpenLog(struct qemud_driver *driver, virDomainObjPtr vm, off_t pos);
|
2011-05-05 06:40:50 -05:00
|
|
|
int qemuDomainAppendLog(struct qemud_driver *driver,
|
|
|
|
virDomainObjPtr vm,
|
|
|
|
int logFD,
|
|
|
|
const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(4, 5);
|
2011-05-05 06:38:04 -05:00
|
|
|
|
2010-12-16 09:23:41 -06:00
|
|
|
#endif /* __QEMU_DOMAIN_H__ */
|