xenUnifiedDomainXMLFromNative(virConnectPtr conn,
const char *format,
const char *config,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
virDomainDefPtr def = NULL;
char *ret = NULL;
int vncport;
GET_PRIVATE(conn);
+ virCheckFlags(0, NULL);
+
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
xenUnifiedError(VIR_ERR_INVALID_ARG,
xenUnifiedDomainXMLToNative(virConnectPtr conn,
const char *format,
const char *xmlData,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
virDomainDefPtr def = NULL;
char *ret = NULL;
virConfPtr conf = NULL;
GET_PRIVATE(conn);
+ virCheckFlags(0, NULL);
+
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
xenUnifiedError(VIR_ERR_INVALID_ARG,
{
GET_PRIVATE(dconn);
+ virCheckFlags(XEN_MIGRATION_FLAGS, -1);
+
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
return xenDaemonDomainMigratePrepare (dconn, cookie, cookielen,
uri_in, uri_out,
{
GET_PRIVATE(dom->conn);
+ virCheckFlags(XEN_MIGRATION_FLAGS, -1);
+
if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
return xenDaemonDomainMigratePerform (dom, cookie, cookielen, uri,
flags, dname, resource);
char *domain_xml = NULL;
virDomainPtr dom_new = NULL;
+ virCheckFlags(XEN_MIGRATION_FLAGS, NULL);
+
dom = xenUnifiedDomainLookupByName (dconn, dname);
if (! dom) {
return NULL;
static int
xenUnifiedDomainBlockPeek (virDomainPtr dom, const char *path,
unsigned long long offset, size_t size,
- void *buffer, unsigned int flags ATTRIBUTE_UNUSED)
+ void *buffer, unsigned int flags)
{
int r;
GET_PRIVATE (dom->conn);
+ virCheckFlags(0, -1);
+
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
r = xenDaemonDomainBlockPeek (dom, path, offset, size, buffer);
if (r != -2) return r;
# define XEN_SCHED_SEDF_NPARAM 6
# define XEN_SCHED_CRED_NPARAM 2
+/* The set of migration flags explicitly supported by xen. */
+# define XEN_MIGRATION_FLAGS \
+ (VIR_MIGRATE_LIVE | \
+ VIR_MIGRATE_UNDEFINE_SOURCE | \
+ VIR_MIGRATE_PAUSED | \
+ VIR_MIGRATE_PERSIST_DEST)
+
/* _xenUnifiedDriver:
*
* Entry points into the underlying Xen drivers. This structure
virDrvOpenStatus
xenHypervisorOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
int ret;
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
+ virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
if (initialized == 0)
if (xenHypervisorInit() == -1)
return -1;
xenHypervisorGetDomainState(virDomainPtr domain,
int *state,
int *reason,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
xenUnifiedPrivatePtr priv = domain->conn->privateData;
virDomainInfo info;
+ virCheckFlags(0, -1);
+
if (domain->conn == NULL)
return -1;
virDrvOpenStatus
xenInotifyOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
DIR *dh;
struct dirent *ent;
char *path;
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
+ virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
if (priv->configDir) {
priv->useXenConfigCache = 1;
} else {
virDrvOpenStatus
xenDaemonOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
char *port = NULL;
int ret = VIR_DRV_OPEN_ERROR;
+ virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
/* Switch on the scheme, which we expect to be NULL (file),
* "http" or "xen".
*/
* Returns 0 in case of success, -1 (with errno) in case of error.
*/
int
-xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
+xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags)
{
+ virCheckFlags(0, -1);
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(-1);
*/
static int
xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
+ virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH, -1);
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL) ||
(filename == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
* the caller must free() the returned value.
*/
char *
-xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus)
+xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int flags,
+ const char *cpus)
{
xenUnifiedPrivatePtr priv;
virDomainDefPtr def;
char *xml;
+ /* Flags checked by virDomainDefFormat */
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(NULL);
xenDaemonDomainGetState(virDomainPtr domain,
int *state,
int *reason,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
xenUnifiedPrivatePtr priv = domain->conn->privateData;
struct sexpr *root;
+ virCheckFlags(0, -1);
+
if (domain->id < 0 && priv->xendConfigVersion < 3)
return -1;
xenUnifiedPrivatePtr priv;
int max;
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
|| (vcpus < 1)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
int ret;
xenUnifiedPrivatePtr priv;
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
if (domain == NULL || domain->conn == NULL || domain->name == NULL) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1;
char class[8], ref[80];
char *target = NULL;
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1;
virBuffer buf = VIR_BUFFER_INITIALIZER;
char class[8], ref[80];
- virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_CURRENT |
- VIR_DOMAIN_DEVICE_MODIFY_LIVE |
+ virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_LIVE |
VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
char *xendev = NULL;
virBuffer buf = VIR_BUFFER_INITIALIZER;
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return (-1);
int *cookielen ATTRIBUTE_UNUSED,
const char *uri_in,
char **uri_out,
- unsigned long flags ATTRIBUTE_UNUSED,
+ unsigned long flags,
const char *dname ATTRIBUTE_UNUSED,
unsigned long resource ATTRIBUTE_UNUSED)
{
+ virCheckFlags(XEN_MIGRATION_FLAGS, -1);
+
/* If uri_in is NULL, get the current hostname as a best guess
* of how the source host should connect to us. Note that caller
* deallocates this string.
int undefined_source = 0;
+ virCheckFlags(XEN_MIGRATION_FLAGS, -1);
+
/* Xen doesn't support renaming domains during migration. */
if (dname) {
virXendError(VIR_ERR_NO_SUPPORT,
int *state,
int *reason,
unsigned int flags);
-char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus);
+char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int flags,
+ const char *cpus);
unsigned long xenDaemonDomainGetMaxMemory(virDomainPtr domain);
char **xenDaemonListDomainsOld(virConnectPtr xend);
virDrvOpenStatus
xenXMOpen (virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
xenUnifiedPrivatePtr priv = conn->privateData;
+ virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
priv->configDir = XM_CONFIG_DIR;
priv->configCache = virHashCreate(50, xenXMConfigFree);
xenXMDomainGetState(virDomainPtr domain,
int *state,
int *reason,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
+ virCheckFlags(0, -1);
+
if (domain->id != -1)
return -1;
* Turn a config record into a lump of XML describing the
* domain, suitable for later feeding for virDomainCreateXML
*/
-char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags) {
+char *xenXMDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
+{
xenUnifiedPrivatePtr priv;
const char *filename;
xenXMConfCachePtr entry;
char *ret = NULL;
+ /* Flags checked by virDomainDefFormat */
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(NULL);
int ret = -1;
int max;
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1;
xenXMConfCachePtr entry;
int ret = -2;
+ virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
+ VIR_DOMAIN_VCPU_CONFIG |
+ VIR_DOMAIN_VCPU_MAXIMUM, -1);
+
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1;
*/
static int
xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
- unsigned int flags) {
+ unsigned int flags)
+{
const char *filename = NULL;
xenXMConfCachePtr entry = NULL;
int ret = -1;
virDomainDefPtr def;
xenUnifiedPrivatePtr priv;
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
+
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1;
return -1;
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
- (domain->id != -1 && (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT))) {
+ (domain->id != -1 && flags == VIR_DOMAIN_DEVICE_MODIFY_CURRENT)) {
xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
_("Xm driver only supports modifying persistent config"));
return -1;
int i;
xenUnifiedPrivatePtr priv;
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
+
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1;
}
-
if (domain->conn->flags & VIR_CONNECT_RO)
return -1;
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
- (domain->id != -1 && (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT))) {
+ (domain->id != -1 && flags == VIR_DOMAIN_DEVICE_MODIFY_CURRENT)) {
xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
_("Xm driver only supports modifying persistent config"));
return -1;
int *state,
int *reason,
unsigned int flags);
-char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags);
+char *xenXMDomainGetXMLDesc(virDomainPtr domain, unsigned int flags);
int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);
virDrvOpenStatus
xenStoreOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
+ virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
+
if (flags & VIR_CONNECT_RO)
priv->xshandle = xs_daemon_open_readonly();
else
xenStoreDomainGetState(virDomainPtr domain,
int *state,
int *reason,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
char *running;
+ virCheckFlags(0, -1);
+
if (domain->id == -1)
return -1;
* Returns 0 in case of success, -1 in case of error.
*/
int
-xenStoreDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED)
+xenStoreDomainReboot(virDomainPtr domain, unsigned int flags)
{
int ret;
xenUnifiedPrivatePtr priv;
+ virCheckFlags(0, -1);
+
if ((domain == NULL) || (domain->conn == NULL)) {
virXenStoreError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(-1);