}
+static int remoteDispatchDomainCreateXMLWithFiles(
+ virNetServerPtr server ATTRIBUTE_UNUSED,
+ virNetServerClientPtr client,
+ virNetMessagePtr msg ATTRIBUTE_UNUSED,
+ virNetMessageErrorPtr rerr,
+ remote_domain_create_xml_with_files_args *args,
+ remote_domain_create_xml_with_files_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ struct daemonClientPrivate *priv =
+ virNetServerClientGetPrivateData(client);
+ int *files = NULL;
+ unsigned int nfiles = 0;
+ size_t i;
+
+ if (!priv->conn) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (VIR_ALLOC_N(files, msg->nfds) < 0)
+ goto cleanup;
+ for (i = 0; i < msg->nfds; i++) {
+ if ((files[i] = virNetMessageDupFD(msg, i)) < 0)
+ goto cleanup;
+ nfiles++;
+ }
+
+ if ((dom = virDomainCreateXMLWithFiles(priv->conn, args->xml_desc,
+ nfiles, files,
+ args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->dom, dom);
+ rv = 0;
+
+cleanup:
+ for (i = 0; i < nfiles; i++) {
+ VIR_FORCE_CLOSE(files[i]);
+ }
+ VIR_FREE(files);
+ if (rv < 0)
+ virNetMessageSaveError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+
+static int remoteDispatchDomainCreateWithFiles(
+ virNetServerPtr server ATTRIBUTE_UNUSED,
+ virNetServerClientPtr client,
+ virNetMessagePtr msg ATTRIBUTE_UNUSED,
+ virNetMessageErrorPtr rerr,
+ remote_domain_create_with_files_args *args,
+ remote_domain_create_with_files_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ struct daemonClientPrivate *priv =
+ virNetServerClientGetPrivateData(client);
+ int *files = NULL;
+ unsigned int nfiles = 0;
+ size_t i;
+
+ if (!priv->conn) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (VIR_ALLOC_N(files, msg->nfds) < 0)
+ goto cleanup;
+ for (i = 0; i < msg->nfds; i++) {
+ if ((files[i] = virNetMessageDupFD(msg, i)) < 0)
+ goto cleanup;
+ nfiles++;
+ }
+
+ if (!(dom = get_nonnull_domain(priv->conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainCreateWithFiles(dom,
+ nfiles, files,
+ args->flags) < 0)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->dom, dom);
+ rv = 0;
+
+cleanup:
+ for (i = 0; i < nfiles; i++) {
+ VIR_FORCE_CLOSE(files[i]);
+ }
+ VIR_FREE(files);
+ if (rv < 0)
+ virNetMessageSaveError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+
+
/*----- Helpers. -----*/
/* get_nonnull_domain and get_nonnull_network turn an on-wire
}
+static virDomainPtr
+remoteDomainCreateXMLWithFiles(virConnectPtr conn, const char *xml_desc,
+ unsigned int nfiles, int *files, unsigned int flags)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_create_xml_with_files_args args;
+ remote_domain_create_xml_with_files_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml_desc = (char *)xml_desc;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof(ret));
+
+ if (callFull(conn, priv, 0,
+ files, nfiles,
+ NULL, NULL,
+ REMOTE_PROC_DOMAIN_CREATE_XML_WITH_FILES,
+ (xdrproc_t)xdr_remote_domain_create_xml_with_files_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_create_xml_with_files_ret, (char *)&ret) == -1) {
+ goto done;
+ }
+
+ rv = get_nonnull_domain(conn, ret.dom);
+ xdr_free((xdrproc_t)xdr_remote_domain_create_xml_with_files_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+
+static int
+remoteDomainCreateWithFiles(virDomainPtr dom,
+ unsigned int nfiles, int *files,
+ unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_create_with_files_args args;
+ remote_domain_create_with_files_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof(ret));
+
+ if (callFull(dom->conn, priv, 0,
+ files, nfiles,
+ NULL, NULL,
+ REMOTE_PROC_DOMAIN_CREATE_WITH_FILES,
+ (xdrproc_t)xdr_remote_domain_create_with_files_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_create_with_files_ret, (char *)&ret) == -1) {
+ goto done;
+ }
+
+ dom->id = ret.dom.id;
+ xdr_free((xdrproc_t) &xdr_remote_domain_create_with_files_ret, (char *) &ret);
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
static void
remoteDomainEventQueue(struct private_data *priv, virDomainEventPtr event)
{
.connectNumOfDomains = remoteConnectNumOfDomains, /* 0.3.0 */
.connectListAllDomains = remoteConnectListAllDomains, /* 0.9.13 */
.domainCreateXML = remoteDomainCreateXML, /* 0.3.0 */
+ .domainCreateXMLWithFiles = remoteDomainCreateXMLWithFiles, /* 1.1.1 */
.domainLookupByID = remoteDomainLookupByID, /* 0.3.0 */
.domainLookupByUUID = remoteDomainLookupByUUID, /* 0.3.0 */
.domainLookupByName = remoteDomainLookupByName, /* 0.3.0 */
.connectNumOfDefinedDomains = remoteConnectNumOfDefinedDomains, /* 0.3.0 */
.domainCreate = remoteDomainCreate, /* 0.3.0 */
.domainCreateWithFlags = remoteDomainCreateWithFlags, /* 0.8.2 */
+ .domainCreateWithFiles = remoteDomainCreateWithFiles, /* 1.1.1 */
.domainDefineXML = remoteDomainDefineXML, /* 0.3.0 */
.domainUndefine = remoteDomainUndefine, /* 0.3.0 */
.domainUndefineFlags = remoteDomainUndefineFlags, /* 0.9.4 */
remote_nonnull_domain dom;
};
+struct remote_domain_create_xml_with_files_args {
+ remote_nonnull_string xml_desc;
+ unsigned int flags;
+};
+
+struct remote_domain_create_xml_with_files_ret {
+ remote_nonnull_domain dom;
+};
+
struct remote_domain_lookup_by_id_args {
int id;
};
remote_nonnull_domain dom;
};
+struct remote_domain_create_with_files_args {
+ remote_nonnull_domain dom;
+ unsigned int flags;
+};
+
+struct remote_domain_create_with_files_ret {
+ remote_nonnull_domain dom;
+};
+
struct remote_domain_define_xml_args {
remote_nonnull_string xml;
};
* @acl: domain:save:!VIR_DOMAIN_AFFECT_CONFIG|VIR_DOMAIN_AFFECT_LIVE
* @acl: domain:save:VIR_DOMAIN_AFFECT_CONFIG
*/
- REMOTE_PROC_DOMAIN_SET_MEMORY_STATS_PERIOD = 308
+ REMOTE_PROC_DOMAIN_SET_MEMORY_STATS_PERIOD = 308,
+
+ /**
+ * @generate: none
+ * @acl: domain:write
+ * @acl: domain:start
+ */
+ REMOTE_PROC_DOMAIN_CREATE_XML_WITH_FILES = 309,
+
+ /**
+ * @generate: none
+ * @acl: domain:start
+ */
+ REMOTE_PROC_DOMAIN_CREATE_WITH_FILES = 310
};
struct remote_domain_create_xml_ret {
remote_nonnull_domain dom;
};
+struct remote_domain_create_xml_with_files_args {
+ remote_nonnull_string xml_desc;
+ u_int flags;
+};
+struct remote_domain_create_xml_with_files_ret {
+ remote_nonnull_domain dom;
+};
struct remote_domain_lookup_by_id_args {
int id;
};
struct remote_domain_create_with_flags_ret {
remote_nonnull_domain dom;
};
+struct remote_domain_create_with_files_args {
+ remote_nonnull_domain dom;
+ u_int flags;
+};
+struct remote_domain_create_with_files_ret {
+ remote_nonnull_domain dom;
+};
struct remote_domain_define_xml_args {
remote_nonnull_string xml;
};
REMOTE_PROC_DOMAIN_MIGRATE_FINISH3_PARAMS = 306,
REMOTE_PROC_DOMAIN_MIGRATE_CONFIRM3_PARAMS = 307,
REMOTE_PROC_DOMAIN_SET_MEMORY_STATS_PERIOD = 308,
+ REMOTE_PROC_DOMAIN_CREATE_XML_WITH_FILES = 309,
+ REMOTE_PROC_DOMAIN_CREATE_WITH_FILES = 310,
};