*/
virDomainPtr virDomainDefineXML (virConnectPtr conn,
const char *xml);
+
+virDomainPtr virDomainDefineXMLFlags (virConnectPtr conn,
+ const char *xml,
+ unsigned int flags);
int virDomainUndefine (virDomainPtr domain);
typedef enum {
typedef virDomainPtr
(*virDrvDomainDefineXML)(virConnectPtr conn,
const char *xml);
+typedef virDomainPtr
+(*virDrvDomainDefineXMLFlags)(virConnectPtr conn,
+ const char *xml,
+ unsigned int flags);
typedef int
(*virDrvDomainUndefine)(virDomainPtr dom);
virDrvDomainCreateWithFlags domainCreateWithFlags;
virDrvDomainCreateWithFiles domainCreateWithFiles;
virDrvDomainDefineXML domainDefineXML;
+ virDrvDomainDefineXMLFlags domainDefineXMLFlags;
virDrvDomainUndefine domainUndefine;
virDrvDomainUndefineFlags domainUndefineFlags;
virDrvDomainAttachDevice domainAttachDevice;
}
+/**
+ * virDomainDefineXMLFlags:
+ * @conn: pointer to the hypervisor connection
+ * @xml: the XML description for the domain, preferably in UTF-8
+ * @flags: currently unused, pass 0
+ *
+ * Defines a domain, but does not start it.
+ * This definition is persistent, until explicitly undefined with
+ * virDomainUndefine(). A previous definition for this domain would be
+ * overridden if it already exists.
+ *
+ * Some hypervisors may prevent this operation if there is a current
+ * block copy operation on a transient domain with the same id as the
+ * domain being defined; in that case, use virDomainBlockJobAbort() to
+ * stop the block copy first.
+ *
+ * virDomainFree should be used to free the resources after the
+ * domain object is no longer needed.
+ *
+ * Returns NULL in case of error, a pointer to the domain otherwise
+ */
+virDomainPtr
+virDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags)
+{
+ VIR_DEBUG("conn=%p, xml=%s flags=%x", conn, xml, flags);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+ virCheckReadOnlyGoto(conn->flags, error);
+ virCheckNonNullArgGoto(xml, error);
+
+ if (conn->driver->domainDefineXMLFlags) {
+ virDomainPtr ret;
+ ret = conn->driver->domainDefineXMLFlags(conn, xml, flags);
+ if (!ret)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return NULL;
+}
+
+
/**
* virDomainUndefine:
* @domain: pointer to a defined domain
virDomainGetFSInfo;
} LIBVIRT_1.2.9;
+LIBVIRT_1.2.12 {
+ global:
+ virDomainDefineXMLFlags;
+} LIBVIRT_1.2.11;
+
# .... define new API here using predicted next version number ....
.domainCreateWithFlags = remoteDomainCreateWithFlags, /* 0.8.2 */
.domainCreateWithFiles = remoteDomainCreateWithFiles, /* 1.1.1 */
.domainDefineXML = remoteDomainDefineXML, /* 0.3.0 */
+ .domainDefineXMLFlags = remoteDomainDefineXMLFlags, /* 1.2.12 */
.domainUndefine = remoteDomainUndefine, /* 0.3.0 */
.domainUndefineFlags = remoteDomainUndefineFlags, /* 0.9.4 */
.domainAttachDevice = remoteDomainAttachDevice, /* 0.3.0 */
remote_nonnull_domain dom;
};
+struct remote_domain_define_xml_flags_args {
+ remote_nonnull_string xml;
+ unsigned int flags;
+};
+
+struct remote_domain_define_xml_flags_ret {
+ remote_nonnull_domain dom;
+};
+
struct remote_domain_undefine_args {
remote_nonnull_domain dom;
};
* @generate: none
* @acl: domain:fs_freeze
*/
- REMOTE_PROC_DOMAIN_GET_FSINFO = 349
+ REMOTE_PROC_DOMAIN_GET_FSINFO = 349,
+
+ /**
+ * @priority: high
+ * @generate: both
+ * @acl: domain:write
+ * @acl: domain:save
+ */
+ REMOTE_PROC_DOMAIN_DEFINE_XML_FLAGS = 350
};
struct remote_domain_define_xml_ret {
remote_nonnull_domain dom;
};
+struct remote_domain_define_xml_flags_args {
+ remote_nonnull_string xml;
+ u_int flags;
+};
+struct remote_domain_define_xml_flags_ret {
+ remote_nonnull_domain dom;
+};
struct remote_domain_undefine_args {
remote_nonnull_domain dom;
};
REMOTE_PROC_NODE_ALLOC_PAGES = 347,
REMOTE_PROC_DOMAIN_EVENT_CALLBACK_AGENT_LIFECYCLE = 348,
REMOTE_PROC_DOMAIN_GET_FSINFO = 349,
+ REMOTE_PROC_DOMAIN_DEFINE_XML_FLAGS = 350,
};