* include/libvirt/libvirt.h.in (virDomainCreateFlags): Add
VIR_DOMAIN_START_PAUSED.
* src/libvirt.c (virDomainCreateXML): Update documentation.
* src/lxc/lxc_driver.c (lxcDomainCreateAndStart): Reject new flag
as unimplemented.
* src/opennebula/one_driver.c (oneDomainCreateAndStart):
Likewise.
* src/openvz/openvz_driver.c (openvzDomainCreateXML): Likewise.
* src/phyp/phyp_driver.c (phypDomainCreateAndStart): Likewise.
* src/qemu/qemu_driver.c (qemudDomainCreate): Likewise.
* src/test/test_driver.c (testDomainCreateXML): Likewise.
* src/uml/uml_driver.c (umlDomainCreate): Likewise.
* src/vbox/vbox_tmpl.c (vboxDomainCreateXML): Likewise.
* src/xen/xend_internal.c (xenDaemonCreateXML): Likewise.
* src/xenapi/xenapi_driver.c (xenapiDomainCreateXML): Likewise.
---
This has the slight drawback that any code that was previously
passing a non-zero flag will now fail, but that shouldn't be
a problem in practice.
include/libvirt/libvirt.h.in | 3 ++-
src/libvirt.c | 2 +-
src/lxc/lxc_driver.c | 7 +++++--
src/opennebula/one_driver.c | 8 ++++++--
src/openvz/openvz_driver.c | 4 +++-
src/phyp/phyp_driver.c | 4 +++-
src/qemu/qemu_driver.c | 4 +++-
src/test/test_driver.c | 4 +++-
src/uml/uml_driver.c | 4 +++-
src/vbox/vbox_tmpl.c | 8 ++++++--
src/xen/xend_internal.c | 4 +++-
src/xenapi/xenapi_driver.c | 4 +++-
12 files changed, 41 insertions(+), 15 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 19d5205..c806441 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -121,7 +121,8 @@ typedef virDomainInfo *virDomainInfoPtr;
* Domain.
*/
typedef enum {
- VIR_DOMAIN_NONE = 0
+ VIR_DOMAIN_NONE = 0, /* Default behavior */
+ VIR_DOMAIN_START_PAUSED = 0 << 1, /* Launch guest in paused state */
} virDomainCreateFlags;
diff --git a/src/libvirt.c b/src/libvirt.c
index 9d42c76..2754fd0 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -1917,7 +1917,7 @@ virDomainGetConnect (virDomainPtr dom)
* virDomainCreateXML:
* @conn: pointer to the hypervisor connection
* @xmlDesc: string containing an XML description of the domain
- * @flags: callers should always pass 0
+ * @flags: bitwise-or of supported virDomainCreateFlags
*
* Launch a new guest domain, based on an XML description similar
* to the one returned by virDomainGetXMLDesc()
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 14a8b2a..c3f65cb 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -1,4 +1,5 @@
/*
+ * Copyright (C) 2010 Red Hat, Inc.
* Copyright IBM Corp. 2008
*
* lxc_driver.c: linux container driver functions
@@ -1404,7 +1405,7 @@ cleanup:
* lxcDomainCreateAndStart:
* @conn: pointer to connection
* @xml: XML definition of domain
- * @flags: Unused
+ * @flags: Must be 0 for now
*
* Creates a domain based on xml and starts it
*
@@ -1413,13 +1414,15 @@ cleanup:
static virDomainPtr
lxcDomainCreateAndStart(virConnectPtr conn,
const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED) {
+ unsigned int flags) {
lxc_driver_t *driver = conn->privateData;
virDomainObjPtr vm = NULL;
virDomainDefPtr def;
virDomainPtr dom = NULL;
virDomainEventPtr event = NULL;
+ virCheckFlags(0, NULL);
+
lxcDriverLock(driver);
if (!(def = virDomainDefParseString(driver->caps, xml,
VIR_DOMAIN_XML_INACTIVE)))
diff --git a/src/opennebula/one_driver.c b/src/opennebula/one_driver.c
index acd52c2..fd99f0b 100644
--- a/src/opennebula/one_driver.c
+++ b/src/opennebula/one_driver.c
@@ -1,5 +1,7 @@
/*---------------------------------------------------------------------------*/
-/* Copyright 2002-2009, Distributed Systems Architecture Group, Universidad
+/*
+ * Copyright (C) 2010 Red Hat, Inc.
+ * Copyright 2002-2009, Distributed Systems Architecture Group, Universidad
* Complutense de Madrid (
dsa-research.org)
*
* This library is free software; you can redistribute it and/or
@@ -435,13 +437,15 @@ return_point:
static virDomainPtr
oneDomainCreateAndStart(virConnectPtr conn,
const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED) {
+ unsigned int flags) {
one_driver_t *driver = conn->privateData;
virDomainObjPtr vm = NULL;
virDomainDefPtr def;
virDomainPtr dom = NULL;
int oneid;
+ virCheckFlags(0, NULL);
+
oneDriverLock(driver);
if (!(def = virDomainDefParseString(driver->caps, xml,
VIR_DOMAIN_XML_INACTIVE)))
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index ce159d0..2dd27d9 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -873,7 +873,7 @@ cleanup:
static virDomainPtr
openvzDomainCreateXML(virConnectPtr conn, const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
struct openvz_driver *driver = conn->privateData;
virDomainDefPtr vmdef = NULL;
@@ -881,6 +881,8 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml,
virDomainPtr dom = NULL;
const char *progstart[] = {VZCTL, "--quiet", "start",
PROGRAM_SENTINAL, NULL};
+ virCheckFlags(0, NULL);
+
openvzDriverLock(driver);
if ((vmdef = virDomainDefParseString(driver->caps, xml,
VIR_DOMAIN_XML_INACTIVE)) == NULL)
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index f8bea42..0f4bc20 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -1397,7 +1397,7 @@ phypDomainDestroy(virDomainPtr dom)
static virDomainPtr
phypDomainCreateAndStart(virConnectPtr conn,
const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
ConnectionData *connection_data = conn->networkPrivateData;
@@ -1410,6 +1410,8 @@ phypDomainCreateAndStart(virConnectPtr conn,
unsigned int i = 0;
char *managed_system = phyp_driver->managed_system;
+ virCheckFlags(0, NULL);
+
if (!(def = virDomainDefParseString(phyp_driver->caps, xml,
VIR_DOMAIN_XML_SECURE)))
goto err;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 77a9562..11bd2c2 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4181,13 +4181,15 @@ static int qemudNumDomains(virConnectPtr conn) {
}
static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED) {
+ unsigned int flags) {
struct qemud_driver *driver = conn->privateData;
virDomainDefPtr def;
virDomainObjPtr vm = NULL;
virDomainPtr dom = NULL;
virDomainEventPtr event = NULL;
+ virCheckFlags(0, NULL);
+
qemuDriverLock(driver);
if (!(def = virDomainDefParseString(driver->caps, xml,
VIR_DOMAIN_XML_INACTIVE)))
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 395c8c9..5b8105d 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -1287,7 +1287,7 @@ cleanup:
static virDomainPtr
testDomainCreateXML(virConnectPtr conn, const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
testConnPtr privconn = conn->privateData;
virDomainPtr ret = NULL;
@@ -1295,6 +1295,8 @@ testDomainCreateXML(virConnectPtr conn, const char *xml,
virDomainObjPtr dom = NULL;
virDomainEventPtr event = NULL;
+ virCheckFlags(0, NULL);
+
testDriverLock(privconn);
if ((def = virDomainDefParseString(privconn->caps, xml,
VIR_DOMAIN_XML_INACTIVE)) == NULL)
diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c
index c6d8b65..3111211 100644
--- a/src/uml/uml_driver.c
+++ b/src/uml/uml_driver.c
@@ -1262,12 +1262,14 @@ static int umlNumDomains(virConnectPtr conn) {
return n;
}
static virDomainPtr umlDomainCreate(virConnectPtr conn, const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED) {
+ unsigned int flags) {
struct uml_driver *driver = conn->privateData;
virDomainDefPtr def;
virDomainObjPtr vm = NULL;
virDomainPtr dom = NULL;
+ virCheckFlags(0, NULL);
+
umlDriverLock(driver);
if (!(def = virDomainDefParseString(driver->caps, xml,
VIR_DOMAIN_XML_INACTIVE)))
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index f70f3b3..1372f96 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -991,7 +991,7 @@ cleanup:
}
static virDomainPtr vboxDomainCreateXML(virConnectPtr conn, const char *xml,
- unsigned int flags ATTRIBUTE_UNUSED) {
+ unsigned int flags) {
/* VirtualBox currently doesn't have support for running
* virtual machines without actually defining them and thus
* for time being just define new machine and start it.
@@ -1000,7 +1000,11 @@ static virDomainPtr vboxDomainCreateXML(virConnectPtr conn, const
char *xml,
* change this behaviour to the expected one.
*/
- virDomainPtr dom = vboxDomainDefineXML(conn, xml);
+ virDomainPtr dom;
+
+ virCheckFlags(0, NULL);
+
+ dom = vboxDomainDefineXML(conn, xml);
if (dom == NULL)
return NULL;
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 51cad92..a22d32b 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -3788,7 +3788,7 @@ xenDaemonLookupByUUID(virConnectPtr conn, const unsigned char
*uuid)
*/
static virDomainPtr
xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
int ret;
char *sexpr;
@@ -3796,6 +3796,8 @@ xenDaemonCreateXML(virConnectPtr conn, const char *xmlDesc,
xenUnifiedPrivatePtr priv;
virDomainDefPtr def;
+ virCheckFlags(0, NULL);
+
priv = (xenUnifiedPrivatePtr) conn->privateData;
if (!(def = virDomainDefParseString(priv->caps,
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index 7ef03cb..e3bcb63 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -479,7 +479,7 @@ xenapiNumOfDomains (virConnectPtr conn)
static virDomainPtr
xenapiDomainCreateXML (virConnectPtr conn,
const char *xmlDesc,
- unsigned int flags ATTRIBUTE_UNUSED)
+ unsigned int flags)
{
xen_vm_record *record = NULL;
xen_vm vm = NULL;
@@ -489,6 +489,8 @@ xenapiDomainCreateXML (virConnectPtr conn,
if (!caps)
return NULL;
+ virCheckFlags(0, NULL);
+
virDomainDefPtr defPtr = virDomainDefParseString(caps, xmlDesc, flags);
createVMRecordFromXml(conn, defPtr, &record, &vm);
virDomainDefFree(defPtr);
--
1.7.0.1