char **const names,
int maxnames);
int virDomainCreate (virDomainPtr domain);
+int virDomainCreateWithFlags (virDomainPtr domain,
+ unsigned int flags);
int virDomainGetAutostart (virDomainPtr domain,
int *autostart);
(*virDrvNumOfDefinedDomains) (virConnectPtr conn);
typedef int
(*virDrvDomainCreate) (virDomainPtr dom);
+typedef int
+ (*virDrvDomainCreateWithFlags) (virDomainPtr dom,
+ unsigned int flags);
typedef virDomainPtr
(*virDrvDomainDefineXML) (virConnectPtr conn,
const char *xml);
* - close
*/
struct _virDriver {
- int no; /* the number virDrvNo */
+ int no; /* the number virDrvNo */
const char * name; /* the name of the driver */
virDrvOpen open;
virDrvClose close;
virDrvListDefinedDomains listDefinedDomains;
virDrvNumOfDefinedDomains numOfDefinedDomains;
virDrvDomainCreate domainCreate;
+ virDrvDomainCreateWithFlags domainCreateWithFlags;
virDrvDomainDefineXML domainDefineXML;
virDrvDomainUndefine domainUndefine;
virDrvDomainAttachDevice domainAttachDevice;
esxListDefinedDomains, /* listDefinedDomains */
esxNumberOfDefinedDomains, /* numOfDefinedDomains */
esxDomainCreate, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
esxDomainDefineXML, /* domainDefineXML */
esxDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */
* virDomainCreate:
* @domain: pointer to a defined domain
*
- * launch a defined domain. If the call succeed the domain moves from the
+ * Launch a defined domain. If the call succeeds the domain moves from the
* defined to the running domains pools.
*
* Returns 0 in case of success, -1 in case of error
return -1;
}
+/**
+ * virDomainCreateWithFlags:
+ * @domain: pointer to a defined domain
+ * @flags: bitwise-or of supported virDomainCreateFlags
+ *
+ * Launch a defined domain. If the call succeeds the domain moves from the
+ * defined to the running domains pools.
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+virDomainCreateWithFlags(virDomainPtr domain, unsigned int flags) {
+ virConnectPtr conn;
+ DEBUG("domain=%p, flags=%d", domain, flags);
+
+ virResetLastError();
+
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+ virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+ virDispatchError(NULL);
+ return (-1);
+ }
+ conn = domain->conn;
+ if (conn->flags & VIR_CONNECT_RO) {
+ virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+ goto error;
+ }
+
+ if (conn->driver->domainCreateWithFlags) {
+ int ret;
+ ret = conn->driver->domainCreateWithFlags (domain, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+ virDispatchError(domain->conn);
+ return -1;
+}
+
/**
* virDomainGetAutostart:
* @domain: a domain object
virDomainGetBlockInfo;
} LIBVIRT_0.8.0;
+
+LIBVIRT_0.8.2 {
+ global:
+ virDomainCreateWithFlags;
+} LIBVIRT_0.8.1;
+
# .... define new API here using predicted next version number ....
lxcListDefinedDomains, /* listDefinedDomains */
lxcNumDefinedDomains, /* numOfDefinedDomains */
lxcDomainStart, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
lxcDomainDefine, /* domainDefineXML */
lxcDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */
oneListDefinedDomains, /* listDefinedDomains */
oneNumDefinedDomains, /* numOfDefinedDomains */
oneDomainStart, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
oneDomainDefine, /* domainDefineXML */
oneDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */
openvzListDefinedDomains, /* listDefinedDomains */
openvzNumDefinedDomains, /* numOfDefinedDomains */
openvzDomainCreate, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
openvzDomainDefineXML, /* domainDefineXML */
openvzDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */
phypListDefinedDomains, /* listDefinedDomains */
phypNumDefinedDomains, /* numOfDefinedDomains */
NULL, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
NULL, /* domainDefineXML */
NULL, /* domainUndefine */
NULL, /* domainAttachDevice */
qemudListDefinedDomains, /* listDefinedDomains */
qemudNumDefinedDomains, /* numOfDefinedDomains */
qemudDomainStart, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
qemudDomainDefine, /* domainDefineXML */
qemudDomainUndefine, /* domainUndefine */
qemudDomainAttachDevice, /* domainAttachDevice */
remoteListDefinedDomains, /* listDefinedDomains */
remoteNumOfDefinedDomains, /* numOfDefinedDomains */
remoteDomainCreate, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
remoteDomainDefineXML, /* domainDefineXML */
remoteDomainUndefine, /* domainUndefine */
remoteDomainAttachDevice, /* domainAttachDevice */
testListDefinedDomains, /* listDefinedDomains */
testNumOfDefinedDomains, /* numOfDefinedDomains */
testDomainCreate, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
testDomainDefineXML, /* domainDefineXML */
testDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */
umlListDefinedDomains, /* listDefinedDomains */
umlNumDefinedDomains, /* numOfDefinedDomains */
umlDomainStart, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
umlDomainDefine, /* domainDefineXML */
umlDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */
vboxListDefinedDomains, /* listDefinedDomains */
vboxNumOfDefinedDomains, /* numOfDefinedDomains */
vboxDomainCreate, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
vboxDomainDefineXML, /* domainDefineXML */
vboxDomainUndefine, /* domainUndefine */
vboxDomainAttachDevice, /* domainAttachDevice */
xenUnifiedListDefinedDomains, /* listDefinedDomains */
xenUnifiedNumOfDefinedDomains, /* numOfDefinedDomains */
xenUnifiedDomainCreate, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
xenUnifiedDomainDefineXML, /* domainDefineXML */
xenUnifiedDomainUndefine, /* domainUndefine */
xenUnifiedDomainAttachDevice, /* domainAttachDevice */
xenapiListDefinedDomains, /* listDefinedDomains */
xenapiNumOfDefinedDomains, /* numOfDefinedDomains */
xenapiDomainCreate, /* domainCreate */
+ NULL, /* domainCreateWithFlags */
xenapiDomainDefineXML, /* domainDefineXML */
xenapiDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */