exclude_file_name_regexp--sc_prohibit_doubled_word = ^po/
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
- (^docs/api_extension/|^tests/qemuhelpdata/|\.(gif|ico|png)$$|^daemon/.*_dispatch_bodies\.c$$|^src/remote/.*_client_bodies\.c$$)
+ (^docs/api_extension/|^tests/qemuhelpdata/|\.(gif|ico|png)$$|^daemon/.*_dispatch_bodies\.h$$|^src/remote/.*_client_bodies\.h$$)
_src2=src/(util/util|libvirt|lxc/lxc_controller)
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
exclude_file_name_regexp--sc_prohibit_xmlGetProp = ^src/util/xml\.c$$
-exclude_file_name_regexp--sc_require_config_h = \
- ^(examples/|daemon/.*_dispatch_bodies\.c$$|src/remote/.*_client_bodies\.c$$)
+exclude_file_name_regexp--sc_require_config_h = ^examples/
-exclude_file_name_regexp--sc_require_config_h_first = \
- ^(examples/|daemon/.*_dispatch_bodies\.c$$|src/remote/.*_client_bodies\.c$$)
+exclude_file_name_regexp--sc_require_config_h_first = ^examples/
exclude_file_name_regexp--sc_trailing_blank = (^docs/|\.(fig|gif|ico|png)$$)
DISTCLEANFILES =
EXTRA_DIST = \
remote_generator.pl \
- remote_dispatch_bodies.c \
- qemu_dispatch_bodies.c \
+ remote_dispatch_bodies.h \
+ qemu_dispatch_bodies.h \
libvirtd.conf \
libvirtd.init.in \
libvirtd.upstart \
remote.c: \
remote_dispatch_prototypes.h \
remote_dispatch_table.h \
- remote_dispatch_bodies.c \
+ remote_dispatch_bodies.h \
qemu_dispatch_prototypes.h \
qemu_dispatch_table.h \
- qemu_dispatch_bodies.c
+ qemu_dispatch_bodies.h
remote.h: \
remote_dispatch_args.h \
remote_dispatch_ret.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -r remote $(REMOTE_PROTOCOL) > $@
-remote_dispatch_bodies.c: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
+remote_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -b remote $(REMOTE_PROTOCOL) > $@
qemu_dispatch_prototypes.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
qemu_dispatch_ret.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -r qemu $(QEMU_PROTOCOL) > $@
-qemu_dispatch_bodies.c: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
+qemu_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL)
$(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -b qemu $(QEMU_PROTOCOL) > $@
LOGROTATE_CONFS = libvirtd.qemu.logrotate libvirtd.lxc.logrotate \
+++ /dev/null
-/* Automatically generated by remote_generator.pl.
- * Do not edit this file. Any changes you make will be lost.
- */
-
-/* qemuDispatchMonitorCommand has to be implemented manually */
--- /dev/null
+/* Automatically generated by remote_generator.pl.
+ * Do not edit this file. Any changes you make will be lost.
+ */
+
+/* qemuDispatchMonitorCommand has to be implemented manually */
return rv;
}
-#include "remote_dispatch_bodies.c"
-#include "qemu_dispatch_bodies.c"
+#include "remote_dispatch_bodies.h"
+#include "qemu_dispatch_bodies.h"
/*----- Helpers. -----*/
+++ /dev/null
-/* Automatically generated by remote_generator.pl.
- * Do not edit this file. Any changes you make will be lost.
- */
-
-/* remoteDispatchAuthList has to be implemented manually */
-
-/* remoteDispatchAuthPolkit has to be implemented manually */
-
-/* remoteDispatchAuthSaslInit has to be implemented manually */
-
-/* remoteDispatchAuthSaslStart has to be implemented manually */
-
-/* remoteDispatchAuthSaslStep has to be implemented manually */
-
-/* remoteDispatchClose has to be implemented manually */
-
-static int
-remoteDispatchCPUBaseline(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_cpu_baseline_args *args,
- remote_cpu_baseline_ret *ret)
-{
- int rv = -1;
- char *cpu;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((cpu = virConnectBaselineCPU(conn, (const char **)args->xmlCPUs.xmlCPUs_val, args->xmlCPUs.xmlCPUs_len, args->flags)) == NULL)
- goto cleanup;
-
- ret->cpu = cpu;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchCPUCompare(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_cpu_compare_args *args,
- remote_cpu_compare_ret *ret)
-{
- int rv = -1;
- int result;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((result = virConnectCompareCPU(conn, args->xml, args->flags)) == VIR_CPU_COMPARE_ERROR)
- goto cleanup;
-
- ret->result = result;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchDomainAbortJob(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_abort_job_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainAbortJob(dom) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainAttachDevice(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_attach_device_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainAttachDevice(dom, args->xml) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainAttachDeviceFlags(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_attach_device_flags_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainAttachDeviceFlags(dom, args->xml, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainBlockPeek has to be implemented manually */
-
-static int
-remoteDispatchDomainBlockStats(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_block_stats_args *args,
- remote_domain_block_stats_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainBlockStatsStruct tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainBlockStats(dom, args->path, &tmp, sizeof tmp) < 0)
- goto cleanup;
-
- ret->rd_req = tmp.rd_req;
- ret->rd_bytes = tmp.rd_bytes;
- ret->wr_req = tmp.wr_req;
- ret->wr_bytes = tmp.wr_bytes;
- ret->errs = tmp.errs;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainCoreDump(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_core_dump_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainCoreDump(dom, args->to, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainCreate(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_create_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainCreate(dom) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainCreateWithFlags has to be implemented manually */
-
-static int
-remoteDispatchDomainCreateXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_create_xml_args *args,
- remote_domain_create_xml_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((dom = virDomainCreateXML(conn, args->xml_desc, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_domain(&ret->dom, dom);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainDefineXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_define_xml_args *args,
- remote_domain_define_xml_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((dom = virDomainDefineXML(conn, args->xml)) == NULL)
- goto cleanup;
-
- make_nonnull_domain(&ret->dom, dom);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainDestroy(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_destroy_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainDestroy(dom) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainDetachDevice(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_detach_device_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainDetachDevice(dom, args->xml) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainDetachDeviceFlags(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_detach_device_flags_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainDetachDeviceFlags(dom, args->xml, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainDumpXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_dump_xml_args *args,
- remote_domain_dump_xml_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((xml = virDomainGetXMLDesc(dom, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainEventsDeregister has to be implemented manually */
-
-/* remoteDispatchDomainEventsDeregisterAny has to be implemented manually */
-
-/* remoteDispatchDomainEventsRegister has to be implemented manually */
-
-/* remoteDispatchDomainEventsRegisterAny has to be implemented manually */
-
-static int
-remoteDispatchDomainGetAutostart(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_autostart_args *args,
- remote_domain_get_autostart_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int autostart;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainGetAutostart(dom, &autostart) < 0)
- goto cleanup;
-
- ret->autostart = autostart;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainGetBlkioParameters has to be implemented manually */
-
-static int
-remoteDispatchDomainGetBlockInfo(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_block_info_args *args,
- remote_domain_get_block_info_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainBlockInfo tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainGetBlockInfo(dom, args->path, &tmp, args->flags) < 0)
- goto cleanup;
-
- ret->allocation = tmp.allocation;
- ret->capacity = tmp.capacity;
- ret->physical = tmp.physical;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainGetInfo(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_info_args *args,
- remote_domain_get_info_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainInfo tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainGetInfo(dom, &tmp) < 0)
- goto cleanup;
-
- ret->state = tmp.state;
- ret->maxMem = tmp.maxMem;
- ret->memory = tmp.memory;
- ret->nrVirtCpu = tmp.nrVirtCpu;
- ret->cpuTime = tmp.cpuTime;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainGetJobInfo(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_job_info_args *args,
- remote_domain_get_job_info_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainJobInfo tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainGetJobInfo(dom, &tmp) < 0)
- goto cleanup;
-
- ret->type = tmp.type;
- ret->timeElapsed = tmp.timeElapsed;
- ret->timeRemaining = tmp.timeRemaining;
- ret->dataTotal = tmp.dataTotal;
- ret->dataProcessed = tmp.dataProcessed;
- ret->dataRemaining = tmp.dataRemaining;
- ret->memTotal = tmp.memTotal;
- ret->memProcessed = tmp.memProcessed;
- ret->memRemaining = tmp.memRemaining;
- ret->fileTotal = tmp.fileTotal;
- ret->fileProcessed = tmp.fileProcessed;
- ret->fileRemaining = tmp.fileRemaining;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainGetMaxMemory(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_max_memory_args *args,
- remote_domain_get_max_memory_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- unsigned long memory;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((memory = virDomainGetMaxMemory(dom)) == 0)
- goto cleanup;
-
- ret->memory = memory;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainGetMaxVcpus(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_max_vcpus_args *args,
- remote_domain_get_max_vcpus_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((num = virDomainGetMaxVcpus(dom)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainGetMemoryParameters has to be implemented manually */
-
-static int
-remoteDispatchDomainGetOSType(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_os_type_args *args,
- remote_domain_get_os_type_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- char *type;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((type = virDomainGetOSType(dom)) == NULL)
- goto cleanup;
-
- ret->type = type;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainGetSchedulerParameters has to be implemented manually */
-
-/* remoteDispatchDomainGetSchedulerType has to be implemented manually */
-
-/* remoteDispatchDomainGetSecurityLabel has to be implemented manually */
-
-/* remoteDispatchDomainGetVcpus has to be implemented manually */
-
-static int
-remoteDispatchDomainGetVcpusFlags(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_get_vcpus_flags_args *args,
- remote_domain_get_vcpus_flags_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((num = virDomainGetVcpusFlags(dom, args->flags)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainHasCurrentSnapshot(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_has_current_snapshot_args *args,
- remote_domain_has_current_snapshot_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int result;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((result = virDomainHasCurrentSnapshot(dom, args->flags)) < 0)
- goto cleanup;
-
- ret->result = result;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainHasManagedSaveImage(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_has_managed_save_image_args *args,
- remote_domain_has_managed_save_image_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int result;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((result = virDomainHasManagedSaveImage(dom, args->flags)) < 0)
- goto cleanup;
-
- ret->result = result;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainInterfaceStats(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_interface_stats_args *args,
- remote_domain_interface_stats_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainInterfaceStatsStruct tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainInterfaceStats(dom, args->path, &tmp, sizeof tmp) < 0)
- goto cleanup;
-
- ret->rx_bytes = tmp.rx_bytes;
- ret->rx_packets = tmp.rx_packets;
- ret->rx_errs = tmp.rx_errs;
- ret->rx_drop = tmp.rx_drop;
- ret->tx_bytes = tmp.tx_bytes;
- ret->tx_packets = tmp.tx_packets;
- ret->tx_errs = tmp.tx_errs;
- ret->tx_drop = tmp.tx_drop;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainIsActive(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_is_active_args *args,
- remote_domain_is_active_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int active;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((active = virDomainIsActive(dom)) < 0)
- goto cleanup;
-
- ret->active = active;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainIsPersistent(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_is_persistent_args *args,
- remote_domain_is_persistent_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int persistent;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((persistent = virDomainIsPersistent(dom)) < 0)
- goto cleanup;
-
- ret->persistent = persistent;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainIsUpdated(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_is_updated_args *args,
- remote_domain_is_updated_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int updated;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((updated = virDomainIsUpdated(dom)) < 0)
- goto cleanup;
-
- ret->updated = updated;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainLookupByID(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_lookup_by_id_args *args,
- remote_domain_lookup_by_id_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((dom = virDomainLookupByID(conn, args->id)) == NULL)
- goto cleanup;
-
- make_nonnull_domain(&ret->dom, dom);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_lookup_by_name_args *args,
- remote_domain_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((dom = virDomainLookupByName(conn, args->name)) == NULL)
- goto cleanup;
-
- make_nonnull_domain(&ret->dom, dom);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainLookupByUUID(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_lookup_by_uuid_args *args,
- remote_domain_lookup_by_uuid_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((dom = virDomainLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
- goto cleanup;
-
- make_nonnull_domain(&ret->dom, dom);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainManagedSave(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_managed_save_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainManagedSave(dom, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainManagedSaveRemove(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_managed_save_remove_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainManagedSaveRemove(dom, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainMemoryPeek has to be implemented manually */
-
-/* remoteDispatchDomainMemoryStats has to be implemented manually */
-
-static int
-remoteDispatchDomainMigrateFinish(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_migrate_finish_args *args,
- remote_domain_migrate_finish_ret *ret)
-{
- int rv = -1;
- virDomainPtr ddom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((ddom = virDomainMigrateFinish(conn, args->dname, args->cookie.cookie_val, args->cookie.cookie_len, args->uri, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_domain(&ret->ddom, ddom);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (ddom)
- virDomainFree(ddom);
- return rv;
-}
-
-static int
-remoteDispatchDomainMigrateFinish2(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_migrate_finish2_args *args,
- remote_domain_migrate_finish2_ret *ret)
-{
- int rv = -1;
- virDomainPtr ddom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((ddom = virDomainMigrateFinish2(conn, args->dname, args->cookie.cookie_val, args->cookie.cookie_len, args->uri, args->flags, args->retcode)) == NULL)
- goto cleanup;
-
- make_nonnull_domain(&ret->ddom, ddom);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (ddom)
- virDomainFree(ddom);
- return rv;
-}
-
-static int
-remoteDispatchDomainMigratePerform(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_migrate_perform_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- char *dname;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- dname = args->dname ? *args->dname : NULL;
-
- if (virDomainMigratePerform(dom, args->cookie.cookie_val, args->cookie.cookie_len, args->uri, args->flags, dname, args->resource) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainMigratePrepare has to be implemented manually */
-
-/* remoteDispatchDomainMigratePrepare2 has to be implemented manually */
-
-/* remoteDispatchDomainMigratePrepareTunnel has to be implemented manually */
-
-static int
-remoteDispatchDomainMigrateSetMaxDowntime(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_migrate_set_max_downtime_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainMigrateSetMaxDowntime(dom, args->downtime, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainMigrateSetMaxSpeed(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_migrate_set_max_speed_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainMigrateSetMaxSpeed(dom, args->bandwidth, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainOpenConsole has to be implemented manually */
-
-/* remoteDispatchDomainPinVcpu has to be implemented manually */
-
-static int
-remoteDispatchDomainReboot(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_reboot_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainReboot(dom, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainRestore(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_restore_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (virDomainRestore(conn, args->from) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchDomainResume(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_resume_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainResume(dom) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainRevertToSnapshot(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_revert_to_snapshot_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainSnapshotPtr snapshot = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->snap.dom)))
- goto cleanup;
-
- if (!(snapshot = get_nonnull_domain_snapshot(dom, args->snap)))
- goto cleanup;
-
- if (virDomainRevertToSnapshot(snapshot, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (snapshot)
- virDomainSnapshotFree(snapshot);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSave(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_save_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSave(dom, args->to) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSetAutostart(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_set_autostart_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSetAutostart(dom, args->autostart) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainSetBlkioParameters has to be implemented manually */
-
-static int
-remoteDispatchDomainSetMaxMemory(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_set_max_memory_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSetMaxMemory(dom, args->memory) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSetMemory(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_set_memory_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSetMemory(dom, args->memory) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSetMemoryFlags(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_set_memory_flags_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSetMemoryFlags(dom, args->memory, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-/* remoteDispatchDomainSetMemoryParameters has to be implemented manually */
-
-/* remoteDispatchDomainSetSchedulerParameters has to be implemented manually */
-
-static int
-remoteDispatchDomainSetVcpus(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_set_vcpus_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSetVcpus(dom, args->nvcpus) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSetVcpusFlags(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_set_vcpus_flags_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSetVcpusFlags(dom, args->nvcpus, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainShutdown(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_shutdown_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainShutdown(dom) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSnapshotCreateXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_snapshot_create_xml_args *args,
- remote_domain_snapshot_create_xml_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainSnapshotPtr snap = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((snap = virDomainSnapshotCreateXML(dom, args->xml_desc, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_domain_snapshot(&ret->snap, snap);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- if (snap)
- virDomainSnapshotFree(snap);
- return rv;
-}
-
-static int
-remoteDispatchDomainSnapshotCurrent(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_snapshot_current_args *args,
- remote_domain_snapshot_current_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainSnapshotPtr snap = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((snap = virDomainSnapshotCurrent(dom, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_domain_snapshot(&ret->snap, snap);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- if (snap)
- virDomainSnapshotFree(snap);
- return rv;
-}
-
-static int
-remoteDispatchDomainSnapshotDelete(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_snapshot_delete_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainSnapshotPtr snapshot = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->snap.dom)))
- goto cleanup;
-
- if (!(snapshot = get_nonnull_domain_snapshot(dom, args->snap)))
- goto cleanup;
-
- if (virDomainSnapshotDelete(snapshot, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (snapshot)
- virDomainSnapshotFree(snapshot);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSnapshotDumpXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_snapshot_dump_xml_args *args,
- remote_domain_snapshot_dump_xml_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainSnapshotPtr snapshot = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->snap.dom)))
- goto cleanup;
-
- if (!(snapshot = get_nonnull_domain_snapshot(dom, args->snap)))
- goto cleanup;
-
- if ((xml = virDomainSnapshotGetXMLDesc(snapshot, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (snapshot)
- virDomainSnapshotFree(snapshot);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSnapshotListNames(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_snapshot_list_names_args *args,
- remote_domain_snapshot_list_names_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virDomainSnapshotListNames(dom, ret->names.names_val, args->maxnames, args->flags)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSnapshotLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_snapshot_lookup_by_name_args *args,
- remote_domain_snapshot_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- virDomainSnapshotPtr snap = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((snap = virDomainSnapshotLookupByName(dom, args->name, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_domain_snapshot(&ret->snap, snap);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- if (snap)
- virDomainSnapshotFree(snap);
- return rv;
-}
-
-static int
-remoteDispatchDomainSnapshotNum(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_snapshot_num_args *args,
- remote_domain_snapshot_num_ret *ret)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if ((num = virDomainSnapshotNum(dom, args->flags)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainSuspend(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_suspend_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainSuspend(dom) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainUndefine(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_undefine_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainUndefine(dom) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainUpdateDeviceFlags(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_update_device_flags_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virDomainPtr dom = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (virDomainUpdateDeviceFlags(dom, args->xml, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainXMLFromNative(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_xml_from_native_args *args,
- remote_domain_xml_from_native_ret *ret)
-{
- int rv = -1;
- char *domainXml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((domainXml = virConnectDomainXMLFromNative(conn, args->nativeFormat, args->nativeConfig, args->flags)) == NULL)
- goto cleanup;
-
- ret->domainXml = domainXml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchDomainXMLToNative(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_xml_to_native_args *args,
- remote_domain_xml_to_native_ret *ret)
-{
- int rv = -1;
- char *nativeConfig;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((nativeConfig = virConnectDomainXMLToNative(conn, args->nativeFormat, args->domainXml, args->flags)) == NULL)
- goto cleanup;
-
- ret->nativeConfig = nativeConfig;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchFindStoragePoolSources(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_find_storage_pool_sources_args *args,
- remote_find_storage_pool_sources_ret *ret)
-{
- int rv = -1;
- char *srcSpec;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- srcSpec = args->srcSpec ? *args->srcSpec : NULL;
-
- if ((xml = virConnectFindStoragePoolSources(conn, args->type, srcSpec, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchGetCapabilities(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_get_capabilities_ret *ret)
-{
- int rv = -1;
- char *capabilities;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((capabilities = virConnectGetCapabilities(conn)) == NULL)
- goto cleanup;
-
- ret->capabilities = capabilities;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchGetHostname(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_get_hostname_ret *ret)
-{
- int rv = -1;
- char *hostname;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((hostname = virConnectGetHostname(conn)) == NULL)
- goto cleanup;
-
- ret->hostname = hostname;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchGetLibVersion(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_get_lib_version_ret *ret)
-{
- int rv = -1;
- unsigned long lib_ver;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (virConnectGetLibVersion(conn, &lib_ver) < 0)
- goto cleanup;
-
- ret->lib_ver = lib_ver;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchGetMaxVcpus(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_get_max_vcpus_args *args,
- remote_get_max_vcpus_ret *ret)
-{
- int rv = -1;
- char *type;
- int max_vcpus;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- type = args->type ? *args->type : NULL;
-
- if ((max_vcpus = virConnectGetMaxVcpus(conn, type)) < 0)
- goto cleanup;
-
- ret->max_vcpus = max_vcpus;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchGetSysinfo(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_get_sysinfo_args *args,
- remote_get_sysinfo_ret *ret)
-{
- int rv = -1;
- char *sysinfo;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((sysinfo = virConnectGetSysinfo(conn, args->flags)) == NULL)
- goto cleanup;
-
- ret->sysinfo = sysinfo;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-/* remoteDispatchGetType has to be implemented manually */
-
-static int
-remoteDispatchGetURI(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_get_uri_ret *ret)
-{
- int rv = -1;
- char *uri;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((uri = virConnectGetURI(conn)) == NULL)
- goto cleanup;
-
- ret->uri = uri;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchGetVersion(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_get_version_ret *ret)
-{
- int rv = -1;
- unsigned long hv_ver;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (virConnectGetVersion(conn, &hv_ver) < 0)
- goto cleanup;
-
- ret->hv_ver = hv_ver;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceCreate(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_create_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(iface = get_nonnull_interface(conn, args->iface)))
- goto cleanup;
-
- if (virInterfaceCreate(iface, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceDefineXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_define_xml_args *args,
- remote_interface_define_xml_ret *ret)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((iface = virInterfaceDefineXML(conn, args->xml, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_interface(&ret->iface, iface);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceDestroy(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_destroy_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(iface = get_nonnull_interface(conn, args->iface)))
- goto cleanup;
-
- if (virInterfaceDestroy(iface, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceGetXMLDesc(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_get_xml_desc_args *args,
- remote_interface_get_xml_desc_ret *ret)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(iface = get_nonnull_interface(conn, args->iface)))
- goto cleanup;
-
- if ((xml = virInterfaceGetXMLDesc(iface, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceIsActive(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_is_active_args *args,
- remote_interface_is_active_ret *ret)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
- int active;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(iface = get_nonnull_interface(conn, args->iface)))
- goto cleanup;
-
- if ((active = virInterfaceIsActive(iface)) < 0)
- goto cleanup;
-
- ret->active = active;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceLookupByMACString(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_lookup_by_mac_string_args *args,
- remote_interface_lookup_by_mac_string_ret *ret)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((iface = virInterfaceLookupByMACString(conn, args->mac)) == NULL)
- goto cleanup;
-
- make_nonnull_interface(&ret->iface, iface);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_lookup_by_name_args *args,
- remote_interface_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((iface = virInterfaceLookupByName(conn, args->name)) == NULL)
- goto cleanup;
-
- make_nonnull_interface(&ret->iface, iface);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchInterfaceUndefine(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_interface_undefine_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virInterfacePtr iface = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(iface = get_nonnull_interface(conn, args->iface)))
- goto cleanup;
-
- if (virInterfaceUndefine(iface) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (iface)
- virInterfaceFree(iface);
- return rv;
-}
-
-static int
-remoteDispatchIsSecure(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_is_secure_ret *ret)
-{
- int rv = -1;
- int secure;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((secure = virConnectIsSecure(conn)) < 0)
- goto cleanup;
-
- ret->secure = secure;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchListDefinedDomains(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_defined_domains_args *args,
- remote_list_defined_domains_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_DOMAIN_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListDefinedDomains(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListDefinedInterfaces(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_defined_interfaces_args *args,
- remote_list_defined_interfaces_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListDefinedInterfaces(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListDefinedNetworks(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_defined_networks_args *args,
- remote_list_defined_networks_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListDefinedNetworks(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListDefinedStoragePools(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_defined_storage_pools_args *args,
- remote_list_defined_storage_pools_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListDefinedStoragePools(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListDomains(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_domains_args *args,
- remote_list_domains_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxids > REMOTE_DOMAIN_ID_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxids > REMOTE_DOMAIN_ID_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->ids.ids_val, args->maxids) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListDomains(conn, ret->ids.ids_val, args->maxids)) < 0)
- goto cleanup;
-
- ret->ids.ids_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->ids.ids_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListInterfaces(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_interfaces_args *args,
- remote_list_interfaces_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_INTERFACE_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_INTERFACE_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListInterfaces(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListNetworks(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_networks_args *args,
- remote_list_networks_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListNetworks(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListNWFilters(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_nwfilters_args *args,
- remote_list_nwfilters_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_NWFILTER_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_NWFILTER_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListNWFilters(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListSecrets(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_secrets_args *args,
- remote_list_secrets_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxuuids > REMOTE_SECRET_UUID_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxuuids > REMOTE_SECRET_UUID_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->uuids.uuids_val, args->maxuuids) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListSecrets(conn, ret->uuids.uuids_val, args->maxuuids)) < 0)
- goto cleanup;
-
- ret->uuids.uuids_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->uuids.uuids_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchListStoragePools(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_list_storage_pools_args *args,
- remote_list_storage_pools_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virConnectListStoragePools(conn, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchNetworkCreate(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_create_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if (virNetworkCreate(net) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkCreateXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_create_xml_args *args,
- remote_network_create_xml_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((net = virNetworkCreateXML(conn, args->xml)) == NULL)
- goto cleanup;
-
- make_nonnull_network(&ret->net, net);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkDefineXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_define_xml_args *args,
- remote_network_define_xml_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((net = virNetworkDefineXML(conn, args->xml)) == NULL)
- goto cleanup;
-
- make_nonnull_network(&ret->net, net);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkDestroy(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_destroy_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if (virNetworkDestroy(net) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkDumpXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_dump_xml_args *args,
- remote_network_dump_xml_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if ((xml = virNetworkGetXMLDesc(net, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkGetAutostart(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_get_autostart_args *args,
- remote_network_get_autostart_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
- int autostart;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if (virNetworkGetAutostart(net, &autostart) < 0)
- goto cleanup;
-
- ret->autostart = autostart;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkGetBridgeName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_get_bridge_name_args *args,
- remote_network_get_bridge_name_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
- char *name;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if ((name = virNetworkGetBridgeName(net)) == NULL)
- goto cleanup;
-
- ret->name = name;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkIsActive(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_is_active_args *args,
- remote_network_is_active_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
- int active;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if ((active = virNetworkIsActive(net)) < 0)
- goto cleanup;
-
- ret->active = active;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkIsPersistent(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_is_persistent_args *args,
- remote_network_is_persistent_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
- int persistent;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if ((persistent = virNetworkIsPersistent(net)) < 0)
- goto cleanup;
-
- ret->persistent = persistent;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_lookup_by_name_args *args,
- remote_network_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((net = virNetworkLookupByName(conn, args->name)) == NULL)
- goto cleanup;
-
- make_nonnull_network(&ret->net, net);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkLookupByUUID(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_lookup_by_uuid_args *args,
- remote_network_lookup_by_uuid_ret *ret)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((net = virNetworkLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
- goto cleanup;
-
- make_nonnull_network(&ret->net, net);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkSetAutostart(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_set_autostart_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if (virNetworkSetAutostart(net, args->autostart) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNetworkUndefine(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_network_undefine_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNetworkPtr net = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(net = get_nonnull_network(conn, args->net)))
- goto cleanup;
-
- if (virNetworkUndefine(net) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (net)
- virNetworkFree(net);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceCreateXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_create_xml_args *args,
- remote_node_device_create_xml_ret *ret)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((dev = virNodeDeviceCreateXML(conn, args->xml_desc, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_node_device(&ret->dev, dev);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceDestroy(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_destroy_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
- goto cleanup;
-
- if (virNodeDeviceDestroy(dev) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceDettach(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_dettach_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
- goto cleanup;
-
- if (virNodeDeviceDettach(dev) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceDumpXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_dump_xml_args *args,
- remote_node_device_dump_xml_ret *ret)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
- goto cleanup;
-
- if ((xml = virNodeDeviceGetXMLDesc(dev, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-/* remoteDispatchNodeDeviceGetParent has to be implemented manually */
-
-static int
-remoteDispatchNodeDeviceListCaps(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_list_caps_args *args,
- remote_node_device_list_caps_ret *ret)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX"));
- goto cleanup;
- }
-
- if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
- goto cleanup;
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virNodeDeviceListCaps(dev, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_lookup_by_name_args *args,
- remote_node_device_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((dev = virNodeDeviceLookupByName(conn, args->name)) == NULL)
- goto cleanup;
-
- make_nonnull_node_device(&ret->dev, dev);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceNumOfCaps(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_num_of_caps_args *args,
- remote_node_device_num_of_caps_ret *ret)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
- goto cleanup;
-
- if ((num = virNodeDeviceNumOfCaps(dev)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceReAttach(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_re_attach_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
- goto cleanup;
-
- if (virNodeDeviceReAttach(dev) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeDeviceReset(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_device_reset_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNodeDevicePtr dev = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
- goto cleanup;
-
- if (virNodeDeviceReset(dev) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dev)
- virNodeDeviceFree(dev);
- return rv;
-}
-
-static int
-remoteDispatchNodeGetCellsFreeMemory(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_get_cells_free_memory_args *args,
- remote_node_get_cells_free_memory_ret *ret)
-{
- int rv = -1;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxCells > REMOTE_NODE_MAX_CELLS) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxfreeMems > REMOTE_NODE_MAX_CELLS"));
- goto cleanup;
- }
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->freeMems.freeMems_val, args->maxCells) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virNodeGetCellsFreeMemory(conn, (unsigned long long *)ret->freeMems.freeMems_val, args->startCell, args->maxCells)) <= 0)
- goto cleanup;
-
- ret->freeMems.freeMems_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->freeMems.freeMems_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchNodeGetFreeMemory(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_node_get_free_memory_ret *ret)
-{
- int rv = -1;
- unsigned long freeMem;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((freeMem = virNodeGetFreeMemory(conn)) == 0)
- goto cleanup;
-
- ret->freeMem = freeMem;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNodeGetInfo(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_node_get_info_ret *ret)
-{
- int rv = -1;
- virNodeInfo tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (virNodeGetInfo(conn, &tmp) < 0)
- goto cleanup;
-
- memcpy(ret->model, tmp.model, sizeof ret->model);
- ret->memory = tmp.memory;
- ret->cpus = tmp.cpus;
- ret->mhz = tmp.mhz;
- ret->nodes = tmp.nodes;
- ret->sockets = tmp.sockets;
- ret->cores = tmp.cores;
- ret->threads = tmp.threads;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-/* remoteDispatchNodeGetSecurityModel has to be implemented manually */
-
-static int
-remoteDispatchNodeListDevices(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_list_devices_args *args,
- remote_node_list_devices_ret *ret)
-{
- int rv = -1;
- char *cap;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- cap = args->cap ? *args->cap : NULL;
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virNodeListDevices(conn, cap, ret->names.names_val, args->maxnames, args->flags)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- return rv;
-}
-
-static int
-remoteDispatchNodeNumOfDevices(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_node_num_of_devices_args *args,
- remote_node_num_of_devices_ret *ret)
-{
- int rv = -1;
- char *cap;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- cap = args->cap ? *args->cap : NULL;
-
- if ((num = virNodeNumOfDevices(conn, cap, args->flags)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfDefinedDomains(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_defined_domains_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfDefinedDomains(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfDefinedInterfaces(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_defined_interfaces_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfDefinedInterfaces(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfDefinedNetworks(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_defined_networks_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfDefinedNetworks(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfDefinedStoragePools(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_defined_storage_pools_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfDefinedStoragePools(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfDomains(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_domains_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfDomains(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfInterfaces(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_interfaces_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfInterfaces(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfNetworks(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_networks_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfNetworks(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfNWFilters(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_nwfilters_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfNWFilters(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfSecrets(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_secrets_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfSecrets(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNumOfStoragePools(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- void *args ATTRIBUTE_UNUSED,
- remote_num_of_storage_pools_ret *ret)
-{
- int rv = -1;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((num = virConnectNumOfStoragePools(conn)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
-
-static int
-remoteDispatchNWFilterDefineXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_nwfilter_define_xml_args *args,
- remote_nwfilter_define_xml_ret *ret)
-{
- int rv = -1;
- virNWFilterPtr nwfilter = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((nwfilter = virNWFilterDefineXML(conn, args->xml)) == NULL)
- goto cleanup;
-
- make_nonnull_nwfilter(&ret->nwfilter, nwfilter);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (nwfilter)
- virNWFilterFree(nwfilter);
- return rv;
-}
-
-static int
-remoteDispatchNWFilterGetXMLDesc(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_nwfilter_get_xml_desc_args *args,
- remote_nwfilter_get_xml_desc_ret *ret)
-{
- int rv = -1;
- virNWFilterPtr nwfilter = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(nwfilter = get_nonnull_nwfilter(conn, args->nwfilter)))
- goto cleanup;
-
- if ((xml = virNWFilterGetXMLDesc(nwfilter, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (nwfilter)
- virNWFilterFree(nwfilter);
- return rv;
-}
-
-static int
-remoteDispatchNWFilterLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_nwfilter_lookup_by_name_args *args,
- remote_nwfilter_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virNWFilterPtr nwfilter = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((nwfilter = virNWFilterLookupByName(conn, args->name)) == NULL)
- goto cleanup;
-
- make_nonnull_nwfilter(&ret->nwfilter, nwfilter);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (nwfilter)
- virNWFilterFree(nwfilter);
- return rv;
-}
-
-static int
-remoteDispatchNWFilterLookupByUUID(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_nwfilter_lookup_by_uuid_args *args,
- remote_nwfilter_lookup_by_uuid_ret *ret)
-{
- int rv = -1;
- virNWFilterPtr nwfilter = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((nwfilter = virNWFilterLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
- goto cleanup;
-
- make_nonnull_nwfilter(&ret->nwfilter, nwfilter);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (nwfilter)
- virNWFilterFree(nwfilter);
- return rv;
-}
-
-static int
-remoteDispatchNWFilterUndefine(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_nwfilter_undefine_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virNWFilterPtr nwfilter = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(nwfilter = get_nonnull_nwfilter(conn, args->nwfilter)))
- goto cleanup;
-
- if (virNWFilterUndefine(nwfilter) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (nwfilter)
- virNWFilterFree(nwfilter);
- return rv;
-}
-
-/* remoteDispatchOpen has to be implemented manually */
-
-static int
-remoteDispatchSecretDefineXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_secret_define_xml_args *args,
- remote_secret_define_xml_ret *ret)
-{
- int rv = -1;
- virSecretPtr secret = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((secret = virSecretDefineXML(conn, args->xml, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_secret(&ret->secret, secret);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (secret)
- virSecretFree(secret);
- return rv;
-}
-
-/* remoteDispatchSecretGetValue has to be implemented manually */
-
-static int
-remoteDispatchSecretGetXMLDesc(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_secret_get_xml_desc_args *args,
- remote_secret_get_xml_desc_ret *ret)
-{
- int rv = -1;
- virSecretPtr secret = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(secret = get_nonnull_secret(conn, args->secret)))
- goto cleanup;
-
- if ((xml = virSecretGetXMLDesc(secret, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (secret)
- virSecretFree(secret);
- return rv;
-}
-
-static int
-remoteDispatchSecretLookupByUsage(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_secret_lookup_by_usage_args *args,
- remote_secret_lookup_by_usage_ret *ret)
-{
- int rv = -1;
- virSecretPtr secret = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((secret = virSecretLookupByUsage(conn, args->usageType, args->usageID)) == NULL)
- goto cleanup;
-
- make_nonnull_secret(&ret->secret, secret);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (secret)
- virSecretFree(secret);
- return rv;
-}
-
-static int
-remoteDispatchSecretLookupByUUID(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_secret_lookup_by_uuid_args *args,
- remote_secret_lookup_by_uuid_ret *ret)
-{
- int rv = -1;
- virSecretPtr secret = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((secret = virSecretLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
- goto cleanup;
-
- make_nonnull_secret(&ret->secret, secret);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (secret)
- virSecretFree(secret);
- return rv;
-}
-
-static int
-remoteDispatchSecretSetValue(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_secret_set_value_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virSecretPtr secret = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(secret = get_nonnull_secret(conn, args->secret)))
- goto cleanup;
-
- if (virSecretSetValue(secret, (const unsigned char *)args->value.value_val, args->value.value_len, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (secret)
- virSecretFree(secret);
- return rv;
-}
-
-static int
-remoteDispatchSecretUndefine(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_secret_undefine_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virSecretPtr secret = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(secret = get_nonnull_secret(conn, args->secret)))
- goto cleanup;
-
- if (virSecretUndefine(secret) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (secret)
- virSecretFree(secret);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolBuild(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_build_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolBuild(pool, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolCreate(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_create_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolCreate(pool, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolCreateXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_create_xml_args *args,
- remote_storage_pool_create_xml_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((pool = virStoragePoolCreateXML(conn, args->xml, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_pool(&ret->pool, pool);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolDefineXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_define_xml_args *args,
- remote_storage_pool_define_xml_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((pool = virStoragePoolDefineXML(conn, args->xml, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_pool(&ret->pool, pool);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolDelete(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_delete_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolDelete(pool, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolDestroy(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_destroy_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolDestroy(pool) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolDumpXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_dump_xml_args *args,
- remote_storage_pool_dump_xml_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if ((xml = virStoragePoolGetXMLDesc(pool, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolGetAutostart(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_get_autostart_args *args,
- remote_storage_pool_get_autostart_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- int autostart;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolGetAutostart(pool, &autostart) < 0)
- goto cleanup;
-
- ret->autostart = autostart;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolGetInfo(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_get_info_args *args,
- remote_storage_pool_get_info_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- virStoragePoolInfo tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolGetInfo(pool, &tmp) < 0)
- goto cleanup;
-
- ret->state = tmp.state;
- ret->capacity = tmp.capacity;
- ret->allocation = tmp.allocation;
- ret->available = tmp.available;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolIsActive(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_is_active_args *args,
- remote_storage_pool_is_active_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- int active;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if ((active = virStoragePoolIsActive(pool)) < 0)
- goto cleanup;
-
- ret->active = active;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolIsPersistent(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_is_persistent_args *args,
- remote_storage_pool_is_persistent_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- int persistent;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if ((persistent = virStoragePoolIsPersistent(pool)) < 0)
- goto cleanup;
-
- ret->persistent = persistent;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolListVolumes(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_list_volumes_args *args,
- remote_storage_pool_list_volumes_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- int len;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (args->maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- /* Allocate return buffer. */
- if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if ((len = virStoragePoolListVolumes(pool, ret->names.names_val, args->maxnames)) < 0)
- goto cleanup;
-
- ret->names.names_len = len;
- rv = 0;
-
-cleanup:
- if (rv < 0) {
- remoteDispatchError(rerr);
- VIR_FREE(ret->names.names_val);
- }
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_lookup_by_name_args *args,
- remote_storage_pool_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((pool = virStoragePoolLookupByName(conn, args->name)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_pool(&ret->pool, pool);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolLookupByUUID(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_lookup_by_uuid_args *args,
- remote_storage_pool_lookup_by_uuid_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((pool = virStoragePoolLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_pool(&ret->pool, pool);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolLookupByVolume(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_lookup_by_volume_args *args,
- remote_storage_pool_lookup_by_volume_ret *ret)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
- goto cleanup;
-
- if ((pool = virStoragePoolLookupByVolume(vol)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_pool(&ret->pool, pool);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolNumOfVolumes(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_num_of_volumes_args *args,
- remote_storage_pool_num_of_volumes_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- int num;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if ((num = virStoragePoolNumOfVolumes(pool)) < 0)
- goto cleanup;
-
- ret->num = num;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolRefresh(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_refresh_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolRefresh(pool, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolSetAutostart(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_set_autostart_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolSetAutostart(pool, args->autostart) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStoragePoolUndefine(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_pool_undefine_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (virStoragePoolUndefine(pool) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolCreateXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_create_xml_args *args,
- remote_storage_vol_create_xml_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- virStorageVolPtr vol = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if ((vol = virStorageVolCreateXML(pool, args->xml, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_vol(&ret->vol, vol);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolCreateXMLFrom(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_create_xml_from_args *args,
- remote_storage_vol_create_xml_from_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- virStorageVolPtr clonevol = NULL;
- virStorageVolPtr vol = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if (!(clonevol = get_nonnull_storage_vol(conn, args->clonevol)))
- goto cleanup;
-
- if ((vol = virStorageVolCreateXMLFrom(pool, args->xml, clonevol, args->flags)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_vol(&ret->vol, vol);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- if (clonevol)
- virStorageVolFree(clonevol);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolDelete(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_delete_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
- goto cleanup;
-
- if (virStorageVolDelete(vol, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-/* remoteDispatchStorageVolDownload has to be implemented manually */
-
-static int
-remoteDispatchStorageVolDumpXML(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_dump_xml_args *args,
- remote_storage_vol_dump_xml_ret *ret)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
- char *xml;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
- goto cleanup;
-
- if ((xml = virStorageVolGetXMLDesc(vol, args->flags)) == NULL)
- goto cleanup;
-
- ret->xml = xml;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolGetInfo(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_get_info_args *args,
- remote_storage_vol_get_info_ret *ret)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
- virStorageVolInfo tmp;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
- goto cleanup;
-
- if (virStorageVolGetInfo(vol, &tmp) < 0)
- goto cleanup;
-
- ret->type = tmp.type;
- ret->capacity = tmp.capacity;
- ret->allocation = tmp.allocation;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolGetPath(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_get_path_args *args,
- remote_storage_vol_get_path_ret *ret)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
- char *name;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
- goto cleanup;
-
- if ((name = virStorageVolGetPath(vol)) == NULL)
- goto cleanup;
-
- ret->name = name;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolLookupByKey(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_lookup_by_key_args *args,
- remote_storage_vol_lookup_by_key_ret *ret)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((vol = virStorageVolLookupByKey(conn, args->key)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_vol(&ret->vol, vol);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolLookupByName(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_lookup_by_name_args *args,
- remote_storage_vol_lookup_by_name_ret *ret)
-{
- int rv = -1;
- virStoragePoolPtr pool = NULL;
- virStorageVolPtr vol = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
- goto cleanup;
-
- if ((vol = virStorageVolLookupByName(pool, args->name)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_vol(&ret->vol, vol);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (pool)
- virStoragePoolFree(pool);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchStorageVolLookupByPath(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_lookup_by_path_args *args,
- remote_storage_vol_lookup_by_path_ret *ret)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((vol = virStorageVolLookupByPath(conn, args->path)) == NULL)
- goto cleanup;
-
- make_nonnull_storage_vol(&ret->vol, vol);
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-/* remoteDispatchStorageVolUpload has to be implemented manually */
-
-static int
-remoteDispatchStorageVolWipe(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_storage_vol_wipe_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- int rv = -1;
- virStorageVolPtr vol = NULL;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
- goto cleanup;
-
- if (virStorageVolWipe(vol, args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (vol)
- virStorageVolFree(vol);
- return rv;
-}
-
-static int
-remoteDispatchSupportsFeature(
- struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_supports_feature_args *args,
- remote_supports_feature_ret *ret)
-{
- int rv = -1;
- int supported;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if ((supported = virDrvSupportsFeature(conn, args->feature)) < 0)
- goto cleanup;
-
- ret->supported = supported;
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- return rv;
-}
--- /dev/null
+/* Automatically generated by remote_generator.pl.
+ * Do not edit this file. Any changes you make will be lost.
+ */
+
+/* remoteDispatchAuthList has to be implemented manually */
+
+/* remoteDispatchAuthPolkit has to be implemented manually */
+
+/* remoteDispatchAuthSaslInit has to be implemented manually */
+
+/* remoteDispatchAuthSaslStart has to be implemented manually */
+
+/* remoteDispatchAuthSaslStep has to be implemented manually */
+
+/* remoteDispatchClose has to be implemented manually */
+
+static int
+remoteDispatchCPUBaseline(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_cpu_baseline_args *args,
+ remote_cpu_baseline_ret *ret)
+{
+ int rv = -1;
+ char *cpu;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((cpu = virConnectBaselineCPU(conn, (const char **)args->xmlCPUs.xmlCPUs_val, args->xmlCPUs.xmlCPUs_len, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->cpu = cpu;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchCPUCompare(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_cpu_compare_args *args,
+ remote_cpu_compare_ret *ret)
+{
+ int rv = -1;
+ int result;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((result = virConnectCompareCPU(conn, args->xml, args->flags)) == VIR_CPU_COMPARE_ERROR)
+ goto cleanup;
+
+ ret->result = result;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchDomainAbortJob(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_abort_job_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainAbortJob(dom) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainAttachDevice(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_attach_device_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainAttachDevice(dom, args->xml) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainAttachDeviceFlags(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_attach_device_flags_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainAttachDeviceFlags(dom, args->xml, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainBlockPeek has to be implemented manually */
+
+static int
+remoteDispatchDomainBlockStats(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_block_stats_args *args,
+ remote_domain_block_stats_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainBlockStatsStruct tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainBlockStats(dom, args->path, &tmp, sizeof tmp) < 0)
+ goto cleanup;
+
+ ret->rd_req = tmp.rd_req;
+ ret->rd_bytes = tmp.rd_bytes;
+ ret->wr_req = tmp.wr_req;
+ ret->wr_bytes = tmp.wr_bytes;
+ ret->errs = tmp.errs;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainCoreDump(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_core_dump_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainCoreDump(dom, args->to, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainCreate(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_create_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainCreate(dom) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainCreateWithFlags has to be implemented manually */
+
+static int
+remoteDispatchDomainCreateXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_create_xml_args *args,
+ remote_domain_create_xml_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((dom = virDomainCreateXML(conn, args->xml_desc, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->dom, dom);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainDefineXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_define_xml_args *args,
+ remote_domain_define_xml_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((dom = virDomainDefineXML(conn, args->xml)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->dom, dom);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainDestroy(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_destroy_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainDestroy(dom) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainDetachDevice(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_detach_device_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainDetachDevice(dom, args->xml) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainDetachDeviceFlags(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_detach_device_flags_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainDetachDeviceFlags(dom, args->xml, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainDumpXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_dump_xml_args *args,
+ remote_domain_dump_xml_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((xml = virDomainGetXMLDesc(dom, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainEventsDeregister has to be implemented manually */
+
+/* remoteDispatchDomainEventsDeregisterAny has to be implemented manually */
+
+/* remoteDispatchDomainEventsRegister has to be implemented manually */
+
+/* remoteDispatchDomainEventsRegisterAny has to be implemented manually */
+
+static int
+remoteDispatchDomainGetAutostart(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_autostart_args *args,
+ remote_domain_get_autostart_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int autostart;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainGetAutostart(dom, &autostart) < 0)
+ goto cleanup;
+
+ ret->autostart = autostart;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainGetBlkioParameters has to be implemented manually */
+
+static int
+remoteDispatchDomainGetBlockInfo(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_block_info_args *args,
+ remote_domain_get_block_info_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainBlockInfo tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainGetBlockInfo(dom, args->path, &tmp, args->flags) < 0)
+ goto cleanup;
+
+ ret->allocation = tmp.allocation;
+ ret->capacity = tmp.capacity;
+ ret->physical = tmp.physical;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainGetInfo(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_info_args *args,
+ remote_domain_get_info_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainInfo tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainGetInfo(dom, &tmp) < 0)
+ goto cleanup;
+
+ ret->state = tmp.state;
+ ret->maxMem = tmp.maxMem;
+ ret->memory = tmp.memory;
+ ret->nrVirtCpu = tmp.nrVirtCpu;
+ ret->cpuTime = tmp.cpuTime;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainGetJobInfo(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_job_info_args *args,
+ remote_domain_get_job_info_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainJobInfo tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainGetJobInfo(dom, &tmp) < 0)
+ goto cleanup;
+
+ ret->type = tmp.type;
+ ret->timeElapsed = tmp.timeElapsed;
+ ret->timeRemaining = tmp.timeRemaining;
+ ret->dataTotal = tmp.dataTotal;
+ ret->dataProcessed = tmp.dataProcessed;
+ ret->dataRemaining = tmp.dataRemaining;
+ ret->memTotal = tmp.memTotal;
+ ret->memProcessed = tmp.memProcessed;
+ ret->memRemaining = tmp.memRemaining;
+ ret->fileTotal = tmp.fileTotal;
+ ret->fileProcessed = tmp.fileProcessed;
+ ret->fileRemaining = tmp.fileRemaining;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainGetMaxMemory(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_max_memory_args *args,
+ remote_domain_get_max_memory_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ unsigned long memory;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((memory = virDomainGetMaxMemory(dom)) == 0)
+ goto cleanup;
+
+ ret->memory = memory;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainGetMaxVcpus(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_max_vcpus_args *args,
+ remote_domain_get_max_vcpus_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((num = virDomainGetMaxVcpus(dom)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainGetMemoryParameters has to be implemented manually */
+
+static int
+remoteDispatchDomainGetOSType(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_os_type_args *args,
+ remote_domain_get_os_type_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ char *type;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((type = virDomainGetOSType(dom)) == NULL)
+ goto cleanup;
+
+ ret->type = type;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainGetSchedulerParameters has to be implemented manually */
+
+/* remoteDispatchDomainGetSchedulerType has to be implemented manually */
+
+/* remoteDispatchDomainGetSecurityLabel has to be implemented manually */
+
+/* remoteDispatchDomainGetVcpus has to be implemented manually */
+
+static int
+remoteDispatchDomainGetVcpusFlags(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_get_vcpus_flags_args *args,
+ remote_domain_get_vcpus_flags_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((num = virDomainGetVcpusFlags(dom, args->flags)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainHasCurrentSnapshot(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_has_current_snapshot_args *args,
+ remote_domain_has_current_snapshot_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int result;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((result = virDomainHasCurrentSnapshot(dom, args->flags)) < 0)
+ goto cleanup;
+
+ ret->result = result;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainHasManagedSaveImage(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_has_managed_save_image_args *args,
+ remote_domain_has_managed_save_image_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int result;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((result = virDomainHasManagedSaveImage(dom, args->flags)) < 0)
+ goto cleanup;
+
+ ret->result = result;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainInterfaceStats(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_interface_stats_args *args,
+ remote_domain_interface_stats_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainInterfaceStatsStruct tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainInterfaceStats(dom, args->path, &tmp, sizeof tmp) < 0)
+ goto cleanup;
+
+ ret->rx_bytes = tmp.rx_bytes;
+ ret->rx_packets = tmp.rx_packets;
+ ret->rx_errs = tmp.rx_errs;
+ ret->rx_drop = tmp.rx_drop;
+ ret->tx_bytes = tmp.tx_bytes;
+ ret->tx_packets = tmp.tx_packets;
+ ret->tx_errs = tmp.tx_errs;
+ ret->tx_drop = tmp.tx_drop;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainIsActive(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_is_active_args *args,
+ remote_domain_is_active_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int active;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((active = virDomainIsActive(dom)) < 0)
+ goto cleanup;
+
+ ret->active = active;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainIsPersistent(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_is_persistent_args *args,
+ remote_domain_is_persistent_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int persistent;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((persistent = virDomainIsPersistent(dom)) < 0)
+ goto cleanup;
+
+ ret->persistent = persistent;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainIsUpdated(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_is_updated_args *args,
+ remote_domain_is_updated_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int updated;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((updated = virDomainIsUpdated(dom)) < 0)
+ goto cleanup;
+
+ ret->updated = updated;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainLookupByID(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_lookup_by_id_args *args,
+ remote_domain_lookup_by_id_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((dom = virDomainLookupByID(conn, args->id)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->dom, dom);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_lookup_by_name_args *args,
+ remote_domain_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((dom = virDomainLookupByName(conn, args->name)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->dom, dom);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainLookupByUUID(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_lookup_by_uuid_args *args,
+ remote_domain_lookup_by_uuid_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((dom = virDomainLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->dom, dom);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainManagedSave(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_managed_save_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainManagedSave(dom, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainManagedSaveRemove(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_managed_save_remove_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainManagedSaveRemove(dom, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainMemoryPeek has to be implemented manually */
+
+/* remoteDispatchDomainMemoryStats has to be implemented manually */
+
+static int
+remoteDispatchDomainMigrateFinish(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_migrate_finish_args *args,
+ remote_domain_migrate_finish_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr ddom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((ddom = virDomainMigrateFinish(conn, args->dname, args->cookie.cookie_val, args->cookie.cookie_len, args->uri, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->ddom, ddom);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (ddom)
+ virDomainFree(ddom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainMigrateFinish2(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_migrate_finish2_args *args,
+ remote_domain_migrate_finish2_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr ddom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((ddom = virDomainMigrateFinish2(conn, args->dname, args->cookie.cookie_val, args->cookie.cookie_len, args->uri, args->flags, args->retcode)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain(&ret->ddom, ddom);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (ddom)
+ virDomainFree(ddom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainMigratePerform(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_migrate_perform_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ char *dname;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ dname = args->dname ? *args->dname : NULL;
+
+ if (virDomainMigratePerform(dom, args->cookie.cookie_val, args->cookie.cookie_len, args->uri, args->flags, dname, args->resource) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainMigratePrepare has to be implemented manually */
+
+/* remoteDispatchDomainMigratePrepare2 has to be implemented manually */
+
+/* remoteDispatchDomainMigratePrepareTunnel has to be implemented manually */
+
+static int
+remoteDispatchDomainMigrateSetMaxDowntime(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_migrate_set_max_downtime_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainMigrateSetMaxDowntime(dom, args->downtime, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainMigrateSetMaxSpeed(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_migrate_set_max_speed_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainMigrateSetMaxSpeed(dom, args->bandwidth, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainOpenConsole has to be implemented manually */
+
+/* remoteDispatchDomainPinVcpu has to be implemented manually */
+
+static int
+remoteDispatchDomainReboot(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_reboot_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainReboot(dom, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainRestore(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_restore_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (virDomainRestore(conn, args->from) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchDomainResume(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_resume_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainResume(dom) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainRevertToSnapshot(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_revert_to_snapshot_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainSnapshotPtr snapshot = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->snap.dom)))
+ goto cleanup;
+
+ if (!(snapshot = get_nonnull_domain_snapshot(dom, args->snap)))
+ goto cleanup;
+
+ if (virDomainRevertToSnapshot(snapshot, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (snapshot)
+ virDomainSnapshotFree(snapshot);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSave(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_save_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSave(dom, args->to) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSetAutostart(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_set_autostart_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSetAutostart(dom, args->autostart) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainSetBlkioParameters has to be implemented manually */
+
+static int
+remoteDispatchDomainSetMaxMemory(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_set_max_memory_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSetMaxMemory(dom, args->memory) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSetMemory(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_set_memory_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSetMemory(dom, args->memory) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSetMemoryFlags(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_set_memory_flags_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSetMemoryFlags(dom, args->memory, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+/* remoteDispatchDomainSetMemoryParameters has to be implemented manually */
+
+/* remoteDispatchDomainSetSchedulerParameters has to be implemented manually */
+
+static int
+remoteDispatchDomainSetVcpus(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_set_vcpus_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSetVcpus(dom, args->nvcpus) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSetVcpusFlags(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_set_vcpus_flags_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSetVcpusFlags(dom, args->nvcpus, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainShutdown(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_shutdown_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainShutdown(dom) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSnapshotCreateXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_snapshot_create_xml_args *args,
+ remote_domain_snapshot_create_xml_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainSnapshotPtr snap = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((snap = virDomainSnapshotCreateXML(dom, args->xml_desc, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain_snapshot(&ret->snap, snap);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ if (snap)
+ virDomainSnapshotFree(snap);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSnapshotCurrent(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_snapshot_current_args *args,
+ remote_domain_snapshot_current_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainSnapshotPtr snap = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((snap = virDomainSnapshotCurrent(dom, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain_snapshot(&ret->snap, snap);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ if (snap)
+ virDomainSnapshotFree(snap);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSnapshotDelete(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_snapshot_delete_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainSnapshotPtr snapshot = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->snap.dom)))
+ goto cleanup;
+
+ if (!(snapshot = get_nonnull_domain_snapshot(dom, args->snap)))
+ goto cleanup;
+
+ if (virDomainSnapshotDelete(snapshot, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (snapshot)
+ virDomainSnapshotFree(snapshot);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSnapshotDumpXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_snapshot_dump_xml_args *args,
+ remote_domain_snapshot_dump_xml_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainSnapshotPtr snapshot = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->snap.dom)))
+ goto cleanup;
+
+ if (!(snapshot = get_nonnull_domain_snapshot(dom, args->snap)))
+ goto cleanup;
+
+ if ((xml = virDomainSnapshotGetXMLDesc(snapshot, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (snapshot)
+ virDomainSnapshotFree(snapshot);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSnapshotListNames(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_snapshot_list_names_args *args,
+ remote_domain_snapshot_list_names_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virDomainSnapshotListNames(dom, ret->names.names_val, args->maxnames, args->flags)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSnapshotLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_snapshot_lookup_by_name_args *args,
+ remote_domain_snapshot_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ virDomainSnapshotPtr snap = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((snap = virDomainSnapshotLookupByName(dom, args->name, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_domain_snapshot(&ret->snap, snap);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ if (snap)
+ virDomainSnapshotFree(snap);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSnapshotNum(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_snapshot_num_args *args,
+ remote_domain_snapshot_num_ret *ret)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if ((num = virDomainSnapshotNum(dom, args->flags)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainSuspend(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_suspend_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainSuspend(dom) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainUndefine(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_undefine_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainUndefine(dom) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainUpdateDeviceFlags(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_update_device_flags_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virDomainPtr dom = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dom = get_nonnull_domain(conn, args->dom)))
+ goto cleanup;
+
+ if (virDomainUpdateDeviceFlags(dom, args->xml, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dom)
+ virDomainFree(dom);
+ return rv;
+}
+
+static int
+remoteDispatchDomainXMLFromNative(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_xml_from_native_args *args,
+ remote_domain_xml_from_native_ret *ret)
+{
+ int rv = -1;
+ char *domainXml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((domainXml = virConnectDomainXMLFromNative(conn, args->nativeFormat, args->nativeConfig, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->domainXml = domainXml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchDomainXMLToNative(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_domain_xml_to_native_args *args,
+ remote_domain_xml_to_native_ret *ret)
+{
+ int rv = -1;
+ char *nativeConfig;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((nativeConfig = virConnectDomainXMLToNative(conn, args->nativeFormat, args->domainXml, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->nativeConfig = nativeConfig;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchFindStoragePoolSources(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_find_storage_pool_sources_args *args,
+ remote_find_storage_pool_sources_ret *ret)
+{
+ int rv = -1;
+ char *srcSpec;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ srcSpec = args->srcSpec ? *args->srcSpec : NULL;
+
+ if ((xml = virConnectFindStoragePoolSources(conn, args->type, srcSpec, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchGetCapabilities(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_get_capabilities_ret *ret)
+{
+ int rv = -1;
+ char *capabilities;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((capabilities = virConnectGetCapabilities(conn)) == NULL)
+ goto cleanup;
+
+ ret->capabilities = capabilities;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchGetHostname(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_get_hostname_ret *ret)
+{
+ int rv = -1;
+ char *hostname;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((hostname = virConnectGetHostname(conn)) == NULL)
+ goto cleanup;
+
+ ret->hostname = hostname;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchGetLibVersion(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_get_lib_version_ret *ret)
+{
+ int rv = -1;
+ unsigned long lib_ver;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (virConnectGetLibVersion(conn, &lib_ver) < 0)
+ goto cleanup;
+
+ ret->lib_ver = lib_ver;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchGetMaxVcpus(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_get_max_vcpus_args *args,
+ remote_get_max_vcpus_ret *ret)
+{
+ int rv = -1;
+ char *type;
+ int max_vcpus;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ type = args->type ? *args->type : NULL;
+
+ if ((max_vcpus = virConnectGetMaxVcpus(conn, type)) < 0)
+ goto cleanup;
+
+ ret->max_vcpus = max_vcpus;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchGetSysinfo(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_get_sysinfo_args *args,
+ remote_get_sysinfo_ret *ret)
+{
+ int rv = -1;
+ char *sysinfo;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((sysinfo = virConnectGetSysinfo(conn, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->sysinfo = sysinfo;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+/* remoteDispatchGetType has to be implemented manually */
+
+static int
+remoteDispatchGetURI(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_get_uri_ret *ret)
+{
+ int rv = -1;
+ char *uri;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((uri = virConnectGetURI(conn)) == NULL)
+ goto cleanup;
+
+ ret->uri = uri;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchGetVersion(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_get_version_ret *ret)
+{
+ int rv = -1;
+ unsigned long hv_ver;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (virConnectGetVersion(conn, &hv_ver) < 0)
+ goto cleanup;
+
+ ret->hv_ver = hv_ver;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceCreate(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_create_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(iface = get_nonnull_interface(conn, args->iface)))
+ goto cleanup;
+
+ if (virInterfaceCreate(iface, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceDefineXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_define_xml_args *args,
+ remote_interface_define_xml_ret *ret)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((iface = virInterfaceDefineXML(conn, args->xml, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_interface(&ret->iface, iface);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceDestroy(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_destroy_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(iface = get_nonnull_interface(conn, args->iface)))
+ goto cleanup;
+
+ if (virInterfaceDestroy(iface, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceGetXMLDesc(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_get_xml_desc_args *args,
+ remote_interface_get_xml_desc_ret *ret)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(iface = get_nonnull_interface(conn, args->iface)))
+ goto cleanup;
+
+ if ((xml = virInterfaceGetXMLDesc(iface, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceIsActive(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_is_active_args *args,
+ remote_interface_is_active_ret *ret)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+ int active;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(iface = get_nonnull_interface(conn, args->iface)))
+ goto cleanup;
+
+ if ((active = virInterfaceIsActive(iface)) < 0)
+ goto cleanup;
+
+ ret->active = active;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceLookupByMACString(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_lookup_by_mac_string_args *args,
+ remote_interface_lookup_by_mac_string_ret *ret)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((iface = virInterfaceLookupByMACString(conn, args->mac)) == NULL)
+ goto cleanup;
+
+ make_nonnull_interface(&ret->iface, iface);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_lookup_by_name_args *args,
+ remote_interface_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((iface = virInterfaceLookupByName(conn, args->name)) == NULL)
+ goto cleanup;
+
+ make_nonnull_interface(&ret->iface, iface);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchInterfaceUndefine(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_interface_undefine_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virInterfacePtr iface = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(iface = get_nonnull_interface(conn, args->iface)))
+ goto cleanup;
+
+ if (virInterfaceUndefine(iface) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (iface)
+ virInterfaceFree(iface);
+ return rv;
+}
+
+static int
+remoteDispatchIsSecure(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_is_secure_ret *ret)
+{
+ int rv = -1;
+ int secure;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((secure = virConnectIsSecure(conn)) < 0)
+ goto cleanup;
+
+ ret->secure = secure;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchListDefinedDomains(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_defined_domains_args *args,
+ remote_list_defined_domains_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_DOMAIN_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListDefinedDomains(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListDefinedInterfaces(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_defined_interfaces_args *args,
+ remote_list_defined_interfaces_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListDefinedInterfaces(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListDefinedNetworks(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_defined_networks_args *args,
+ remote_list_defined_networks_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListDefinedNetworks(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListDefinedStoragePools(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_defined_storage_pools_args *args,
+ remote_list_defined_storage_pools_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListDefinedStoragePools(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListDomains(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_domains_args *args,
+ remote_list_domains_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxids > REMOTE_DOMAIN_ID_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxids > REMOTE_DOMAIN_ID_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->ids.ids_val, args->maxids) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListDomains(conn, ret->ids.ids_val, args->maxids)) < 0)
+ goto cleanup;
+
+ ret->ids.ids_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->ids.ids_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListInterfaces(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_interfaces_args *args,
+ remote_list_interfaces_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_INTERFACE_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_INTERFACE_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListInterfaces(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListNetworks(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_networks_args *args,
+ remote_list_networks_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_NETWORK_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListNetworks(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListNWFilters(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_nwfilters_args *args,
+ remote_list_nwfilters_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_NWFILTER_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_NWFILTER_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListNWFilters(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListSecrets(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_secrets_args *args,
+ remote_list_secrets_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxuuids > REMOTE_SECRET_UUID_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxuuids > REMOTE_SECRET_UUID_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->uuids.uuids_val, args->maxuuids) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListSecrets(conn, ret->uuids.uuids_val, args->maxuuids)) < 0)
+ goto cleanup;
+
+ ret->uuids.uuids_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->uuids.uuids_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchListStoragePools(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_list_storage_pools_args *args,
+ remote_list_storage_pools_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virConnectListStoragePools(conn, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchNetworkCreate(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_create_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if (virNetworkCreate(net) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkCreateXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_create_xml_args *args,
+ remote_network_create_xml_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((net = virNetworkCreateXML(conn, args->xml)) == NULL)
+ goto cleanup;
+
+ make_nonnull_network(&ret->net, net);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkDefineXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_define_xml_args *args,
+ remote_network_define_xml_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((net = virNetworkDefineXML(conn, args->xml)) == NULL)
+ goto cleanup;
+
+ make_nonnull_network(&ret->net, net);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkDestroy(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_destroy_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if (virNetworkDestroy(net) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkDumpXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_dump_xml_args *args,
+ remote_network_dump_xml_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if ((xml = virNetworkGetXMLDesc(net, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkGetAutostart(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_get_autostart_args *args,
+ remote_network_get_autostart_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+ int autostart;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if (virNetworkGetAutostart(net, &autostart) < 0)
+ goto cleanup;
+
+ ret->autostart = autostart;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkGetBridgeName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_get_bridge_name_args *args,
+ remote_network_get_bridge_name_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+ char *name;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if ((name = virNetworkGetBridgeName(net)) == NULL)
+ goto cleanup;
+
+ ret->name = name;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkIsActive(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_is_active_args *args,
+ remote_network_is_active_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+ int active;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if ((active = virNetworkIsActive(net)) < 0)
+ goto cleanup;
+
+ ret->active = active;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkIsPersistent(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_is_persistent_args *args,
+ remote_network_is_persistent_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+ int persistent;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if ((persistent = virNetworkIsPersistent(net)) < 0)
+ goto cleanup;
+
+ ret->persistent = persistent;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_lookup_by_name_args *args,
+ remote_network_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((net = virNetworkLookupByName(conn, args->name)) == NULL)
+ goto cleanup;
+
+ make_nonnull_network(&ret->net, net);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkLookupByUUID(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_lookup_by_uuid_args *args,
+ remote_network_lookup_by_uuid_ret *ret)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((net = virNetworkLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
+ goto cleanup;
+
+ make_nonnull_network(&ret->net, net);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkSetAutostart(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_set_autostart_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if (virNetworkSetAutostart(net, args->autostart) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNetworkUndefine(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_network_undefine_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNetworkPtr net = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(net = get_nonnull_network(conn, args->net)))
+ goto cleanup;
+
+ if (virNetworkUndefine(net) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (net)
+ virNetworkFree(net);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceCreateXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_create_xml_args *args,
+ remote_node_device_create_xml_ret *ret)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((dev = virNodeDeviceCreateXML(conn, args->xml_desc, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_node_device(&ret->dev, dev);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceDestroy(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_destroy_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
+ goto cleanup;
+
+ if (virNodeDeviceDestroy(dev) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceDettach(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_dettach_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
+ goto cleanup;
+
+ if (virNodeDeviceDettach(dev) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceDumpXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_dump_xml_args *args,
+ remote_node_device_dump_xml_ret *ret)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
+ goto cleanup;
+
+ if ((xml = virNodeDeviceGetXMLDesc(dev, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+/* remoteDispatchNodeDeviceGetParent has to be implemented manually */
+
+static int
+remoteDispatchNodeDeviceListCaps(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_list_caps_args *args,
+ remote_node_device_list_caps_ret *ret)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX"));
+ goto cleanup;
+ }
+
+ if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
+ goto cleanup;
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virNodeDeviceListCaps(dev, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_lookup_by_name_args *args,
+ remote_node_device_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((dev = virNodeDeviceLookupByName(conn, args->name)) == NULL)
+ goto cleanup;
+
+ make_nonnull_node_device(&ret->dev, dev);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceNumOfCaps(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_num_of_caps_args *args,
+ remote_node_device_num_of_caps_ret *ret)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
+ goto cleanup;
+
+ if ((num = virNodeDeviceNumOfCaps(dev)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceReAttach(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_re_attach_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
+ goto cleanup;
+
+ if (virNodeDeviceReAttach(dev) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeDeviceReset(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_device_reset_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNodeDevicePtr dev = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(dev = virNodeDeviceLookupByName(conn, args->name)))
+ goto cleanup;
+
+ if (virNodeDeviceReset(dev) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (dev)
+ virNodeDeviceFree(dev);
+ return rv;
+}
+
+static int
+remoteDispatchNodeGetCellsFreeMemory(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_get_cells_free_memory_args *args,
+ remote_node_get_cells_free_memory_ret *ret)
+{
+ int rv = -1;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxCells > REMOTE_NODE_MAX_CELLS) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxfreeMems > REMOTE_NODE_MAX_CELLS"));
+ goto cleanup;
+ }
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->freeMems.freeMems_val, args->maxCells) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virNodeGetCellsFreeMemory(conn, (unsigned long long *)ret->freeMems.freeMems_val, args->startCell, args->maxCells)) <= 0)
+ goto cleanup;
+
+ ret->freeMems.freeMems_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->freeMems.freeMems_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchNodeGetFreeMemory(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_node_get_free_memory_ret *ret)
+{
+ int rv = -1;
+ unsigned long freeMem;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((freeMem = virNodeGetFreeMemory(conn)) == 0)
+ goto cleanup;
+
+ ret->freeMem = freeMem;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNodeGetInfo(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_node_get_info_ret *ret)
+{
+ int rv = -1;
+ virNodeInfo tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (virNodeGetInfo(conn, &tmp) < 0)
+ goto cleanup;
+
+ memcpy(ret->model, tmp.model, sizeof ret->model);
+ ret->memory = tmp.memory;
+ ret->cpus = tmp.cpus;
+ ret->mhz = tmp.mhz;
+ ret->nodes = tmp.nodes;
+ ret->sockets = tmp.sockets;
+ ret->cores = tmp.cores;
+ ret->threads = tmp.threads;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+/* remoteDispatchNodeGetSecurityModel has to be implemented manually */
+
+static int
+remoteDispatchNodeListDevices(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_list_devices_args *args,
+ remote_node_list_devices_ret *ret)
+{
+ int rv = -1;
+ char *cap;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ cap = args->cap ? *args->cap : NULL;
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virNodeListDevices(conn, cap, ret->names.names_val, args->maxnames, args->flags)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ return rv;
+}
+
+static int
+remoteDispatchNodeNumOfDevices(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_node_num_of_devices_args *args,
+ remote_node_num_of_devices_ret *ret)
+{
+ int rv = -1;
+ char *cap;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ cap = args->cap ? *args->cap : NULL;
+
+ if ((num = virNodeNumOfDevices(conn, cap, args->flags)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfDefinedDomains(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_defined_domains_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfDefinedDomains(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfDefinedInterfaces(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_defined_interfaces_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfDefinedInterfaces(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfDefinedNetworks(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_defined_networks_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfDefinedNetworks(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfDefinedStoragePools(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_defined_storage_pools_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfDefinedStoragePools(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfDomains(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_domains_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfDomains(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfInterfaces(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_interfaces_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfInterfaces(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfNetworks(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_networks_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfNetworks(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfNWFilters(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_nwfilters_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfNWFilters(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfSecrets(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_secrets_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfSecrets(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNumOfStoragePools(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ void *args ATTRIBUTE_UNUSED,
+ remote_num_of_storage_pools_ret *ret)
+{
+ int rv = -1;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((num = virConnectNumOfStoragePools(conn)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
+
+static int
+remoteDispatchNWFilterDefineXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_nwfilter_define_xml_args *args,
+ remote_nwfilter_define_xml_ret *ret)
+{
+ int rv = -1;
+ virNWFilterPtr nwfilter = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((nwfilter = virNWFilterDefineXML(conn, args->xml)) == NULL)
+ goto cleanup;
+
+ make_nonnull_nwfilter(&ret->nwfilter, nwfilter);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (nwfilter)
+ virNWFilterFree(nwfilter);
+ return rv;
+}
+
+static int
+remoteDispatchNWFilterGetXMLDesc(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_nwfilter_get_xml_desc_args *args,
+ remote_nwfilter_get_xml_desc_ret *ret)
+{
+ int rv = -1;
+ virNWFilterPtr nwfilter = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(nwfilter = get_nonnull_nwfilter(conn, args->nwfilter)))
+ goto cleanup;
+
+ if ((xml = virNWFilterGetXMLDesc(nwfilter, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (nwfilter)
+ virNWFilterFree(nwfilter);
+ return rv;
+}
+
+static int
+remoteDispatchNWFilterLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_nwfilter_lookup_by_name_args *args,
+ remote_nwfilter_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virNWFilterPtr nwfilter = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((nwfilter = virNWFilterLookupByName(conn, args->name)) == NULL)
+ goto cleanup;
+
+ make_nonnull_nwfilter(&ret->nwfilter, nwfilter);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (nwfilter)
+ virNWFilterFree(nwfilter);
+ return rv;
+}
+
+static int
+remoteDispatchNWFilterLookupByUUID(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_nwfilter_lookup_by_uuid_args *args,
+ remote_nwfilter_lookup_by_uuid_ret *ret)
+{
+ int rv = -1;
+ virNWFilterPtr nwfilter = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((nwfilter = virNWFilterLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
+ goto cleanup;
+
+ make_nonnull_nwfilter(&ret->nwfilter, nwfilter);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (nwfilter)
+ virNWFilterFree(nwfilter);
+ return rv;
+}
+
+static int
+remoteDispatchNWFilterUndefine(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_nwfilter_undefine_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virNWFilterPtr nwfilter = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(nwfilter = get_nonnull_nwfilter(conn, args->nwfilter)))
+ goto cleanup;
+
+ if (virNWFilterUndefine(nwfilter) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (nwfilter)
+ virNWFilterFree(nwfilter);
+ return rv;
+}
+
+/* remoteDispatchOpen has to be implemented manually */
+
+static int
+remoteDispatchSecretDefineXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_secret_define_xml_args *args,
+ remote_secret_define_xml_ret *ret)
+{
+ int rv = -1;
+ virSecretPtr secret = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((secret = virSecretDefineXML(conn, args->xml, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_secret(&ret->secret, secret);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (secret)
+ virSecretFree(secret);
+ return rv;
+}
+
+/* remoteDispatchSecretGetValue has to be implemented manually */
+
+static int
+remoteDispatchSecretGetXMLDesc(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_secret_get_xml_desc_args *args,
+ remote_secret_get_xml_desc_ret *ret)
+{
+ int rv = -1;
+ virSecretPtr secret = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(secret = get_nonnull_secret(conn, args->secret)))
+ goto cleanup;
+
+ if ((xml = virSecretGetXMLDesc(secret, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (secret)
+ virSecretFree(secret);
+ return rv;
+}
+
+static int
+remoteDispatchSecretLookupByUsage(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_secret_lookup_by_usage_args *args,
+ remote_secret_lookup_by_usage_ret *ret)
+{
+ int rv = -1;
+ virSecretPtr secret = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((secret = virSecretLookupByUsage(conn, args->usageType, args->usageID)) == NULL)
+ goto cleanup;
+
+ make_nonnull_secret(&ret->secret, secret);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (secret)
+ virSecretFree(secret);
+ return rv;
+}
+
+static int
+remoteDispatchSecretLookupByUUID(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_secret_lookup_by_uuid_args *args,
+ remote_secret_lookup_by_uuid_ret *ret)
+{
+ int rv = -1;
+ virSecretPtr secret = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((secret = virSecretLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
+ goto cleanup;
+
+ make_nonnull_secret(&ret->secret, secret);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (secret)
+ virSecretFree(secret);
+ return rv;
+}
+
+static int
+remoteDispatchSecretSetValue(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_secret_set_value_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virSecretPtr secret = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(secret = get_nonnull_secret(conn, args->secret)))
+ goto cleanup;
+
+ if (virSecretSetValue(secret, (const unsigned char *)args->value.value_val, args->value.value_len, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (secret)
+ virSecretFree(secret);
+ return rv;
+}
+
+static int
+remoteDispatchSecretUndefine(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_secret_undefine_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virSecretPtr secret = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(secret = get_nonnull_secret(conn, args->secret)))
+ goto cleanup;
+
+ if (virSecretUndefine(secret) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (secret)
+ virSecretFree(secret);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolBuild(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_build_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolBuild(pool, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolCreate(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_create_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolCreate(pool, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolCreateXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_create_xml_args *args,
+ remote_storage_pool_create_xml_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((pool = virStoragePoolCreateXML(conn, args->xml, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_pool(&ret->pool, pool);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolDefineXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_define_xml_args *args,
+ remote_storage_pool_define_xml_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((pool = virStoragePoolDefineXML(conn, args->xml, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_pool(&ret->pool, pool);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolDelete(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_delete_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolDelete(pool, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolDestroy(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_destroy_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolDestroy(pool) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolDumpXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_dump_xml_args *args,
+ remote_storage_pool_dump_xml_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if ((xml = virStoragePoolGetXMLDesc(pool, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolGetAutostart(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_get_autostart_args *args,
+ remote_storage_pool_get_autostart_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ int autostart;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolGetAutostart(pool, &autostart) < 0)
+ goto cleanup;
+
+ ret->autostart = autostart;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolGetInfo(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_get_info_args *args,
+ remote_storage_pool_get_info_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ virStoragePoolInfo tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolGetInfo(pool, &tmp) < 0)
+ goto cleanup;
+
+ ret->state = tmp.state;
+ ret->capacity = tmp.capacity;
+ ret->allocation = tmp.allocation;
+ ret->available = tmp.available;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolIsActive(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_is_active_args *args,
+ remote_storage_pool_is_active_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ int active;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if ((active = virStoragePoolIsActive(pool)) < 0)
+ goto cleanup;
+
+ ret->active = active;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolIsPersistent(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_is_persistent_args *args,
+ remote_storage_pool_is_persistent_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ int persistent;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if ((persistent = virStoragePoolIsPersistent(pool)) < 0)
+ goto cleanup;
+
+ ret->persistent = persistent;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolListVolumes(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_list_volumes_args *args,
+ remote_storage_pool_list_volumes_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ int len;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (args->maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
+ virNetError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ /* Allocate return buffer. */
+ if (VIR_ALLOC_N(ret->names.names_val, args->maxnames) < 0) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ if ((len = virStoragePoolListVolumes(pool, ret->names.names_val, args->maxnames)) < 0)
+ goto cleanup;
+
+ ret->names.names_len = len;
+ rv = 0;
+
+cleanup:
+ if (rv < 0) {
+ remoteDispatchError(rerr);
+ VIR_FREE(ret->names.names_val);
+ }
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_lookup_by_name_args *args,
+ remote_storage_pool_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((pool = virStoragePoolLookupByName(conn, args->name)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_pool(&ret->pool, pool);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolLookupByUUID(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_lookup_by_uuid_args *args,
+ remote_storage_pool_lookup_by_uuid_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((pool = virStoragePoolLookupByUUID(conn, (unsigned char *) args->uuid)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_pool(&ret->pool, pool);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolLookupByVolume(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_lookup_by_volume_args *args,
+ remote_storage_pool_lookup_by_volume_ret *ret)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
+ goto cleanup;
+
+ if ((pool = virStoragePoolLookupByVolume(vol)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_pool(&ret->pool, pool);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolNumOfVolumes(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_num_of_volumes_args *args,
+ remote_storage_pool_num_of_volumes_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ int num;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if ((num = virStoragePoolNumOfVolumes(pool)) < 0)
+ goto cleanup;
+
+ ret->num = num;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolRefresh(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_refresh_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolRefresh(pool, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolSetAutostart(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_set_autostart_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolSetAutostart(pool, args->autostart) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStoragePoolUndefine(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_pool_undefine_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (virStoragePoolUndefine(pool) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolCreateXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_create_xml_args *args,
+ remote_storage_vol_create_xml_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ virStorageVolPtr vol = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if ((vol = virStorageVolCreateXML(pool, args->xml, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_vol(&ret->vol, vol);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolCreateXMLFrom(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_create_xml_from_args *args,
+ remote_storage_vol_create_xml_from_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ virStorageVolPtr clonevol = NULL;
+ virStorageVolPtr vol = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if (!(clonevol = get_nonnull_storage_vol(conn, args->clonevol)))
+ goto cleanup;
+
+ if ((vol = virStorageVolCreateXMLFrom(pool, args->xml, clonevol, args->flags)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_vol(&ret->vol, vol);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ if (clonevol)
+ virStorageVolFree(clonevol);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolDelete(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_delete_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
+ goto cleanup;
+
+ if (virStorageVolDelete(vol, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+/* remoteDispatchStorageVolDownload has to be implemented manually */
+
+static int
+remoteDispatchStorageVolDumpXML(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_dump_xml_args *args,
+ remote_storage_vol_dump_xml_ret *ret)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+ char *xml;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
+ goto cleanup;
+
+ if ((xml = virStorageVolGetXMLDesc(vol, args->flags)) == NULL)
+ goto cleanup;
+
+ ret->xml = xml;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolGetInfo(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_get_info_args *args,
+ remote_storage_vol_get_info_ret *ret)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+ virStorageVolInfo tmp;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
+ goto cleanup;
+
+ if (virStorageVolGetInfo(vol, &tmp) < 0)
+ goto cleanup;
+
+ ret->type = tmp.type;
+ ret->capacity = tmp.capacity;
+ ret->allocation = tmp.allocation;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolGetPath(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_get_path_args *args,
+ remote_storage_vol_get_path_ret *ret)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+ char *name;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
+ goto cleanup;
+
+ if ((name = virStorageVolGetPath(vol)) == NULL)
+ goto cleanup;
+
+ ret->name = name;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolLookupByKey(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_lookup_by_key_args *args,
+ remote_storage_vol_lookup_by_key_ret *ret)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((vol = virStorageVolLookupByKey(conn, args->key)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_vol(&ret->vol, vol);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolLookupByName(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_lookup_by_name_args *args,
+ remote_storage_vol_lookup_by_name_ret *ret)
+{
+ int rv = -1;
+ virStoragePoolPtr pool = NULL;
+ virStorageVolPtr vol = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(pool = get_nonnull_storage_pool(conn, args->pool)))
+ goto cleanup;
+
+ if ((vol = virStorageVolLookupByName(pool, args->name)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_vol(&ret->vol, vol);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (pool)
+ virStoragePoolFree(pool);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchStorageVolLookupByPath(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_lookup_by_path_args *args,
+ remote_storage_vol_lookup_by_path_ret *ret)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((vol = virStorageVolLookupByPath(conn, args->path)) == NULL)
+ goto cleanup;
+
+ make_nonnull_storage_vol(&ret->vol, vol);
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+/* remoteDispatchStorageVolUpload has to be implemented manually */
+
+static int
+remoteDispatchStorageVolWipe(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_storage_vol_wipe_args *args,
+ void *ret ATTRIBUTE_UNUSED)
+{
+ int rv = -1;
+ virStorageVolPtr vol = NULL;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if (!(vol = get_nonnull_storage_vol(conn, args->vol)))
+ goto cleanup;
+
+ if (virStorageVolWipe(vol, args->flags) < 0)
+ goto cleanup;
+
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ if (vol)
+ virStorageVolFree(vol);
+ return rv;
+}
+
+static int
+remoteDispatchSupportsFeature(
+ struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_supports_feature_args *args,
+ remote_supports_feature_ret *ret)
+{
+ int rv = -1;
+ int supported;
+
+ if (!conn) {
+ virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
+ goto cleanup;
+ }
+
+ if ((supported = virDrvSupportsFeature(conn, args->feature)) < 0)
+ goto cleanup;
+
+ ret->supported = supported;
+ rv = 0;
+
+cleanup:
+ if (rv < 0)
+ remoteDispatchError(rerr);
+ return rv;
+}
}
}
-# Bodies for dispatch functions ("remote_dispatch_bodies.c").
+# Bodies for dispatch functions ("remote_dispatch_bodies.h").
elsif ($opt_b) {
# list of functions that currently are not generatable
my @ungeneratable;
}
}
-# Bodies for client functions ("remote_client_bodies.c").
+# Bodies for client functions ("remote_client_bodies.h").
elsif ($opt_k) {
# list of functions that currently are not generatable
my @ungeneratable;
daemon/libvirtd.c
daemon/remote.c
daemon/stream.c
-daemon/remote_dispatch_bodies.c
+daemon/remote_dispatch_bodies.h
src/conf/cpu_conf.c
src/conf/domain_conf.c
src/conf/domain_event.c
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_text.c
src/qemu/qemu_process.c
-src/remote/remote_client_bodies.c
+src/remote/remote_client_bodies.h
src/remote/remote_driver.c
src/secret/secret_driver.c
src/security/security_apparmor.c
remote/qemu_protocol.c \
remote/qemu_protocol.h
-remote/remote_driver.c: remote/remote_client_bodies.c remote/qemu_client_bodies.c
+remote/remote_driver.c: remote/remote_client_bodies.h remote/qemu_client_bodies.h
REMOTE_PROTOCOL = $(top_srcdir)/src/remote/remote_protocol.x
QEMU_PROTOCOL = $(top_srcdir)/src/remote/qemu_protocol.x
-remote/remote_client_bodies.c: $(top_srcdir)/daemon/remote_generator.pl $(REMOTE_PROTOCOL)
+remote/remote_client_bodies.h: $(top_srcdir)/daemon/remote_generator.pl $(REMOTE_PROTOCOL)
$(AM_V_GEN)perl -w $(top_srcdir)/daemon/remote_generator.pl -c -k remote $(REMOTE_PROTOCOL) > $@
-remote/qemu_client_bodies.c: $(top_srcdir)/daemon/remote_generator.pl $(QEMU_PROTOCOL)
+remote/qemu_client_bodies.h: $(top_srcdir)/daemon/remote_generator.pl $(QEMU_PROTOCOL)
$(AM_V_GEN)perl -w $(top_srcdir)/daemon/remote_generator.pl -k remote $(QEMU_PROTOCOL) > $@
EXTRA_DIST += remote/remote_protocol.x remote/qemu_protocol.x \
- remote/rpcgen_fix.pl remote/remote_client_bodies.c remote/qemu_client_bodies.c
+ remote/rpcgen_fix.pl remote/remote_client_bodies.h remote/qemu_client_bodies.h
# Ensure that we don't change the struct or member names or member ordering
# in remote_protocol.x The embedded perl below needs a few comments, and
+++ /dev/null
-/* Automatically generated by remote_generator.pl.
- * Do not edit this file. Any changes you make will be lost.
- */
--- /dev/null
+/* Automatically generated by remote_generator.pl.
+ * Do not edit this file. Any changes you make will be lost.
+ */
+++ /dev/null
-/* Automatically generated by remote_generator.pl.
- * Do not edit this file. Any changes you make will be lost.
- */
-
-/* remoteDispatchAuthList has to be implemented manually */
-
-/* remoteDispatchAuthPolkit has to be implemented manually */
-
-/* remoteDispatchAuthSaslInit has to be implemented manually */
-
-/* remoteDispatchAuthSaslStart has to be implemented manually */
-
-/* remoteDispatchAuthSaslStep has to be implemented manually */
-
-/* remoteDispatchClose has to be implemented manually */
-
-static char *
-remoteCPUBaseline(virConnectPtr conn, const char **xmlCPUs, unsigned int xmlCPUslen, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_cpu_baseline_args args;
- remote_cpu_baseline_ret ret;
-
- remoteDriverLock(priv);
-
- if (xmlCPUslen > REMOTE_CPU_BASELINE_MAX) {
- remoteError(VIR_ERR_RPC,
- _("%s length greater than maximum: %d > %d"),
- "xmlCPUs", (int)xmlCPUslen, REMOTE_CPU_BASELINE_MAX);
- goto done;
- }
-
- args.xmlCPUs.xmlCPUs_val = (char **)xmlCPUs;
- args.xmlCPUs.xmlCPUs_len = xmlCPUslen;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_CPU_BASELINE,
- (xdrproc_t)xdr_remote_cpu_baseline_args, (char *)&args,
- (xdrproc_t)xdr_remote_cpu_baseline_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.cpu;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteCPUCompare(virConnectPtr conn, const char *xml, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_cpu_compare_args args;
- remote_cpu_compare_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_CPU_COMPARE,
- (xdrproc_t)xdr_remote_cpu_compare_args, (char *)&args,
- (xdrproc_t)xdr_remote_cpu_compare_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.result;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainAbortJob(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_abort_job_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_ABORT_JOB,
- (xdrproc_t)xdr_remote_domain_abort_job_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainAttachDevice(virDomainPtr dom, const char *xml)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_attach_device_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.xml = (char *)xml;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_ATTACH_DEVICE,
- (xdrproc_t)xdr_remote_domain_attach_device_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_attach_device_flags_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.xml = (char *)xml;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_ATTACH_DEVICE_FLAGS,
- (xdrproc_t)xdr_remote_domain_attach_device_flags_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainBlockPeek has to be implemented manually */
-
-static int
-remoteDomainBlockStats(virDomainPtr dom, const char *path, virDomainBlockStatsPtr result)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_block_stats_args args;
- remote_domain_block_stats_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.path = (char *)path;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_BLOCK_STATS,
- (xdrproc_t)xdr_remote_domain_block_stats_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_block_stats_ret, (char *)&ret) == -1)
- goto done;
-
- result->rd_req = ret.rd_req;
- result->rd_bytes = ret.rd_bytes;
- result->wr_req = ret.wr_req;
- result->wr_bytes = ret.wr_bytes;
- result->errs = ret.errs;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainCoreDump(virDomainPtr dom, const char *to, int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_core_dump_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.to = (char *)to;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_CORE_DUMP,
- (xdrproc_t)xdr_remote_domain_core_dump_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainCreate has to be implemented manually */
-
-/* remoteDispatchDomainCreateWithFlags has to be implemented manually */
-
-static virDomainPtr
-remoteDomainCreateXML(virConnectPtr conn, const char *xml_desc, unsigned int flags)
-{
- virDomainPtr rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_create_xml_args args;
- remote_domain_create_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml_desc = (char *)xml_desc;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_CREATE_XML,
- (xdrproc_t)xdr_remote_domain_create_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_create_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain(conn, ret.dom);
- xdr_free((xdrproc_t)xdr_remote_domain_create_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainPtr
-remoteDomainDefineXML(virConnectPtr conn, const char *xml)
-{
- virDomainPtr rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_define_xml_args args;
- remote_domain_define_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_DEFINE_XML,
- (xdrproc_t)xdr_remote_domain_define_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_define_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain(conn, ret.dom);
- xdr_free((xdrproc_t)xdr_remote_domain_define_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainDestroy has to be implemented manually */
-
-static int
-remoteDomainDetachDevice(virDomainPtr dom, const char *xml)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_detach_device_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.xml = (char *)xml;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_DETACH_DEVICE,
- (xdrproc_t)xdr_remote_domain_detach_device_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_detach_device_flags_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.xml = (char *)xml;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_DETACH_DEVICE_FLAGS,
- (xdrproc_t)xdr_remote_domain_detach_device_flags_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteDomainDumpXML(virDomainPtr dom, int flags)
-{
- char *rv = NULL;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_dump_xml_args args;
- remote_domain_dump_xml_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_DUMP_XML,
- (xdrproc_t)xdr_remote_domain_dump_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_dump_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainEventsDeregister has to be implemented manually */
-
-/* remoteDispatchDomainEventsDeregisterAny has to be implemented manually */
-
-/* remoteDispatchDomainEventsRegister has to be implemented manually */
-
-/* remoteDispatchDomainEventsRegisterAny has to be implemented manually */
-
-static int
-remoteDomainGetAutostart(virDomainPtr dom, int *autostart)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_autostart_args args;
- remote_domain_get_autostart_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_AUTOSTART,
- (xdrproc_t)xdr_remote_domain_get_autostart_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_autostart_ret, (char *)&ret) == -1)
- goto done;
-
- if (autostart) *autostart = ret.autostart;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainGetBlkioParameters has to be implemented manually */
-
-static int
-remoteDomainGetBlockInfo(virDomainPtr dom, const char *path, virDomainBlockInfoPtr result, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_block_info_args args;
- remote_domain_get_block_info_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.path = (char *)path;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_BLOCK_INFO,
- (xdrproc_t)xdr_remote_domain_get_block_info_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_block_info_ret, (char *)&ret) == -1)
- goto done;
-
- result->allocation = ret.allocation;
- result->capacity = ret.capacity;
- result->physical = ret.physical;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainGetInfo(virDomainPtr dom, virDomainInfoPtr result)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_info_args args;
- remote_domain_get_info_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_INFO,
- (xdrproc_t)xdr_remote_domain_get_info_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_info_ret, (char *)&ret) == -1)
- goto done;
-
- result->state = ret.state;
- result->maxMem = ret.maxMem;
- result->memory = ret.memory;
- result->nrVirtCpu = ret.nrVirtCpu;
- result->cpuTime = ret.cpuTime;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainGetJobInfo(virDomainPtr dom, virDomainJobInfoPtr result)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_job_info_args args;
- remote_domain_get_job_info_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_JOB_INFO,
- (xdrproc_t)xdr_remote_domain_get_job_info_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_job_info_ret, (char *)&ret) == -1)
- goto done;
-
- result->type = ret.type;
- result->timeElapsed = ret.timeElapsed;
- result->timeRemaining = ret.timeRemaining;
- result->dataTotal = ret.dataTotal;
- result->dataProcessed = ret.dataProcessed;
- result->dataRemaining = ret.dataRemaining;
- result->memTotal = ret.memTotal;
- result->memProcessed = ret.memProcessed;
- result->memRemaining = ret.memRemaining;
- result->fileTotal = ret.fileTotal;
- result->fileProcessed = ret.fileProcessed;
- result->fileRemaining = ret.fileRemaining;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static unsigned long
-remoteDomainGetMaxMemory(virDomainPtr dom)
-{
- unsigned long rv = 0;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_max_memory_args args;
- remote_domain_get_max_memory_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_MAX_MEMORY,
- (xdrproc_t)xdr_remote_domain_get_max_memory_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_max_memory_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.memory;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainGetMaxVcpus(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_max_vcpus_args args;
- remote_domain_get_max_vcpus_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_MAX_VCPUS,
- (xdrproc_t)xdr_remote_domain_get_max_vcpus_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_max_vcpus_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainGetMemoryParameters has to be implemented manually */
-
-static char *
-remoteDomainGetOSType(virDomainPtr dom)
-{
- char *rv = NULL;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_os_type_args args;
- remote_domain_get_os_type_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_OS_TYPE,
- (xdrproc_t)xdr_remote_domain_get_os_type_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_os_type_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.type;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainGetSchedulerParameters has to be implemented manually */
-
-/* remoteDispatchDomainGetSchedulerType has to be implemented manually */
-
-/* remoteDispatchDomainGetSecurityLabel has to be implemented manually */
-
-/* remoteDispatchDomainGetVcpus has to be implemented manually */
-
-static int
-remoteDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_get_vcpus_flags_args args;
- remote_domain_get_vcpus_flags_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS,
- (xdrproc_t)xdr_remote_domain_get_vcpus_flags_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_get_vcpus_flags_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainHasCurrentSnapshot(virDomainPtr dom, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_has_current_snapshot_args args;
- remote_domain_has_current_snapshot_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_HAS_CURRENT_SNAPSHOT,
- (xdrproc_t)xdr_remote_domain_has_current_snapshot_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_has_current_snapshot_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.result;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_has_managed_save_image_args args;
- remote_domain_has_managed_save_image_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_HAS_MANAGED_SAVE_IMAGE,
- (xdrproc_t)xdr_remote_domain_has_managed_save_image_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_has_managed_save_image_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.result;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainInterfaceStats(virDomainPtr dom, const char *path, virDomainInterfaceStatsPtr result)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_interface_stats_args args;
- remote_domain_interface_stats_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.path = (char *)path;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_INTERFACE_STATS,
- (xdrproc_t)xdr_remote_domain_interface_stats_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_interface_stats_ret, (char *)&ret) == -1)
- goto done;
-
- result->rx_bytes = ret.rx_bytes;
- result->rx_packets = ret.rx_packets;
- result->rx_errs = ret.rx_errs;
- result->rx_drop = ret.rx_drop;
- result->tx_bytes = ret.tx_bytes;
- result->tx_packets = ret.tx_packets;
- result->tx_errs = ret.tx_errs;
- result->tx_drop = ret.tx_drop;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainIsActive(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_is_active_args args;
- remote_domain_is_active_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_IS_ACTIVE,
- (xdrproc_t)xdr_remote_domain_is_active_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_is_active_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.active;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainIsPersistent(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_is_persistent_args args;
- remote_domain_is_persistent_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_IS_PERSISTENT,
- (xdrproc_t)xdr_remote_domain_is_persistent_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_is_persistent_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.persistent;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainIsUpdated(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_is_updated_args args;
- remote_domain_is_updated_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_IS_UPDATED,
- (xdrproc_t)xdr_remote_domain_is_updated_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_is_updated_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.updated;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainPtr
-remoteDomainLookupByID(virConnectPtr conn, int id)
-{
- virDomainPtr rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_lookup_by_id_args args;
- remote_domain_lookup_by_id_ret ret;
-
- remoteDriverLock(priv);
-
- args.id = id;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_ID,
- (xdrproc_t)xdr_remote_domain_lookup_by_id_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_lookup_by_id_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain(conn, ret.dom);
- xdr_free((xdrproc_t)xdr_remote_domain_lookup_by_id_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainPtr
-remoteDomainLookupByName(virConnectPtr conn, const char *name)
-{
- virDomainPtr rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_lookup_by_name_args args;
- remote_domain_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = (char *)name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_domain_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain(conn, ret.dom);
- xdr_free((xdrproc_t)xdr_remote_domain_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainPtr
-remoteDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
-{
- virDomainPtr rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_lookup_by_uuid_args args;
- remote_domain_lookup_by_uuid_ret ret;
-
- remoteDriverLock(priv);
-
- memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID,
- (xdrproc_t)xdr_remote_domain_lookup_by_uuid_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_lookup_by_uuid_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain(conn, ret.dom);
- xdr_free((xdrproc_t)xdr_remote_domain_lookup_by_uuid_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainManagedSave(virDomainPtr dom, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_managed_save_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MANAGED_SAVE,
- (xdrproc_t)xdr_remote_domain_managed_save_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainManagedSaveRemove(virDomainPtr dom, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_managed_save_remove_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MANAGED_SAVE_REMOVE,
- (xdrproc_t)xdr_remote_domain_managed_save_remove_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainMemoryPeek has to be implemented manually */
-
-/* remoteDispatchDomainMemoryStats has to be implemented manually */
-
-static virDomainPtr
-remoteDomainMigrateFinish(virConnectPtr conn, const char *dname, const char *cookie, int cookielen, const char *uri, unsigned long flags)
-{
- virDomainPtr rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_migrate_finish_args args;
- remote_domain_migrate_finish_ret ret;
-
- remoteDriverLock(priv);
-
- if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
- remoteError(VIR_ERR_RPC,
- _("%s length greater than maximum: %d > %d"),
- "cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
- goto done;
- }
-
- args.dname = (char *)dname;
- args.cookie.cookie_val = (char *)cookie;
- args.cookie.cookie_len = cookielen;
- args.uri = (char *)uri;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH,
- (xdrproc_t)xdr_remote_domain_migrate_finish_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_migrate_finish_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain(conn, ret.ddom);
- xdr_free((xdrproc_t)xdr_remote_domain_migrate_finish_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainPtr
-remoteDomainMigrateFinish2(virConnectPtr conn, const char *dname, const char *cookie, int cookielen, const char *uri, unsigned long flags, int retcode)
-{
- virDomainPtr rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_migrate_finish2_args args;
- remote_domain_migrate_finish2_ret ret;
-
- remoteDriverLock(priv);
-
- if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
- remoteError(VIR_ERR_RPC,
- _("%s length greater than maximum: %d > %d"),
- "cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
- goto done;
- }
-
- args.dname = (char *)dname;
- args.cookie.cookie_val = (char *)cookie;
- args.cookie.cookie_len = cookielen;
- args.uri = (char *)uri;
- args.flags = flags;
- args.retcode = retcode;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH2,
- (xdrproc_t)xdr_remote_domain_migrate_finish2_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_migrate_finish2_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain(conn, ret.ddom);
- xdr_free((xdrproc_t)xdr_remote_domain_migrate_finish2_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainMigratePerform(virDomainPtr dom, const char *cookie, int cookielen, const char *uri, unsigned long flags, const char *dname, unsigned long resource)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_migrate_perform_args args;
-
- remoteDriverLock(priv);
-
- if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
- remoteError(VIR_ERR_RPC,
- _("%s length greater than maximum: %d > %d"),
- "cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
- goto done;
- }
-
- make_nonnull_domain(&args.dom, dom);
- args.cookie.cookie_val = (char *)cookie;
- args.cookie.cookie_len = cookielen;
- args.uri = (char *)uri;
- args.flags = flags;
- args.dname = dname ? (char **)&dname : NULL;
- args.resource = resource;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PERFORM,
- (xdrproc_t)xdr_remote_domain_migrate_perform_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainMigratePrepare has to be implemented manually */
-
-/* remoteDispatchDomainMigratePrepare2 has to be implemented manually */
-
-/* remoteDispatchDomainMigratePrepareTunnel has to be implemented manually */
-
-static int
-remoteDomainMigrateSetMaxDowntime(virDomainPtr dom, unsigned long long downtime, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_migrate_set_max_downtime_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.downtime = downtime;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_SET_MAX_DOWNTIME,
- (xdrproc_t)xdr_remote_domain_migrate_set_max_downtime_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainMigrateSetMaxSpeed(virDomainPtr dom, unsigned long bandwidth, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_migrate_set_max_speed_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.bandwidth = bandwidth;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_SET_MAX_SPEED,
- (xdrproc_t)xdr_remote_domain_migrate_set_max_speed_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainOpenConsole has to be implemented manually */
-
-static int
-remoteDomainPinVcpu(virDomainPtr dom, unsigned int vcpu, unsigned char *cpumap, int cpumaplen)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_pin_vcpu_args args;
-
- remoteDriverLock(priv);
-
- if (cpumaplen > REMOTE_CPUMAP_MAX) {
- remoteError(VIR_ERR_RPC,
- _("%s length greater than maximum: %d > %d"),
- "cpumap", (int)cpumaplen, REMOTE_CPUMAP_MAX);
- goto done;
- }
-
- make_nonnull_domain(&args.dom, dom);
- args.vcpu = vcpu;
- args.cpumap.cpumap_val = (char *)cpumap;
- args.cpumap.cpumap_len = cpumaplen;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_PIN_VCPU,
- (xdrproc_t)xdr_remote_domain_pin_vcpu_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainReboot(virDomainPtr dom, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_reboot_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_REBOOT,
- (xdrproc_t)xdr_remote_domain_reboot_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainRestore(virConnectPtr conn, const char *from)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_domain_restore_args args;
-
- remoteDriverLock(priv);
-
- args.from = (char *)from;
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_RESTORE,
- (xdrproc_t)xdr_remote_domain_restore_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainResume(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_resume_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_RESUME,
- (xdrproc_t)xdr_remote_domain_resume_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainRevertToSnapshot(virDomainSnapshotPtr snap, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = snap->domain->conn->privateData;
- remote_domain_revert_to_snapshot_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain_snapshot(&args.snap, snap);
- args.flags = flags;
-
- if (call(snap->domain->conn, priv, 0, REMOTE_PROC_DOMAIN_REVERT_TO_SNAPSHOT,
- (xdrproc_t)xdr_remote_domain_revert_to_snapshot_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSave(virDomainPtr dom, const char *to)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_save_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.to = (char *)to;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SAVE,
- (xdrproc_t)xdr_remote_domain_save_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSetAutostart(virDomainPtr dom, int autostart)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_set_autostart_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.autostart = autostart;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_AUTOSTART,
- (xdrproc_t)xdr_remote_domain_set_autostart_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainSetBlkioParameters has to be implemented manually */
-
-static int
-remoteDomainSetMaxMemory(virDomainPtr dom, unsigned long memory)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_set_max_memory_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.memory = memory;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MAX_MEMORY,
- (xdrproc_t)xdr_remote_domain_set_max_memory_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSetMemory(virDomainPtr dom, unsigned long memory)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_set_memory_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.memory = memory;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MEMORY,
- (xdrproc_t)xdr_remote_domain_set_memory_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSetMemoryFlags(virDomainPtr dom, unsigned long memory, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_set_memory_flags_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.memory = memory;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MEMORY_FLAGS,
- (xdrproc_t)xdr_remote_domain_set_memory_flags_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchDomainSetMemoryParameters has to be implemented manually */
-
-/* remoteDispatchDomainSetSchedulerParameters has to be implemented manually */
-
-static int
-remoteDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_set_vcpus_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.nvcpus = nvcpus;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_VCPUS,
- (xdrproc_t)xdr_remote_domain_set_vcpus_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_set_vcpus_flags_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.nvcpus = nvcpus;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS,
- (xdrproc_t)xdr_remote_domain_set_vcpus_flags_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainShutdown(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_shutdown_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SHUTDOWN,
- (xdrproc_t)xdr_remote_domain_shutdown_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainSnapshotPtr
-remoteDomainSnapshotCreateXML(virDomainPtr dom, const char *xml_desc, unsigned int flags)
-{
- virDomainSnapshotPtr rv = NULL;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_snapshot_create_xml_args args;
- remote_domain_snapshot_create_xml_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.xml_desc = (char *)xml_desc;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_CREATE_XML,
- (xdrproc_t)xdr_remote_domain_snapshot_create_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_snapshot_create_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain_snapshot(dom, ret.snap);
- xdr_free((xdrproc_t)xdr_remote_domain_snapshot_create_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainSnapshotPtr
-remoteDomainSnapshotCurrent(virDomainPtr dom, unsigned int flags)
-{
- virDomainSnapshotPtr rv = NULL;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_snapshot_current_args args;
- remote_domain_snapshot_current_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_CURRENT,
- (xdrproc_t)xdr_remote_domain_snapshot_current_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_snapshot_current_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain_snapshot(dom, ret.snap);
- xdr_free((xdrproc_t)xdr_remote_domain_snapshot_current_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSnapshotDelete(virDomainSnapshotPtr snap, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = snap->domain->conn->privateData;
- remote_domain_snapshot_delete_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain_snapshot(&args.snap, snap);
- args.flags = flags;
-
- if (call(snap->domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_DELETE,
- (xdrproc_t)xdr_remote_domain_snapshot_delete_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteDomainSnapshotDumpXML(virDomainSnapshotPtr snap, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = snap->domain->conn->privateData;
- remote_domain_snapshot_dump_xml_args args;
- remote_domain_snapshot_dump_xml_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain_snapshot(&args.snap, snap);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(snap->domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_DUMP_XML,
- (xdrproc_t)xdr_remote_domain_snapshot_dump_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_snapshot_dump_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSnapshotListNames(virDomainPtr dom, char **const names, int maxnames, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_snapshot_list_names_args args;
- remote_domain_snapshot_list_names_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX);
- goto done;
- }
-
- make_nonnull_domain(&args.dom, dom);
- args.maxnames = maxnames;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_NAMES,
- (xdrproc_t)xdr_remote_domain_snapshot_list_names_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_snapshot_list_names_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_domain_snapshot_list_names_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virDomainSnapshotPtr
-remoteDomainSnapshotLookupByName(virDomainPtr dom, const char *name, unsigned int flags)
-{
- virDomainSnapshotPtr rv = NULL;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_snapshot_lookup_by_name_args args;
- remote_domain_snapshot_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.name = (char *)name;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_domain_snapshot_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_snapshot_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_domain_snapshot(dom, ret.snap);
- xdr_free((xdrproc_t)xdr_remote_domain_snapshot_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSnapshotNum(virDomainPtr dom, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_snapshot_num_args args;
- remote_domain_snapshot_num_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_NUM,
- (xdrproc_t)xdr_remote_domain_snapshot_num_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_snapshot_num_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainSuspend(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_suspend_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SUSPEND,
- (xdrproc_t)xdr_remote_domain_suspend_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainUndefine(virDomainPtr dom)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_undefine_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_UNDEFINE,
- (xdrproc_t)xdr_remote_domain_undefine_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = dom->conn->privateData;
- remote_domain_update_device_flags_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_domain(&args.dom, dom);
- args.xml = (char *)xml;
- args.flags = flags;
-
- if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_UPDATE_DEVICE_FLAGS,
- (xdrproc_t)xdr_remote_domain_update_device_flags_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat, const char *nativeConfig, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_xml_from_native_args args;
- remote_domain_xml_from_native_ret ret;
-
- remoteDriverLock(priv);
-
- args.nativeFormat = (char *)nativeFormat;
- args.nativeConfig = (char *)nativeConfig;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_XML_FROM_NATIVE,
- (xdrproc_t)xdr_remote_domain_xml_from_native_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_xml_from_native_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.domainXml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteDomainXMLToNative(virConnectPtr conn, const char *nativeFormat, const char *domainXml, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_domain_xml_to_native_args args;
- remote_domain_xml_to_native_ret ret;
-
- remoteDriverLock(priv);
-
- args.nativeFormat = (char *)nativeFormat;
- args.domainXml = (char *)domainXml;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_XML_TO_NATIVE,
- (xdrproc_t)xdr_remote_domain_xml_to_native_args, (char *)&args,
- (xdrproc_t)xdr_remote_domain_xml_to_native_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.nativeConfig;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchFindStoragePoolSources has to be implemented manually */
-
-static char *
-remoteGetCapabilities(virConnectPtr conn)
-{
- char *rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_get_capabilities_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_GET_CAPABILITIES,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_get_capabilities_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.capabilities;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteGetHostname(virConnectPtr conn)
-{
- char *rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_get_hostname_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_GET_HOSTNAME,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_get_hostname_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.hostname;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteGetLibVersion(virConnectPtr conn, unsigned long *lib_ver)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_get_lib_version_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_GET_LIB_VERSION,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_get_lib_version_ret, (char *)&ret) == -1)
- goto done;
-
- if (lib_ver) *lib_ver = ret.lib_ver;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteGetMaxVcpus(virConnectPtr conn, const char *type)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_get_max_vcpus_args args;
- remote_get_max_vcpus_ret ret;
-
- remoteDriverLock(priv);
-
- args.type = type ? (char **)&type : NULL;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_GET_MAX_VCPUS,
- (xdrproc_t)xdr_remote_get_max_vcpus_args, (char *)&args,
- (xdrproc_t)xdr_remote_get_max_vcpus_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.max_vcpus;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteGetSysinfo(virConnectPtr conn, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = conn->privateData;
- remote_get_sysinfo_args args;
- remote_get_sysinfo_ret ret;
-
- remoteDriverLock(priv);
-
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_GET_SYSINFO,
- (xdrproc_t)xdr_remote_get_sysinfo_args, (char *)&args,
- (xdrproc_t)xdr_remote_get_sysinfo_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.sysinfo;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchGetType has to be implemented manually */
-
-/* remoteDispatchGetURI has to be implemented manually */
-
-static int
-remoteGetVersion(virConnectPtr conn, unsigned long *hv_ver)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_get_version_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_GET_VERSION,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_get_version_ret, (char *)&ret) == -1)
- goto done;
-
- if (hv_ver) *hv_ver = ret.hv_ver;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteInterfaceCreate(virInterfacePtr iface, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = iface->conn->interfacePrivateData;
- remote_interface_create_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_interface(&args.iface, iface);
- args.flags = flags;
-
- if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_CREATE,
- (xdrproc_t)xdr_remote_interface_create_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virInterfacePtr
-remoteInterfaceDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
-{
- virInterfacePtr rv = NULL;
- struct private_data *priv = conn->interfacePrivateData;
- remote_interface_define_xml_args args;
- remote_interface_define_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_INTERFACE_DEFINE_XML,
- (xdrproc_t)xdr_remote_interface_define_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_interface_define_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_interface(conn, ret.iface);
- xdr_free((xdrproc_t)xdr_remote_interface_define_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteInterfaceDestroy(virInterfacePtr iface, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = iface->conn->interfacePrivateData;
- remote_interface_destroy_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_interface(&args.iface, iface);
- args.flags = flags;
-
- if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_DESTROY,
- (xdrproc_t)xdr_remote_interface_destroy_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteInterfaceGetXMLDesc(virInterfacePtr iface, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = iface->conn->interfacePrivateData;
- remote_interface_get_xml_desc_args args;
- remote_interface_get_xml_desc_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_interface(&args.iface, iface);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_GET_XML_DESC,
- (xdrproc_t)xdr_remote_interface_get_xml_desc_args, (char *)&args,
- (xdrproc_t)xdr_remote_interface_get_xml_desc_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteInterfaceIsActive(virInterfacePtr iface)
-{
- int rv = -1;
- struct private_data *priv = iface->conn->interfacePrivateData;
- remote_interface_is_active_args args;
- remote_interface_is_active_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_interface(&args.iface, iface);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_IS_ACTIVE,
- (xdrproc_t)xdr_remote_interface_is_active_args, (char *)&args,
- (xdrproc_t)xdr_remote_interface_is_active_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.active;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virInterfacePtr
-remoteInterfaceLookupByMACString(virConnectPtr conn, const char *mac)
-{
- virInterfacePtr rv = NULL;
- struct private_data *priv = conn->interfacePrivateData;
- remote_interface_lookup_by_mac_string_args args;
- remote_interface_lookup_by_mac_string_ret ret;
-
- remoteDriverLock(priv);
-
- args.mac = (char *)mac;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_INTERFACE_LOOKUP_BY_MAC_STRING,
- (xdrproc_t)xdr_remote_interface_lookup_by_mac_string_args, (char *)&args,
- (xdrproc_t)xdr_remote_interface_lookup_by_mac_string_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_interface(conn, ret.iface);
- xdr_free((xdrproc_t)xdr_remote_interface_lookup_by_mac_string_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virInterfacePtr
-remoteInterfaceLookupByName(virConnectPtr conn, const char *name)
-{
- virInterfacePtr rv = NULL;
- struct private_data *priv = conn->interfacePrivateData;
- remote_interface_lookup_by_name_args args;
- remote_interface_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = (char *)name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_INTERFACE_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_interface_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_interface_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_interface(conn, ret.iface);
- xdr_free((xdrproc_t)xdr_remote_interface_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteInterfaceUndefine(virInterfacePtr iface)
-{
- int rv = -1;
- struct private_data *priv = iface->conn->interfacePrivateData;
- remote_interface_undefine_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_interface(&args.iface, iface);
-
- if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_UNDEFINE,
- (xdrproc_t)xdr_remote_interface_undefine_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchIsSecure has to be implemented manually */
-
-static int
-remoteListDefinedDomains(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_list_defined_domains_args args;
- remote_list_defined_domains_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_DOMAIN_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_DOMAINS,
- (xdrproc_t)xdr_remote_list_defined_domains_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_defined_domains_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_defined_domains_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteListDefinedInterfaces(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->interfacePrivateData;
- remote_list_defined_interfaces_args args;
- remote_list_defined_interfaces_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_INTERFACES,
- (xdrproc_t)xdr_remote_list_defined_interfaces_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_defined_interfaces_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_defined_interfaces_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteListDefinedNetworks(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->networkPrivateData;
- remote_list_defined_networks_args args;
- remote_list_defined_networks_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_NETWORKS,
- (xdrproc_t)xdr_remote_list_defined_networks_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_defined_networks_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_defined_networks_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteListDefinedStoragePools(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->storagePrivateData;
- remote_list_defined_storage_pools_args args;
- remote_list_defined_storage_pools_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_STORAGE_POOLS,
- (xdrproc_t)xdr_remote_list_defined_storage_pools_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_defined_storage_pools_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_defined_storage_pools_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchListDomains has to be implemented manually */
-
-static int
-remoteListInterfaces(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->interfacePrivateData;
- remote_list_interfaces_args args;
- remote_list_interfaces_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_INTERFACE_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_INTERFACE_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_INTERFACES,
- (xdrproc_t)xdr_remote_list_interfaces_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_interfaces_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_interfaces_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteListNetworks(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->networkPrivateData;
- remote_list_networks_args args;
- remote_list_networks_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_NETWORKS,
- (xdrproc_t)xdr_remote_list_networks_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_networks_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_networks_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteListNWFilters(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->nwfilterPrivateData;
- remote_list_nwfilters_args args;
- remote_list_nwfilters_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_NWFILTER_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_NWFILTER_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_NWFILTERS,
- (xdrproc_t)xdr_remote_list_nwfilters_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_nwfilters_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_nwfilters_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteListSecrets(virConnectPtr conn, char **const uuids, int maxuuids)
-{
- int rv = -1;
- struct private_data *priv = conn->secretPrivateData;
- remote_list_secrets_args args;
- remote_list_secrets_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxuuids > REMOTE_SECRET_UUID_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxuuids, REMOTE_SECRET_UUID_LIST_MAX);
- goto done;
- }
-
- args.maxuuids = maxuuids;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_SECRETS,
- (xdrproc_t)xdr_remote_list_secrets_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_secrets_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.uuids.uuids_len > maxuuids) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.uuids.uuids_len, maxuuids);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.uuids.uuids_len; ++i) {
- uuids[i] = strdup(ret.uuids.uuids_val[i]);
-
- if (uuids[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(uuids[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.uuids.uuids_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_secrets_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteListStoragePools(virConnectPtr conn, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = conn->storagePrivateData;
- remote_list_storage_pools_args args;
- remote_list_storage_pools_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
- goto done;
- }
-
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_LIST_STORAGE_POOLS,
- (xdrproc_t)xdr_remote_list_storage_pools_args, (char *)&args,
- (xdrproc_t)xdr_remote_list_storage_pools_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_list_storage_pools_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNetworkCreate(virNetworkPtr net)
-{
- int rv = -1;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_create_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_CREATE,
- (xdrproc_t)xdr_remote_network_create_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNetworkPtr
-remoteNetworkCreateXML(virConnectPtr conn, const char *xml)
-{
- virNetworkPtr rv = NULL;
- struct private_data *priv = conn->networkPrivateData;
- remote_network_create_xml_args args;
- remote_network_create_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NETWORK_CREATE_XML,
- (xdrproc_t)xdr_remote_network_create_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_create_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_network(conn, ret.net);
- xdr_free((xdrproc_t)xdr_remote_network_create_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNetworkPtr
-remoteNetworkDefineXML(virConnectPtr conn, const char *xml)
-{
- virNetworkPtr rv = NULL;
- struct private_data *priv = conn->networkPrivateData;
- remote_network_define_xml_args args;
- remote_network_define_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NETWORK_DEFINE_XML,
- (xdrproc_t)xdr_remote_network_define_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_define_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_network(conn, ret.net);
- xdr_free((xdrproc_t)xdr_remote_network_define_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNetworkDestroy(virNetworkPtr net)
-{
- int rv = -1;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_destroy_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_DESTROY,
- (xdrproc_t)xdr_remote_network_destroy_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteNetworkDumpXML(virNetworkPtr net, int flags)
-{
- char *rv = NULL;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_dump_xml_args args;
- remote_network_dump_xml_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_DUMP_XML,
- (xdrproc_t)xdr_remote_network_dump_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_dump_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNetworkGetAutostart(virNetworkPtr net, int *autostart)
-{
- int rv = -1;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_get_autostart_args args;
- remote_network_get_autostart_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_GET_AUTOSTART,
- (xdrproc_t)xdr_remote_network_get_autostart_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_get_autostart_ret, (char *)&ret) == -1)
- goto done;
-
- if (autostart) *autostart = ret.autostart;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteNetworkGetBridgeName(virNetworkPtr net)
-{
- char *rv = NULL;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_get_bridge_name_args args;
- remote_network_get_bridge_name_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_GET_BRIDGE_NAME,
- (xdrproc_t)xdr_remote_network_get_bridge_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_get_bridge_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.name;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNetworkIsActive(virNetworkPtr net)
-{
- int rv = -1;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_is_active_args args;
- remote_network_is_active_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_IS_ACTIVE,
- (xdrproc_t)xdr_remote_network_is_active_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_is_active_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.active;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNetworkIsPersistent(virNetworkPtr net)
-{
- int rv = -1;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_is_persistent_args args;
- remote_network_is_persistent_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_IS_PERSISTENT,
- (xdrproc_t)xdr_remote_network_is_persistent_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_is_persistent_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.persistent;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNetworkPtr
-remoteNetworkLookupByName(virConnectPtr conn, const char *name)
-{
- virNetworkPtr rv = NULL;
- struct private_data *priv = conn->networkPrivateData;
- remote_network_lookup_by_name_args args;
- remote_network_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = (char *)name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NETWORK_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_network_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_network(conn, ret.net);
- xdr_free((xdrproc_t)xdr_remote_network_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNetworkPtr
-remoteNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
-{
- virNetworkPtr rv = NULL;
- struct private_data *priv = conn->networkPrivateData;
- remote_network_lookup_by_uuid_args args;
- remote_network_lookup_by_uuid_ret ret;
-
- remoteDriverLock(priv);
-
- memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NETWORK_LOOKUP_BY_UUID,
- (xdrproc_t)xdr_remote_network_lookup_by_uuid_args, (char *)&args,
- (xdrproc_t)xdr_remote_network_lookup_by_uuid_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_network(conn, ret.net);
- xdr_free((xdrproc_t)xdr_remote_network_lookup_by_uuid_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNetworkSetAutostart(virNetworkPtr net, int autostart)
-{
- int rv = -1;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_set_autostart_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
- args.autostart = autostart;
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_SET_AUTOSTART,
- (xdrproc_t)xdr_remote_network_set_autostart_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNetworkUndefine(virNetworkPtr net)
-{
- int rv = -1;
- struct private_data *priv = net->conn->networkPrivateData;
- remote_network_undefine_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_network(&args.net, net);
-
- if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_UNDEFINE,
- (xdrproc_t)xdr_remote_network_undefine_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNodeDevicePtr
-remoteNodeDeviceCreateXML(virConnectPtr conn, const char *xml_desc, unsigned int flags)
-{
- virNodeDevicePtr rv = NULL;
- struct private_data *priv = conn->devMonPrivateData;
- remote_node_device_create_xml_args args;
- remote_node_device_create_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml_desc = (char *)xml_desc;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NODE_DEVICE_CREATE_XML,
- (xdrproc_t)xdr_remote_node_device_create_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_node_device_create_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_node_device(conn, ret.dev);
- xdr_free((xdrproc_t)xdr_remote_node_device_create_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNodeDeviceDestroy(virNodeDevicePtr dev)
-{
- int rv = -1;
- struct private_data *priv = dev->conn->devMonPrivateData;
- remote_node_device_destroy_args args;
-
- remoteDriverLock(priv);
-
- args.name = dev->name;
-
- if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_DESTROY,
- (xdrproc_t)xdr_remote_node_device_destroy_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchNodeDeviceDettach has to be implemented manually */
-
-static char *
-remoteNodeDeviceDumpXML(virNodeDevicePtr dev, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = dev->conn->devMonPrivateData;
- remote_node_device_dump_xml_args args;
- remote_node_device_dump_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = dev->name;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_DUMP_XML,
- (xdrproc_t)xdr_remote_node_device_dump_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_node_device_dump_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchNodeDeviceGetParent has to be implemented manually */
-
-static int
-remoteNodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = dev->conn->devMonPrivateData;
- remote_node_device_list_caps_args args;
- remote_node_device_list_caps_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_NODE_DEVICE_CAPS_LIST_MAX);
- goto done;
- }
-
- args.name = dev->name;
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_LIST_CAPS,
- (xdrproc_t)xdr_remote_node_device_list_caps_args, (char *)&args,
- (xdrproc_t)xdr_remote_node_device_list_caps_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_node_device_list_caps_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNodeDevicePtr
-remoteNodeDeviceLookupByName(virConnectPtr conn, const char *name)
-{
- virNodeDevicePtr rv = NULL;
- struct private_data *priv = conn->devMonPrivateData;
- remote_node_device_lookup_by_name_args args;
- remote_node_device_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = (char *)name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_node_device_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_node_device_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_node_device(conn, ret.dev);
- xdr_free((xdrproc_t)xdr_remote_node_device_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNodeDeviceNumOfCaps(virNodeDevicePtr dev)
-{
- int rv = -1;
- struct private_data *priv = dev->conn->devMonPrivateData;
- remote_node_device_num_of_caps_args args;
- remote_node_device_num_of_caps_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = dev->name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS,
- (xdrproc_t)xdr_remote_node_device_num_of_caps_args, (char *)&args,
- (xdrproc_t)xdr_remote_node_device_num_of_caps_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchNodeDeviceReAttach has to be implemented manually */
-
-/* remoteDispatchNodeDeviceReset has to be implemented manually */
-
-/* remoteDispatchNodeGetCellsFreeMemory has to be implemented manually */
-
-static unsigned long long
-remoteNodeGetFreeMemory(virConnectPtr conn)
-{
- unsigned long long rv = 0;
- struct private_data *priv = conn->privateData;
- remote_node_get_free_memory_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NODE_GET_FREE_MEMORY,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_node_get_free_memory_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.freeMem;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNodeGetInfo(virConnectPtr conn, virNodeInfoPtr result)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_node_get_info_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NODE_GET_INFO,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_node_get_info_ret, (char *)&ret) == -1)
- goto done;
-
- memcpy(result->model, ret.model, sizeof result->model);
- result->memory = ret.memory;
- result->cpus = ret.cpus;
- result->mhz = ret.mhz;
- result->nodes = ret.nodes;
- result->sockets = ret.sockets;
- result->cores = ret.cores;
- result->threads = ret.threads;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchNodeGetSecurityModel has to be implemented manually */
-
-static int
-remoteNodeListDevices(virConnectPtr conn, const char *cap, char **const names, int maxnames, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = conn->devMonPrivateData;
- remote_node_list_devices_args args;
- remote_node_list_devices_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_NODE_DEVICE_NAME_LIST_MAX);
- goto done;
- }
-
- args.cap = cap ? (char **)&cap : NULL;
- args.maxnames = maxnames;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NODE_LIST_DEVICES,
- (xdrproc_t)xdr_remote_node_list_devices_args, (char *)&args,
- (xdrproc_t)xdr_remote_node_list_devices_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_node_list_devices_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = conn->devMonPrivateData;
- remote_node_num_of_devices_args args;
- remote_node_num_of_devices_ret ret;
-
- remoteDriverLock(priv);
-
- args.cap = cap ? (char **)&cap : NULL;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NODE_NUM_OF_DEVICES,
- (xdrproc_t)xdr_remote_node_num_of_devices_args, (char *)&args,
- (xdrproc_t)xdr_remote_node_num_of_devices_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfDefinedDomains(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_num_of_defined_domains_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_DOMAINS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_defined_domains_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfDefinedInterfaces(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->interfacePrivateData;
- remote_num_of_defined_interfaces_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_INTERFACES,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_defined_interfaces_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfDefinedNetworks(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->networkPrivateData;
- remote_num_of_defined_networks_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_NETWORKS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_defined_networks_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfDefinedStoragePools(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->storagePrivateData;
- remote_num_of_defined_storage_pools_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_STORAGE_POOLS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_defined_storage_pools_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfDomains(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->privateData;
- remote_num_of_domains_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DOMAINS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_domains_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfInterfaces(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->interfacePrivateData;
- remote_num_of_interfaces_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_INTERFACES,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_interfaces_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfNetworks(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->networkPrivateData;
- remote_num_of_networks_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_NETWORKS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_networks_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfNWFilters(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->nwfilterPrivateData;
- remote_num_of_nwfilters_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_NWFILTERS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_nwfilters_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfSecrets(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->secretPrivateData;
- remote_num_of_secrets_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_SECRETS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_secrets_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNumOfStoragePools(virConnectPtr conn)
-{
- int rv = -1;
- struct private_data *priv = conn->storagePrivateData;
- remote_num_of_storage_pools_ret ret;
-
- remoteDriverLock(priv);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_STORAGE_POOLS,
- (xdrproc_t)xdr_void, (char *)NULL,
- (xdrproc_t)xdr_remote_num_of_storage_pools_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNWFilterPtr
-remoteNWFilterDefineXML(virConnectPtr conn, const char *xml, unsigned int flags ATTRIBUTE_UNUSED)
-{
- virNWFilterPtr rv = NULL;
- struct private_data *priv = conn->nwfilterPrivateData;
- remote_nwfilter_define_xml_args args;
- remote_nwfilter_define_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NWFILTER_DEFINE_XML,
- (xdrproc_t)xdr_remote_nwfilter_define_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_nwfilter_define_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_nwfilter(conn, ret.nwfilter);
- xdr_free((xdrproc_t)xdr_remote_nwfilter_define_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteNWFilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = nwfilter->conn->nwfilterPrivateData;
- remote_nwfilter_get_xml_desc_args args;
- remote_nwfilter_get_xml_desc_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_nwfilter(&args.nwfilter, nwfilter);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(nwfilter->conn, priv, 0, REMOTE_PROC_NWFILTER_GET_XML_DESC,
- (xdrproc_t)xdr_remote_nwfilter_get_xml_desc_args, (char *)&args,
- (xdrproc_t)xdr_remote_nwfilter_get_xml_desc_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNWFilterPtr
-remoteNWFilterLookupByName(virConnectPtr conn, const char *name)
-{
- virNWFilterPtr rv = NULL;
- struct private_data *priv = conn->nwfilterPrivateData;
- remote_nwfilter_lookup_by_name_args args;
- remote_nwfilter_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = (char *)name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NWFILTER_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_nwfilter_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_nwfilter_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_nwfilter(conn, ret.nwfilter);
- xdr_free((xdrproc_t)xdr_remote_nwfilter_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virNWFilterPtr
-remoteNWFilterLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
-{
- virNWFilterPtr rv = NULL;
- struct private_data *priv = conn->nwfilterPrivateData;
- remote_nwfilter_lookup_by_uuid_args args;
- remote_nwfilter_lookup_by_uuid_ret ret;
-
- remoteDriverLock(priv);
-
- memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_NWFILTER_LOOKUP_BY_UUID,
- (xdrproc_t)xdr_remote_nwfilter_lookup_by_uuid_args, (char *)&args,
- (xdrproc_t)xdr_remote_nwfilter_lookup_by_uuid_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_nwfilter(conn, ret.nwfilter);
- xdr_free((xdrproc_t)xdr_remote_nwfilter_lookup_by_uuid_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteNWFilterUndefine(virNWFilterPtr nwfilter)
-{
- int rv = -1;
- struct private_data *priv = nwfilter->conn->nwfilterPrivateData;
- remote_nwfilter_undefine_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_nwfilter(&args.nwfilter, nwfilter);
-
- if (call(nwfilter->conn, priv, 0, REMOTE_PROC_NWFILTER_UNDEFINE,
- (xdrproc_t)xdr_remote_nwfilter_undefine_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchOpen has to be implemented manually */
-
-static virSecretPtr
-remoteSecretDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
-{
- virSecretPtr rv = NULL;
- struct private_data *priv = conn->secretPrivateData;
- remote_secret_define_xml_args args;
- remote_secret_define_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_SECRET_DEFINE_XML,
- (xdrproc_t)xdr_remote_secret_define_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_secret_define_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_secret(conn, ret.secret);
- xdr_free((xdrproc_t)xdr_remote_secret_define_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchSecretGetValue has to be implemented manually */
-
-static char *
-remoteSecretGetXMLDesc(virSecretPtr secret, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = secret->conn->secretPrivateData;
- remote_secret_get_xml_desc_args args;
- remote_secret_get_xml_desc_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_secret(&args.secret, secret);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(secret->conn, priv, 0, REMOTE_PROC_SECRET_GET_XML_DESC,
- (xdrproc_t)xdr_remote_secret_get_xml_desc_args, (char *)&args,
- (xdrproc_t)xdr_remote_secret_get_xml_desc_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virSecretPtr
-remoteSecretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID)
-{
- virSecretPtr rv = NULL;
- struct private_data *priv = conn->secretPrivateData;
- remote_secret_lookup_by_usage_args args;
- remote_secret_lookup_by_usage_ret ret;
-
- remoteDriverLock(priv);
-
- args.usageType = usageType;
- args.usageID = (char *)usageID;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_SECRET_LOOKUP_BY_USAGE,
- (xdrproc_t)xdr_remote_secret_lookup_by_usage_args, (char *)&args,
- (xdrproc_t)xdr_remote_secret_lookup_by_usage_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_secret(conn, ret.secret);
- xdr_free((xdrproc_t)xdr_remote_secret_lookup_by_usage_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virSecretPtr
-remoteSecretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
-{
- virSecretPtr rv = NULL;
- struct private_data *priv = conn->secretPrivateData;
- remote_secret_lookup_by_uuid_args args;
- remote_secret_lookup_by_uuid_ret ret;
-
- remoteDriverLock(priv);
-
- memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_SECRET_LOOKUP_BY_UUID,
- (xdrproc_t)xdr_remote_secret_lookup_by_uuid_args, (char *)&args,
- (xdrproc_t)xdr_remote_secret_lookup_by_uuid_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_secret(conn, ret.secret);
- xdr_free((xdrproc_t)xdr_remote_secret_lookup_by_uuid_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteSecretSetValue(virSecretPtr secret, const unsigned char *value, size_t valuelen, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = secret->conn->secretPrivateData;
- remote_secret_set_value_args args;
-
- remoteDriverLock(priv);
-
- if (valuelen > REMOTE_SECRET_VALUE_MAX) {
- remoteError(VIR_ERR_RPC,
- _("%s length greater than maximum: %d > %d"),
- "value", (int)valuelen, REMOTE_SECRET_VALUE_MAX);
- goto done;
- }
-
- make_nonnull_secret(&args.secret, secret);
- args.value.value_val = (char *)value;
- args.value.value_len = valuelen;
- args.flags = flags;
-
- if (call(secret->conn, priv, 0, REMOTE_PROC_SECRET_SET_VALUE,
- (xdrproc_t)xdr_remote_secret_set_value_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteSecretUndefine(virSecretPtr secret)
-{
- int rv = -1;
- struct private_data *priv = secret->conn->secretPrivateData;
- remote_secret_undefine_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_secret(&args.secret, secret);
-
- if (call(secret->conn, priv, 0, REMOTE_PROC_SECRET_UNDEFINE,
- (xdrproc_t)xdr_remote_secret_undefine_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolBuild(virStoragePoolPtr pool, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_build_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.flags = flags;
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_BUILD,
- (xdrproc_t)xdr_remote_storage_pool_build_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolCreate(virStoragePoolPtr pool, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_create_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.flags = flags;
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_CREATE,
- (xdrproc_t)xdr_remote_storage_pool_create_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStoragePoolPtr
-remoteStoragePoolCreateXML(virConnectPtr conn, const char *xml, unsigned int flags)
-{
- virStoragePoolPtr rv = NULL;
- struct private_data *priv = conn->storagePrivateData;
- remote_storage_pool_create_xml_args args;
- remote_storage_pool_create_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_CREATE_XML,
- (xdrproc_t)xdr_remote_storage_pool_create_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_create_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_pool(conn, ret.pool);
- xdr_free((xdrproc_t)xdr_remote_storage_pool_create_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStoragePoolPtr
-remoteStoragePoolDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
-{
- virStoragePoolPtr rv = NULL;
- struct private_data *priv = conn->storagePrivateData;
- remote_storage_pool_define_xml_args args;
- remote_storage_pool_define_xml_ret ret;
-
- remoteDriverLock(priv);
-
- args.xml = (char *)xml;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DEFINE_XML,
- (xdrproc_t)xdr_remote_storage_pool_define_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_define_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_pool(conn, ret.pool);
- xdr_free((xdrproc_t)xdr_remote_storage_pool_define_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolDelete(virStoragePoolPtr pool, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_delete_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.flags = flags;
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DELETE,
- (xdrproc_t)xdr_remote_storage_pool_delete_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolDestroy(virStoragePoolPtr pool)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_destroy_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DESTROY,
- (xdrproc_t)xdr_remote_storage_pool_destroy_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteStoragePoolDumpXML(virStoragePoolPtr pool, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_dump_xml_args args;
- remote_storage_pool_dump_xml_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DUMP_XML,
- (xdrproc_t)xdr_remote_storage_pool_dump_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_dump_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolGetAutostart(virStoragePoolPtr pool, int *autostart)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_get_autostart_args args;
- remote_storage_pool_get_autostart_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_GET_AUTOSTART,
- (xdrproc_t)xdr_remote_storage_pool_get_autostart_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_get_autostart_ret, (char *)&ret) == -1)
- goto done;
-
- if (autostart) *autostart = ret.autostart;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolGetInfo(virStoragePoolPtr pool, virStoragePoolInfoPtr result)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_get_info_args args;
- remote_storage_pool_get_info_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_GET_INFO,
- (xdrproc_t)xdr_remote_storage_pool_get_info_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_get_info_ret, (char *)&ret) == -1)
- goto done;
-
- result->state = ret.state;
- result->capacity = ret.capacity;
- result->allocation = ret.allocation;
- result->available = ret.available;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolIsActive(virStoragePoolPtr pool)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_is_active_args args;
- remote_storage_pool_is_active_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_IS_ACTIVE,
- (xdrproc_t)xdr_remote_storage_pool_is_active_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_is_active_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.active;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolIsPersistent(virStoragePoolPtr pool)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_is_persistent_args args;
- remote_storage_pool_is_persistent_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_IS_PERSISTENT,
- (xdrproc_t)xdr_remote_storage_pool_is_persistent_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_is_persistent_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.persistent;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int maxnames)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_list_volumes_args args;
- remote_storage_pool_list_volumes_ret ret;
- int i;
-
- remoteDriverLock(priv);
-
- if (maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- maxnames, REMOTE_STORAGE_VOL_NAME_LIST_MAX);
- goto done;
- }
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.maxnames = maxnames;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LIST_VOLUMES,
- (xdrproc_t)xdr_remote_storage_pool_list_volumes_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_list_volumes_ret, (char *)&ret) == -1)
- goto done;
-
- if (ret.names.names_len > maxnames) {
- remoteError(VIR_ERR_RPC,
- _("too many remote undefineds: %d > %d"),
- ret.names.names_len, maxnames);
- goto cleanup;
- }
-
- /* This call is caller-frees (although that isn't clear from
- * the documentation). However xdr_free will free up both the
- * names and the list of pointers, so we have to strdup the
- * names here. */
- for (i = 0; i < ret.names.names_len; ++i) {
- names[i] = strdup(ret.names.names_val[i]);
-
- if (names[i] == NULL) {
- for (--i; i >= 0; --i)
- VIR_FREE(names[i]);
-
- virReportOOMError();
- goto cleanup;
- }
- }
-
- rv = ret.names.names_len;
-
-cleanup:
- xdr_free((xdrproc_t)xdr_remote_storage_pool_list_volumes_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStoragePoolPtr
-remoteStoragePoolLookupByName(virConnectPtr conn, const char *name)
-{
- virStoragePoolPtr rv = NULL;
- struct private_data *priv = conn->storagePrivateData;
- remote_storage_pool_lookup_by_name_args args;
- remote_storage_pool_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- args.name = (char *)name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_storage_pool_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_pool(conn, ret.pool);
- xdr_free((xdrproc_t)xdr_remote_storage_pool_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStoragePoolPtr
-remoteStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
-{
- virStoragePoolPtr rv = NULL;
- struct private_data *priv = conn->storagePrivateData;
- remote_storage_pool_lookup_by_uuid_args args;
- remote_storage_pool_lookup_by_uuid_ret ret;
-
- remoteDriverLock(priv);
-
- memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_UUID,
- (xdrproc_t)xdr_remote_storage_pool_lookup_by_uuid_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_lookup_by_uuid_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_pool(conn, ret.pool);
- xdr_free((xdrproc_t)xdr_remote_storage_pool_lookup_by_uuid_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStoragePoolPtr
-remoteStoragePoolLookupByVolume(virStorageVolPtr vol)
-{
- virStoragePoolPtr rv = NULL;
- struct private_data *priv = vol->conn->storagePrivateData;
- remote_storage_pool_lookup_by_volume_args args;
- remote_storage_pool_lookup_by_volume_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_vol(&args.vol, vol);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_VOLUME,
- (xdrproc_t)xdr_remote_storage_pool_lookup_by_volume_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_lookup_by_volume_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_pool(vol->conn, ret.pool);
- xdr_free((xdrproc_t)xdr_remote_storage_pool_lookup_by_volume_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolNumOfVolumes(virStoragePoolPtr pool)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_num_of_volumes_args args;
- remote_storage_pool_num_of_volumes_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_NUM_OF_VOLUMES,
- (xdrproc_t)xdr_remote_storage_pool_num_of_volumes_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_pool_num_of_volumes_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.num;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolRefresh(virStoragePoolPtr pool, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_refresh_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.flags = flags;
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_REFRESH,
- (xdrproc_t)xdr_remote_storage_pool_refresh_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolSetAutostart(virStoragePoolPtr pool, int autostart)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_set_autostart_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.autostart = autostart;
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_SET_AUTOSTART,
- (xdrproc_t)xdr_remote_storage_pool_set_autostart_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStoragePoolUndefine(virStoragePoolPtr pool)
-{
- int rv = -1;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_pool_undefine_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_UNDEFINE,
- (xdrproc_t)xdr_remote_storage_pool_undefine_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStorageVolPtr
-remoteStorageVolCreateXML(virStoragePoolPtr pool, const char *xml, unsigned int flags)
-{
- virStorageVolPtr rv = NULL;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_vol_create_xml_args args;
- remote_storage_vol_create_xml_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.xml = (char *)xml;
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_CREATE_XML,
- (xdrproc_t)xdr_remote_storage_vol_create_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_create_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_vol(pool->conn, ret.vol);
- xdr_free((xdrproc_t)xdr_remote_storage_vol_create_xml_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStorageVolPtr
-remoteStorageVolCreateXMLFrom(virStoragePoolPtr pool, const char *xml, virStorageVolPtr clonevol, unsigned int flags)
-{
- virStorageVolPtr rv = NULL;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_vol_create_xml_from_args args;
- remote_storage_vol_create_xml_from_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.xml = (char *)xml;
- make_nonnull_storage_vol(&args.clonevol, clonevol);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_CREATE_XML_FROM,
- (xdrproc_t)xdr_remote_storage_vol_create_xml_from_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_create_xml_from_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_vol(pool->conn, ret.vol);
- xdr_free((xdrproc_t)xdr_remote_storage_vol_create_xml_from_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = vol->conn->storagePrivateData;
- remote_storage_vol_delete_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_vol(&args.vol, vol);
- args.flags = flags;
-
- if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_DELETE,
- (xdrproc_t)xdr_remote_storage_vol_delete_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchStorageVolDownload has to be implemented manually */
-
-static char *
-remoteStorageVolDumpXML(virStorageVolPtr vol, unsigned int flags)
-{
- char *rv = NULL;
- struct private_data *priv = vol->conn->storagePrivateData;
- remote_storage_vol_dump_xml_args args;
- remote_storage_vol_dump_xml_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_vol(&args.vol, vol);
- args.flags = flags;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_DUMP_XML,
- (xdrproc_t)xdr_remote_storage_vol_dump_xml_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_dump_xml_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.xml;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static int
-remoteStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr result)
-{
- int rv = -1;
- struct private_data *priv = vol->conn->storagePrivateData;
- remote_storage_vol_get_info_args args;
- remote_storage_vol_get_info_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_vol(&args.vol, vol);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_GET_INFO,
- (xdrproc_t)xdr_remote_storage_vol_get_info_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_get_info_ret, (char *)&ret) == -1)
- goto done;
-
- result->type = ret.type;
- result->capacity = ret.capacity;
- result->allocation = ret.allocation;
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static char *
-remoteStorageVolGetPath(virStorageVolPtr vol)
-{
- char *rv = NULL;
- struct private_data *priv = vol->conn->storagePrivateData;
- remote_storage_vol_get_path_args args;
- remote_storage_vol_get_path_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_vol(&args.vol, vol);
-
- memset(&ret, 0, sizeof ret);
-
- if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_GET_PATH,
- (xdrproc_t)xdr_remote_storage_vol_get_path_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_get_path_ret, (char *)&ret) == -1)
- goto done;
-
- rv = ret.name;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStorageVolPtr
-remoteStorageVolLookupByKey(virConnectPtr conn, const char *key)
-{
- virStorageVolPtr rv = NULL;
- struct private_data *priv = conn->storagePrivateData;
- remote_storage_vol_lookup_by_key_args args;
- remote_storage_vol_lookup_by_key_ret ret;
-
- remoteDriverLock(priv);
-
- args.key = (char *)key;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_KEY,
- (xdrproc_t)xdr_remote_storage_vol_lookup_by_key_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_lookup_by_key_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_vol(conn, ret.vol);
- xdr_free((xdrproc_t)xdr_remote_storage_vol_lookup_by_key_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStorageVolPtr
-remoteStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
-{
- virStorageVolPtr rv = NULL;
- struct private_data *priv = pool->conn->storagePrivateData;
- remote_storage_vol_lookup_by_name_args args;
- remote_storage_vol_lookup_by_name_ret ret;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_pool(&args.pool, pool);
- args.name = (char *)name;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_NAME,
- (xdrproc_t)xdr_remote_storage_vol_lookup_by_name_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_lookup_by_name_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_vol(pool->conn, ret.vol);
- xdr_free((xdrproc_t)xdr_remote_storage_vol_lookup_by_name_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-static virStorageVolPtr
-remoteStorageVolLookupByPath(virConnectPtr conn, const char *path)
-{
- virStorageVolPtr rv = NULL;
- struct private_data *priv = conn->storagePrivateData;
- remote_storage_vol_lookup_by_path_args args;
- remote_storage_vol_lookup_by_path_ret ret;
-
- remoteDriverLock(priv);
-
- args.path = (char *)path;
-
- memset(&ret, 0, sizeof ret);
-
- if (call(conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH,
- (xdrproc_t)xdr_remote_storage_vol_lookup_by_path_args, (char *)&args,
- (xdrproc_t)xdr_remote_storage_vol_lookup_by_path_ret, (char *)&ret) == -1)
- goto done;
-
- rv = get_nonnull_storage_vol(conn, ret.vol);
- xdr_free((xdrproc_t)xdr_remote_storage_vol_lookup_by_path_ret, (char *)&ret);
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchStorageVolUpload has to be implemented manually */
-
-static int
-remoteStorageVolWipe(virStorageVolPtr vol, unsigned int flags)
-{
- int rv = -1;
- struct private_data *priv = vol->conn->storagePrivateData;
- remote_storage_vol_wipe_args args;
-
- remoteDriverLock(priv);
-
- make_nonnull_storage_vol(&args.vol, vol);
- args.flags = flags;
-
- if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_WIPE,
- (xdrproc_t)xdr_remote_storage_vol_wipe_args, (char *)&args,
- (xdrproc_t)xdr_void, (char *)NULL) == -1)
- goto done;
-
- rv = 0;
-
-done:
- remoteDriverUnlock(priv);
- return rv;
-}
-
-/* remoteDispatchSupportsFeature has to be implemented manually */
--- /dev/null
+/* Automatically generated by remote_generator.pl.
+ * Do not edit this file. Any changes you make will be lost.
+ */
+
+/* remoteDispatchAuthList has to be implemented manually */
+
+/* remoteDispatchAuthPolkit has to be implemented manually */
+
+/* remoteDispatchAuthSaslInit has to be implemented manually */
+
+/* remoteDispatchAuthSaslStart has to be implemented manually */
+
+/* remoteDispatchAuthSaslStep has to be implemented manually */
+
+/* remoteDispatchClose has to be implemented manually */
+
+static char *
+remoteCPUBaseline(virConnectPtr conn, const char **xmlCPUs, unsigned int xmlCPUslen, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_cpu_baseline_args args;
+ remote_cpu_baseline_ret ret;
+
+ remoteDriverLock(priv);
+
+ if (xmlCPUslen > REMOTE_CPU_BASELINE_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("%s length greater than maximum: %d > %d"),
+ "xmlCPUs", (int)xmlCPUslen, REMOTE_CPU_BASELINE_MAX);
+ goto done;
+ }
+
+ args.xmlCPUs.xmlCPUs_val = (char **)xmlCPUs;
+ args.xmlCPUs.xmlCPUs_len = xmlCPUslen;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_CPU_BASELINE,
+ (xdrproc_t)xdr_remote_cpu_baseline_args, (char *)&args,
+ (xdrproc_t)xdr_remote_cpu_baseline_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.cpu;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteCPUCompare(virConnectPtr conn, const char *xml, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_cpu_compare_args args;
+ remote_cpu_compare_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_CPU_COMPARE,
+ (xdrproc_t)xdr_remote_cpu_compare_args, (char *)&args,
+ (xdrproc_t)xdr_remote_cpu_compare_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.result;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainAbortJob(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_abort_job_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_ABORT_JOB,
+ (xdrproc_t)xdr_remote_domain_abort_job_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainAttachDevice(virDomainPtr dom, const char *xml)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_attach_device_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.xml = (char *)xml;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_ATTACH_DEVICE,
+ (xdrproc_t)xdr_remote_domain_attach_device_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_attach_device_flags_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_ATTACH_DEVICE_FLAGS,
+ (xdrproc_t)xdr_remote_domain_attach_device_flags_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainBlockPeek has to be implemented manually */
+
+static int
+remoteDomainBlockStats(virDomainPtr dom, const char *path, virDomainBlockStatsPtr result)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_block_stats_args args;
+ remote_domain_block_stats_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.path = (char *)path;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_BLOCK_STATS,
+ (xdrproc_t)xdr_remote_domain_block_stats_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_block_stats_ret, (char *)&ret) == -1)
+ goto done;
+
+ result->rd_req = ret.rd_req;
+ result->rd_bytes = ret.rd_bytes;
+ result->wr_req = ret.wr_req;
+ result->wr_bytes = ret.wr_bytes;
+ result->errs = ret.errs;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainCoreDump(virDomainPtr dom, const char *to, int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_core_dump_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.to = (char *)to;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_CORE_DUMP,
+ (xdrproc_t)xdr_remote_domain_core_dump_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainCreate has to be implemented manually */
+
+/* remoteDispatchDomainCreateWithFlags has to be implemented manually */
+
+static virDomainPtr
+remoteDomainCreateXML(virConnectPtr conn, const char *xml_desc, unsigned int flags)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_create_xml_args args;
+ remote_domain_create_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml_desc = (char *)xml_desc;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_CREATE_XML,
+ (xdrproc_t)xdr_remote_domain_create_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_create_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain(conn, ret.dom);
+ xdr_free((xdrproc_t)xdr_remote_domain_create_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainPtr
+remoteDomainDefineXML(virConnectPtr conn, const char *xml)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_define_xml_args args;
+ remote_domain_define_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_DEFINE_XML,
+ (xdrproc_t)xdr_remote_domain_define_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_define_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain(conn, ret.dom);
+ xdr_free((xdrproc_t)xdr_remote_domain_define_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainDestroy has to be implemented manually */
+
+static int
+remoteDomainDetachDevice(virDomainPtr dom, const char *xml)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_detach_device_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.xml = (char *)xml;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_DETACH_DEVICE,
+ (xdrproc_t)xdr_remote_domain_detach_device_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_detach_device_flags_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_DETACH_DEVICE_FLAGS,
+ (xdrproc_t)xdr_remote_domain_detach_device_flags_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteDomainDumpXML(virDomainPtr dom, int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_dump_xml_args args;
+ remote_domain_dump_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_DUMP_XML,
+ (xdrproc_t)xdr_remote_domain_dump_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_dump_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainEventsDeregister has to be implemented manually */
+
+/* remoteDispatchDomainEventsDeregisterAny has to be implemented manually */
+
+/* remoteDispatchDomainEventsRegister has to be implemented manually */
+
+/* remoteDispatchDomainEventsRegisterAny has to be implemented manually */
+
+static int
+remoteDomainGetAutostart(virDomainPtr dom, int *autostart)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_autostart_args args;
+ remote_domain_get_autostart_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_AUTOSTART,
+ (xdrproc_t)xdr_remote_domain_get_autostart_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_autostart_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (autostart) *autostart = ret.autostart;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainGetBlkioParameters has to be implemented manually */
+
+static int
+remoteDomainGetBlockInfo(virDomainPtr dom, const char *path, virDomainBlockInfoPtr result, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_block_info_args args;
+ remote_domain_get_block_info_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.path = (char *)path;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_BLOCK_INFO,
+ (xdrproc_t)xdr_remote_domain_get_block_info_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_block_info_ret, (char *)&ret) == -1)
+ goto done;
+
+ result->allocation = ret.allocation;
+ result->capacity = ret.capacity;
+ result->physical = ret.physical;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainGetInfo(virDomainPtr dom, virDomainInfoPtr result)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_info_args args;
+ remote_domain_get_info_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_INFO,
+ (xdrproc_t)xdr_remote_domain_get_info_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_info_ret, (char *)&ret) == -1)
+ goto done;
+
+ result->state = ret.state;
+ result->maxMem = ret.maxMem;
+ result->memory = ret.memory;
+ result->nrVirtCpu = ret.nrVirtCpu;
+ result->cpuTime = ret.cpuTime;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainGetJobInfo(virDomainPtr dom, virDomainJobInfoPtr result)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_job_info_args args;
+ remote_domain_get_job_info_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_JOB_INFO,
+ (xdrproc_t)xdr_remote_domain_get_job_info_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_job_info_ret, (char *)&ret) == -1)
+ goto done;
+
+ result->type = ret.type;
+ result->timeElapsed = ret.timeElapsed;
+ result->timeRemaining = ret.timeRemaining;
+ result->dataTotal = ret.dataTotal;
+ result->dataProcessed = ret.dataProcessed;
+ result->dataRemaining = ret.dataRemaining;
+ result->memTotal = ret.memTotal;
+ result->memProcessed = ret.memProcessed;
+ result->memRemaining = ret.memRemaining;
+ result->fileTotal = ret.fileTotal;
+ result->fileProcessed = ret.fileProcessed;
+ result->fileRemaining = ret.fileRemaining;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static unsigned long
+remoteDomainGetMaxMemory(virDomainPtr dom)
+{
+ unsigned long rv = 0;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_max_memory_args args;
+ remote_domain_get_max_memory_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_MAX_MEMORY,
+ (xdrproc_t)xdr_remote_domain_get_max_memory_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_max_memory_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.memory;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainGetMaxVcpus(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_max_vcpus_args args;
+ remote_domain_get_max_vcpus_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_MAX_VCPUS,
+ (xdrproc_t)xdr_remote_domain_get_max_vcpus_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_max_vcpus_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainGetMemoryParameters has to be implemented manually */
+
+static char *
+remoteDomainGetOSType(virDomainPtr dom)
+{
+ char *rv = NULL;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_os_type_args args;
+ remote_domain_get_os_type_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_OS_TYPE,
+ (xdrproc_t)xdr_remote_domain_get_os_type_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_os_type_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.type;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainGetSchedulerParameters has to be implemented manually */
+
+/* remoteDispatchDomainGetSchedulerType has to be implemented manually */
+
+/* remoteDispatchDomainGetSecurityLabel has to be implemented manually */
+
+/* remoteDispatchDomainGetVcpus has to be implemented manually */
+
+static int
+remoteDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_get_vcpus_flags_args args;
+ remote_domain_get_vcpus_flags_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS,
+ (xdrproc_t)xdr_remote_domain_get_vcpus_flags_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_get_vcpus_flags_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainHasCurrentSnapshot(virDomainPtr dom, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_has_current_snapshot_args args;
+ remote_domain_has_current_snapshot_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_HAS_CURRENT_SNAPSHOT,
+ (xdrproc_t)xdr_remote_domain_has_current_snapshot_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_has_current_snapshot_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.result;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainHasManagedSaveImage(virDomainPtr dom, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_has_managed_save_image_args args;
+ remote_domain_has_managed_save_image_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_HAS_MANAGED_SAVE_IMAGE,
+ (xdrproc_t)xdr_remote_domain_has_managed_save_image_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_has_managed_save_image_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.result;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainInterfaceStats(virDomainPtr dom, const char *path, virDomainInterfaceStatsPtr result)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_interface_stats_args args;
+ remote_domain_interface_stats_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.path = (char *)path;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_INTERFACE_STATS,
+ (xdrproc_t)xdr_remote_domain_interface_stats_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_interface_stats_ret, (char *)&ret) == -1)
+ goto done;
+
+ result->rx_bytes = ret.rx_bytes;
+ result->rx_packets = ret.rx_packets;
+ result->rx_errs = ret.rx_errs;
+ result->rx_drop = ret.rx_drop;
+ result->tx_bytes = ret.tx_bytes;
+ result->tx_packets = ret.tx_packets;
+ result->tx_errs = ret.tx_errs;
+ result->tx_drop = ret.tx_drop;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainIsActive(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_is_active_args args;
+ remote_domain_is_active_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_IS_ACTIVE,
+ (xdrproc_t)xdr_remote_domain_is_active_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_is_active_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.active;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainIsPersistent(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_is_persistent_args args;
+ remote_domain_is_persistent_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_IS_PERSISTENT,
+ (xdrproc_t)xdr_remote_domain_is_persistent_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_is_persistent_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.persistent;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainIsUpdated(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_is_updated_args args;
+ remote_domain_is_updated_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_IS_UPDATED,
+ (xdrproc_t)xdr_remote_domain_is_updated_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_is_updated_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.updated;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainPtr
+remoteDomainLookupByID(virConnectPtr conn, int id)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_lookup_by_id_args args;
+ remote_domain_lookup_by_id_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.id = id;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_ID,
+ (xdrproc_t)xdr_remote_domain_lookup_by_id_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_lookup_by_id_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain(conn, ret.dom);
+ xdr_free((xdrproc_t)xdr_remote_domain_lookup_by_id_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainPtr
+remoteDomainLookupByName(virConnectPtr conn, const char *name)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_lookup_by_name_args args;
+ remote_domain_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = (char *)name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_domain_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain(conn, ret.dom);
+ xdr_free((xdrproc_t)xdr_remote_domain_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainPtr
+remoteDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_lookup_by_uuid_args args;
+ remote_domain_lookup_by_uuid_ret ret;
+
+ remoteDriverLock(priv);
+
+ memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID,
+ (xdrproc_t)xdr_remote_domain_lookup_by_uuid_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_lookup_by_uuid_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain(conn, ret.dom);
+ xdr_free((xdrproc_t)xdr_remote_domain_lookup_by_uuid_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainManagedSave(virDomainPtr dom, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_managed_save_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MANAGED_SAVE,
+ (xdrproc_t)xdr_remote_domain_managed_save_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainManagedSaveRemove(virDomainPtr dom, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_managed_save_remove_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MANAGED_SAVE_REMOVE,
+ (xdrproc_t)xdr_remote_domain_managed_save_remove_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainMemoryPeek has to be implemented manually */
+
+/* remoteDispatchDomainMemoryStats has to be implemented manually */
+
+static virDomainPtr
+remoteDomainMigrateFinish(virConnectPtr conn, const char *dname, const char *cookie, int cookielen, const char *uri, unsigned long flags)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_migrate_finish_args args;
+ remote_domain_migrate_finish_ret ret;
+
+ remoteDriverLock(priv);
+
+ if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("%s length greater than maximum: %d > %d"),
+ "cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
+ goto done;
+ }
+
+ args.dname = (char *)dname;
+ args.cookie.cookie_val = (char *)cookie;
+ args.cookie.cookie_len = cookielen;
+ args.uri = (char *)uri;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH,
+ (xdrproc_t)xdr_remote_domain_migrate_finish_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_migrate_finish_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain(conn, ret.ddom);
+ xdr_free((xdrproc_t)xdr_remote_domain_migrate_finish_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainPtr
+remoteDomainMigrateFinish2(virConnectPtr conn, const char *dname, const char *cookie, int cookielen, const char *uri, unsigned long flags, int retcode)
+{
+ virDomainPtr rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_migrate_finish2_args args;
+ remote_domain_migrate_finish2_ret ret;
+
+ remoteDriverLock(priv);
+
+ if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("%s length greater than maximum: %d > %d"),
+ "cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
+ goto done;
+ }
+
+ args.dname = (char *)dname;
+ args.cookie.cookie_val = (char *)cookie;
+ args.cookie.cookie_len = cookielen;
+ args.uri = (char *)uri;
+ args.flags = flags;
+ args.retcode = retcode;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH2,
+ (xdrproc_t)xdr_remote_domain_migrate_finish2_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_migrate_finish2_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain(conn, ret.ddom);
+ xdr_free((xdrproc_t)xdr_remote_domain_migrate_finish2_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainMigratePerform(virDomainPtr dom, const char *cookie, int cookielen, const char *uri, unsigned long flags, const char *dname, unsigned long resource)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_migrate_perform_args args;
+
+ remoteDriverLock(priv);
+
+ if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("%s length greater than maximum: %d > %d"),
+ "cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
+ goto done;
+ }
+
+ make_nonnull_domain(&args.dom, dom);
+ args.cookie.cookie_val = (char *)cookie;
+ args.cookie.cookie_len = cookielen;
+ args.uri = (char *)uri;
+ args.flags = flags;
+ args.dname = dname ? (char **)&dname : NULL;
+ args.resource = resource;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PERFORM,
+ (xdrproc_t)xdr_remote_domain_migrate_perform_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainMigratePrepare has to be implemented manually */
+
+/* remoteDispatchDomainMigratePrepare2 has to be implemented manually */
+
+/* remoteDispatchDomainMigratePrepareTunnel has to be implemented manually */
+
+static int
+remoteDomainMigrateSetMaxDowntime(virDomainPtr dom, unsigned long long downtime, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_migrate_set_max_downtime_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.downtime = downtime;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_SET_MAX_DOWNTIME,
+ (xdrproc_t)xdr_remote_domain_migrate_set_max_downtime_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainMigrateSetMaxSpeed(virDomainPtr dom, unsigned long bandwidth, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_migrate_set_max_speed_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.bandwidth = bandwidth;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_SET_MAX_SPEED,
+ (xdrproc_t)xdr_remote_domain_migrate_set_max_speed_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainOpenConsole has to be implemented manually */
+
+static int
+remoteDomainPinVcpu(virDomainPtr dom, unsigned int vcpu, unsigned char *cpumap, int cpumaplen)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_pin_vcpu_args args;
+
+ remoteDriverLock(priv);
+
+ if (cpumaplen > REMOTE_CPUMAP_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("%s length greater than maximum: %d > %d"),
+ "cpumap", (int)cpumaplen, REMOTE_CPUMAP_MAX);
+ goto done;
+ }
+
+ make_nonnull_domain(&args.dom, dom);
+ args.vcpu = vcpu;
+ args.cpumap.cpumap_val = (char *)cpumap;
+ args.cpumap.cpumap_len = cpumaplen;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_PIN_VCPU,
+ (xdrproc_t)xdr_remote_domain_pin_vcpu_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainReboot(virDomainPtr dom, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_reboot_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_REBOOT,
+ (xdrproc_t)xdr_remote_domain_reboot_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainRestore(virConnectPtr conn, const char *from)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_domain_restore_args args;
+
+ remoteDriverLock(priv);
+
+ args.from = (char *)from;
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_RESTORE,
+ (xdrproc_t)xdr_remote_domain_restore_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainResume(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_resume_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_RESUME,
+ (xdrproc_t)xdr_remote_domain_resume_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainRevertToSnapshot(virDomainSnapshotPtr snap, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = snap->domain->conn->privateData;
+ remote_domain_revert_to_snapshot_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain_snapshot(&args.snap, snap);
+ args.flags = flags;
+
+ if (call(snap->domain->conn, priv, 0, REMOTE_PROC_DOMAIN_REVERT_TO_SNAPSHOT,
+ (xdrproc_t)xdr_remote_domain_revert_to_snapshot_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSave(virDomainPtr dom, const char *to)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_save_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.to = (char *)to;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SAVE,
+ (xdrproc_t)xdr_remote_domain_save_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSetAutostart(virDomainPtr dom, int autostart)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_set_autostart_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.autostart = autostart;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_AUTOSTART,
+ (xdrproc_t)xdr_remote_domain_set_autostart_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainSetBlkioParameters has to be implemented manually */
+
+static int
+remoteDomainSetMaxMemory(virDomainPtr dom, unsigned long memory)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_set_max_memory_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.memory = memory;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MAX_MEMORY,
+ (xdrproc_t)xdr_remote_domain_set_max_memory_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSetMemory(virDomainPtr dom, unsigned long memory)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_set_memory_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.memory = memory;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MEMORY,
+ (xdrproc_t)xdr_remote_domain_set_memory_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSetMemoryFlags(virDomainPtr dom, unsigned long memory, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_set_memory_flags_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.memory = memory;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_MEMORY_FLAGS,
+ (xdrproc_t)xdr_remote_domain_set_memory_flags_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchDomainSetMemoryParameters has to be implemented manually */
+
+/* remoteDispatchDomainSetSchedulerParameters has to be implemented manually */
+
+static int
+remoteDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_set_vcpus_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.nvcpus = nvcpus;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_VCPUS,
+ (xdrproc_t)xdr_remote_domain_set_vcpus_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_set_vcpus_flags_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.nvcpus = nvcpus;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS,
+ (xdrproc_t)xdr_remote_domain_set_vcpus_flags_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainShutdown(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_shutdown_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SHUTDOWN,
+ (xdrproc_t)xdr_remote_domain_shutdown_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainSnapshotPtr
+remoteDomainSnapshotCreateXML(virDomainPtr dom, const char *xml_desc, unsigned int flags)
+{
+ virDomainSnapshotPtr rv = NULL;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_snapshot_create_xml_args args;
+ remote_domain_snapshot_create_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.xml_desc = (char *)xml_desc;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_CREATE_XML,
+ (xdrproc_t)xdr_remote_domain_snapshot_create_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_snapshot_create_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain_snapshot(dom, ret.snap);
+ xdr_free((xdrproc_t)xdr_remote_domain_snapshot_create_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainSnapshotPtr
+remoteDomainSnapshotCurrent(virDomainPtr dom, unsigned int flags)
+{
+ virDomainSnapshotPtr rv = NULL;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_snapshot_current_args args;
+ remote_domain_snapshot_current_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_CURRENT,
+ (xdrproc_t)xdr_remote_domain_snapshot_current_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_snapshot_current_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain_snapshot(dom, ret.snap);
+ xdr_free((xdrproc_t)xdr_remote_domain_snapshot_current_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSnapshotDelete(virDomainSnapshotPtr snap, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = snap->domain->conn->privateData;
+ remote_domain_snapshot_delete_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain_snapshot(&args.snap, snap);
+ args.flags = flags;
+
+ if (call(snap->domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_DELETE,
+ (xdrproc_t)xdr_remote_domain_snapshot_delete_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteDomainSnapshotDumpXML(virDomainSnapshotPtr snap, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = snap->domain->conn->privateData;
+ remote_domain_snapshot_dump_xml_args args;
+ remote_domain_snapshot_dump_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain_snapshot(&args.snap, snap);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(snap->domain->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_DUMP_XML,
+ (xdrproc_t)xdr_remote_domain_snapshot_dump_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_snapshot_dump_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSnapshotListNames(virDomainPtr dom, char **const names, int maxnames, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_snapshot_list_names_args args;
+ remote_domain_snapshot_list_names_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX);
+ goto done;
+ }
+
+ make_nonnull_domain(&args.dom, dom);
+ args.maxnames = maxnames;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_NAMES,
+ (xdrproc_t)xdr_remote_domain_snapshot_list_names_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_snapshot_list_names_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_domain_snapshot_list_names_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virDomainSnapshotPtr
+remoteDomainSnapshotLookupByName(virDomainPtr dom, const char *name, unsigned int flags)
+{
+ virDomainSnapshotPtr rv = NULL;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_snapshot_lookup_by_name_args args;
+ remote_domain_snapshot_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.name = (char *)name;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_domain_snapshot_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_snapshot_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_domain_snapshot(dom, ret.snap);
+ xdr_free((xdrproc_t)xdr_remote_domain_snapshot_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSnapshotNum(virDomainPtr dom, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_snapshot_num_args args;
+ remote_domain_snapshot_num_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SNAPSHOT_NUM,
+ (xdrproc_t)xdr_remote_domain_snapshot_num_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_snapshot_num_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainSuspend(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_suspend_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_SUSPEND,
+ (xdrproc_t)xdr_remote_domain_suspend_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainUndefine(virDomainPtr dom)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_undefine_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_UNDEFINE,
+ (xdrproc_t)xdr_remote_domain_undefine_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = dom->conn->privateData;
+ remote_domain_update_device_flags_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_domain(&args.dom, dom);
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_UPDATE_DEVICE_FLAGS,
+ (xdrproc_t)xdr_remote_domain_update_device_flags_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat, const char *nativeConfig, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_xml_from_native_args args;
+ remote_domain_xml_from_native_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.nativeFormat = (char *)nativeFormat;
+ args.nativeConfig = (char *)nativeConfig;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_XML_FROM_NATIVE,
+ (xdrproc_t)xdr_remote_domain_xml_from_native_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_xml_from_native_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.domainXml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteDomainXMLToNative(virConnectPtr conn, const char *nativeFormat, const char *domainXml, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_domain_xml_to_native_args args;
+ remote_domain_xml_to_native_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.nativeFormat = (char *)nativeFormat;
+ args.domainXml = (char *)domainXml;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_XML_TO_NATIVE,
+ (xdrproc_t)xdr_remote_domain_xml_to_native_args, (char *)&args,
+ (xdrproc_t)xdr_remote_domain_xml_to_native_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.nativeConfig;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchFindStoragePoolSources has to be implemented manually */
+
+static char *
+remoteGetCapabilities(virConnectPtr conn)
+{
+ char *rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_get_capabilities_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_GET_CAPABILITIES,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_get_capabilities_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.capabilities;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteGetHostname(virConnectPtr conn)
+{
+ char *rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_get_hostname_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_GET_HOSTNAME,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_get_hostname_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.hostname;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteGetLibVersion(virConnectPtr conn, unsigned long *lib_ver)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_get_lib_version_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_GET_LIB_VERSION,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_get_lib_version_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (lib_ver) *lib_ver = ret.lib_ver;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteGetMaxVcpus(virConnectPtr conn, const char *type)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_get_max_vcpus_args args;
+ remote_get_max_vcpus_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.type = type ? (char **)&type : NULL;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_GET_MAX_VCPUS,
+ (xdrproc_t)xdr_remote_get_max_vcpus_args, (char *)&args,
+ (xdrproc_t)xdr_remote_get_max_vcpus_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.max_vcpus;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteGetSysinfo(virConnectPtr conn, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = conn->privateData;
+ remote_get_sysinfo_args args;
+ remote_get_sysinfo_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_GET_SYSINFO,
+ (xdrproc_t)xdr_remote_get_sysinfo_args, (char *)&args,
+ (xdrproc_t)xdr_remote_get_sysinfo_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.sysinfo;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchGetType has to be implemented manually */
+
+/* remoteDispatchGetURI has to be implemented manually */
+
+static int
+remoteGetVersion(virConnectPtr conn, unsigned long *hv_ver)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_get_version_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_GET_VERSION,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_get_version_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (hv_ver) *hv_ver = ret.hv_ver;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteInterfaceCreate(virInterfacePtr iface, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = iface->conn->interfacePrivateData;
+ remote_interface_create_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_interface(&args.iface, iface);
+ args.flags = flags;
+
+ if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_CREATE,
+ (xdrproc_t)xdr_remote_interface_create_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virInterfacePtr
+remoteInterfaceDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
+{
+ virInterfacePtr rv = NULL;
+ struct private_data *priv = conn->interfacePrivateData;
+ remote_interface_define_xml_args args;
+ remote_interface_define_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_INTERFACE_DEFINE_XML,
+ (xdrproc_t)xdr_remote_interface_define_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_interface_define_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_interface(conn, ret.iface);
+ xdr_free((xdrproc_t)xdr_remote_interface_define_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteInterfaceDestroy(virInterfacePtr iface, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = iface->conn->interfacePrivateData;
+ remote_interface_destroy_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_interface(&args.iface, iface);
+ args.flags = flags;
+
+ if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_DESTROY,
+ (xdrproc_t)xdr_remote_interface_destroy_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteInterfaceGetXMLDesc(virInterfacePtr iface, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = iface->conn->interfacePrivateData;
+ remote_interface_get_xml_desc_args args;
+ remote_interface_get_xml_desc_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_interface(&args.iface, iface);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_GET_XML_DESC,
+ (xdrproc_t)xdr_remote_interface_get_xml_desc_args, (char *)&args,
+ (xdrproc_t)xdr_remote_interface_get_xml_desc_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteInterfaceIsActive(virInterfacePtr iface)
+{
+ int rv = -1;
+ struct private_data *priv = iface->conn->interfacePrivateData;
+ remote_interface_is_active_args args;
+ remote_interface_is_active_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_interface(&args.iface, iface);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_IS_ACTIVE,
+ (xdrproc_t)xdr_remote_interface_is_active_args, (char *)&args,
+ (xdrproc_t)xdr_remote_interface_is_active_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.active;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virInterfacePtr
+remoteInterfaceLookupByMACString(virConnectPtr conn, const char *mac)
+{
+ virInterfacePtr rv = NULL;
+ struct private_data *priv = conn->interfacePrivateData;
+ remote_interface_lookup_by_mac_string_args args;
+ remote_interface_lookup_by_mac_string_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.mac = (char *)mac;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_INTERFACE_LOOKUP_BY_MAC_STRING,
+ (xdrproc_t)xdr_remote_interface_lookup_by_mac_string_args, (char *)&args,
+ (xdrproc_t)xdr_remote_interface_lookup_by_mac_string_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_interface(conn, ret.iface);
+ xdr_free((xdrproc_t)xdr_remote_interface_lookup_by_mac_string_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virInterfacePtr
+remoteInterfaceLookupByName(virConnectPtr conn, const char *name)
+{
+ virInterfacePtr rv = NULL;
+ struct private_data *priv = conn->interfacePrivateData;
+ remote_interface_lookup_by_name_args args;
+ remote_interface_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = (char *)name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_INTERFACE_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_interface_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_interface_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_interface(conn, ret.iface);
+ xdr_free((xdrproc_t)xdr_remote_interface_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteInterfaceUndefine(virInterfacePtr iface)
+{
+ int rv = -1;
+ struct private_data *priv = iface->conn->interfacePrivateData;
+ remote_interface_undefine_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_interface(&args.iface, iface);
+
+ if (call(iface->conn, priv, 0, REMOTE_PROC_INTERFACE_UNDEFINE,
+ (xdrproc_t)xdr_remote_interface_undefine_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchIsSecure has to be implemented manually */
+
+static int
+remoteListDefinedDomains(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_list_defined_domains_args args;
+ remote_list_defined_domains_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_DOMAIN_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_DOMAINS,
+ (xdrproc_t)xdr_remote_list_defined_domains_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_defined_domains_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_defined_domains_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteListDefinedInterfaces(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->interfacePrivateData;
+ remote_list_defined_interfaces_args args;
+ remote_list_defined_interfaces_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_INTERFACES,
+ (xdrproc_t)xdr_remote_list_defined_interfaces_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_defined_interfaces_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_defined_interfaces_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteListDefinedNetworks(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_list_defined_networks_args args;
+ remote_list_defined_networks_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_NETWORKS,
+ (xdrproc_t)xdr_remote_list_defined_networks_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_defined_networks_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_defined_networks_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteListDefinedStoragePools(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_list_defined_storage_pools_args args;
+ remote_list_defined_storage_pools_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_DEFINED_STORAGE_POOLS,
+ (xdrproc_t)xdr_remote_list_defined_storage_pools_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_defined_storage_pools_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_defined_storage_pools_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchListDomains has to be implemented manually */
+
+static int
+remoteListInterfaces(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->interfacePrivateData;
+ remote_list_interfaces_args args;
+ remote_list_interfaces_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_INTERFACE_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_INTERFACE_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_INTERFACES,
+ (xdrproc_t)xdr_remote_list_interfaces_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_interfaces_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_interfaces_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteListNetworks(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_list_networks_args args;
+ remote_list_networks_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_NETWORKS,
+ (xdrproc_t)xdr_remote_list_networks_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_networks_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_networks_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteListNWFilters(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->nwfilterPrivateData;
+ remote_list_nwfilters_args args;
+ remote_list_nwfilters_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_NWFILTER_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_NWFILTER_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_NWFILTERS,
+ (xdrproc_t)xdr_remote_list_nwfilters_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_nwfilters_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_nwfilters_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteListSecrets(virConnectPtr conn, char **const uuids, int maxuuids)
+{
+ int rv = -1;
+ struct private_data *priv = conn->secretPrivateData;
+ remote_list_secrets_args args;
+ remote_list_secrets_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxuuids > REMOTE_SECRET_UUID_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxuuids, REMOTE_SECRET_UUID_LIST_MAX);
+ goto done;
+ }
+
+ args.maxuuids = maxuuids;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_SECRETS,
+ (xdrproc_t)xdr_remote_list_secrets_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_secrets_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.uuids.uuids_len > maxuuids) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.uuids.uuids_len, maxuuids);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.uuids.uuids_len; ++i) {
+ uuids[i] = strdup(ret.uuids.uuids_val[i]);
+
+ if (uuids[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(uuids[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.uuids.uuids_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_secrets_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteListStoragePools(virConnectPtr conn, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_list_storage_pools_args args;
+ remote_list_storage_pools_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_LIST_STORAGE_POOLS,
+ (xdrproc_t)xdr_remote_list_storage_pools_args, (char *)&args,
+ (xdrproc_t)xdr_remote_list_storage_pools_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_list_storage_pools_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNetworkCreate(virNetworkPtr net)
+{
+ int rv = -1;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_create_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_CREATE,
+ (xdrproc_t)xdr_remote_network_create_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNetworkPtr
+remoteNetworkCreateXML(virConnectPtr conn, const char *xml)
+{
+ virNetworkPtr rv = NULL;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_network_create_xml_args args;
+ remote_network_create_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NETWORK_CREATE_XML,
+ (xdrproc_t)xdr_remote_network_create_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_create_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_network(conn, ret.net);
+ xdr_free((xdrproc_t)xdr_remote_network_create_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNetworkPtr
+remoteNetworkDefineXML(virConnectPtr conn, const char *xml)
+{
+ virNetworkPtr rv = NULL;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_network_define_xml_args args;
+ remote_network_define_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NETWORK_DEFINE_XML,
+ (xdrproc_t)xdr_remote_network_define_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_define_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_network(conn, ret.net);
+ xdr_free((xdrproc_t)xdr_remote_network_define_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNetworkDestroy(virNetworkPtr net)
+{
+ int rv = -1;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_destroy_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_DESTROY,
+ (xdrproc_t)xdr_remote_network_destroy_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteNetworkDumpXML(virNetworkPtr net, int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_dump_xml_args args;
+ remote_network_dump_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_DUMP_XML,
+ (xdrproc_t)xdr_remote_network_dump_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_dump_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNetworkGetAutostart(virNetworkPtr net, int *autostart)
+{
+ int rv = -1;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_get_autostart_args args;
+ remote_network_get_autostart_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_GET_AUTOSTART,
+ (xdrproc_t)xdr_remote_network_get_autostart_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_get_autostart_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (autostart) *autostart = ret.autostart;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteNetworkGetBridgeName(virNetworkPtr net)
+{
+ char *rv = NULL;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_get_bridge_name_args args;
+ remote_network_get_bridge_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_GET_BRIDGE_NAME,
+ (xdrproc_t)xdr_remote_network_get_bridge_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_get_bridge_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.name;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNetworkIsActive(virNetworkPtr net)
+{
+ int rv = -1;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_is_active_args args;
+ remote_network_is_active_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_IS_ACTIVE,
+ (xdrproc_t)xdr_remote_network_is_active_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_is_active_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.active;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNetworkIsPersistent(virNetworkPtr net)
+{
+ int rv = -1;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_is_persistent_args args;
+ remote_network_is_persistent_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_IS_PERSISTENT,
+ (xdrproc_t)xdr_remote_network_is_persistent_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_is_persistent_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.persistent;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNetworkPtr
+remoteNetworkLookupByName(virConnectPtr conn, const char *name)
+{
+ virNetworkPtr rv = NULL;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_network_lookup_by_name_args args;
+ remote_network_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = (char *)name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NETWORK_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_network_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_network(conn, ret.net);
+ xdr_free((xdrproc_t)xdr_remote_network_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNetworkPtr
+remoteNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
+{
+ virNetworkPtr rv = NULL;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_network_lookup_by_uuid_args args;
+ remote_network_lookup_by_uuid_ret ret;
+
+ remoteDriverLock(priv);
+
+ memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NETWORK_LOOKUP_BY_UUID,
+ (xdrproc_t)xdr_remote_network_lookup_by_uuid_args, (char *)&args,
+ (xdrproc_t)xdr_remote_network_lookup_by_uuid_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_network(conn, ret.net);
+ xdr_free((xdrproc_t)xdr_remote_network_lookup_by_uuid_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNetworkSetAutostart(virNetworkPtr net, int autostart)
+{
+ int rv = -1;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_set_autostart_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+ args.autostart = autostart;
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_SET_AUTOSTART,
+ (xdrproc_t)xdr_remote_network_set_autostart_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNetworkUndefine(virNetworkPtr net)
+{
+ int rv = -1;
+ struct private_data *priv = net->conn->networkPrivateData;
+ remote_network_undefine_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_network(&args.net, net);
+
+ if (call(net->conn, priv, 0, REMOTE_PROC_NETWORK_UNDEFINE,
+ (xdrproc_t)xdr_remote_network_undefine_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNodeDevicePtr
+remoteNodeDeviceCreateXML(virConnectPtr conn, const char *xml_desc, unsigned int flags)
+{
+ virNodeDevicePtr rv = NULL;
+ struct private_data *priv = conn->devMonPrivateData;
+ remote_node_device_create_xml_args args;
+ remote_node_device_create_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml_desc = (char *)xml_desc;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NODE_DEVICE_CREATE_XML,
+ (xdrproc_t)xdr_remote_node_device_create_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_node_device_create_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_node_device(conn, ret.dev);
+ xdr_free((xdrproc_t)xdr_remote_node_device_create_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNodeDeviceDestroy(virNodeDevicePtr dev)
+{
+ int rv = -1;
+ struct private_data *priv = dev->conn->devMonPrivateData;
+ remote_node_device_destroy_args args;
+
+ remoteDriverLock(priv);
+
+ args.name = dev->name;
+
+ if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_DESTROY,
+ (xdrproc_t)xdr_remote_node_device_destroy_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchNodeDeviceDettach has to be implemented manually */
+
+static char *
+remoteNodeDeviceDumpXML(virNodeDevicePtr dev, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = dev->conn->devMonPrivateData;
+ remote_node_device_dump_xml_args args;
+ remote_node_device_dump_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = dev->name;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_DUMP_XML,
+ (xdrproc_t)xdr_remote_node_device_dump_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_node_device_dump_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchNodeDeviceGetParent has to be implemented manually */
+
+static int
+remoteNodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = dev->conn->devMonPrivateData;
+ remote_node_device_list_caps_args args;
+ remote_node_device_list_caps_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_NODE_DEVICE_CAPS_LIST_MAX);
+ goto done;
+ }
+
+ args.name = dev->name;
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_LIST_CAPS,
+ (xdrproc_t)xdr_remote_node_device_list_caps_args, (char *)&args,
+ (xdrproc_t)xdr_remote_node_device_list_caps_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_node_device_list_caps_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNodeDevicePtr
+remoteNodeDeviceLookupByName(virConnectPtr conn, const char *name)
+{
+ virNodeDevicePtr rv = NULL;
+ struct private_data *priv = conn->devMonPrivateData;
+ remote_node_device_lookup_by_name_args args;
+ remote_node_device_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = (char *)name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_node_device_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_node_device_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_node_device(conn, ret.dev);
+ xdr_free((xdrproc_t)xdr_remote_node_device_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNodeDeviceNumOfCaps(virNodeDevicePtr dev)
+{
+ int rv = -1;
+ struct private_data *priv = dev->conn->devMonPrivateData;
+ remote_node_device_num_of_caps_args args;
+ remote_node_device_num_of_caps_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = dev->name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(dev->conn, priv, 0, REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS,
+ (xdrproc_t)xdr_remote_node_device_num_of_caps_args, (char *)&args,
+ (xdrproc_t)xdr_remote_node_device_num_of_caps_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchNodeDeviceReAttach has to be implemented manually */
+
+/* remoteDispatchNodeDeviceReset has to be implemented manually */
+
+/* remoteDispatchNodeGetCellsFreeMemory has to be implemented manually */
+
+static unsigned long long
+remoteNodeGetFreeMemory(virConnectPtr conn)
+{
+ unsigned long long rv = 0;
+ struct private_data *priv = conn->privateData;
+ remote_node_get_free_memory_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NODE_GET_FREE_MEMORY,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_node_get_free_memory_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.freeMem;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNodeGetInfo(virConnectPtr conn, virNodeInfoPtr result)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_node_get_info_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NODE_GET_INFO,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_node_get_info_ret, (char *)&ret) == -1)
+ goto done;
+
+ memcpy(result->model, ret.model, sizeof result->model);
+ result->memory = ret.memory;
+ result->cpus = ret.cpus;
+ result->mhz = ret.mhz;
+ result->nodes = ret.nodes;
+ result->sockets = ret.sockets;
+ result->cores = ret.cores;
+ result->threads = ret.threads;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchNodeGetSecurityModel has to be implemented manually */
+
+static int
+remoteNodeListDevices(virConnectPtr conn, const char *cap, char **const names, int maxnames, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = conn->devMonPrivateData;
+ remote_node_list_devices_args args;
+ remote_node_list_devices_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_NODE_DEVICE_NAME_LIST_MAX);
+ goto done;
+ }
+
+ args.cap = cap ? (char **)&cap : NULL;
+ args.maxnames = maxnames;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NODE_LIST_DEVICES,
+ (xdrproc_t)xdr_remote_node_list_devices_args, (char *)&args,
+ (xdrproc_t)xdr_remote_node_list_devices_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_node_list_devices_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = conn->devMonPrivateData;
+ remote_node_num_of_devices_args args;
+ remote_node_num_of_devices_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.cap = cap ? (char **)&cap : NULL;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NODE_NUM_OF_DEVICES,
+ (xdrproc_t)xdr_remote_node_num_of_devices_args, (char *)&args,
+ (xdrproc_t)xdr_remote_node_num_of_devices_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfDefinedDomains(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_num_of_defined_domains_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_DOMAINS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_defined_domains_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfDefinedInterfaces(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->interfacePrivateData;
+ remote_num_of_defined_interfaces_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_INTERFACES,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_defined_interfaces_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfDefinedNetworks(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_num_of_defined_networks_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_NETWORKS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_defined_networks_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfDefinedStoragePools(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_num_of_defined_storage_pools_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DEFINED_STORAGE_POOLS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_defined_storage_pools_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfDomains(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->privateData;
+ remote_num_of_domains_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_DOMAINS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_domains_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfInterfaces(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->interfacePrivateData;
+ remote_num_of_interfaces_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_INTERFACES,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_interfaces_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfNetworks(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->networkPrivateData;
+ remote_num_of_networks_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_NETWORKS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_networks_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfNWFilters(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->nwfilterPrivateData;
+ remote_num_of_nwfilters_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_NWFILTERS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_nwfilters_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfSecrets(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->secretPrivateData;
+ remote_num_of_secrets_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_SECRETS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_secrets_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNumOfStoragePools(virConnectPtr conn)
+{
+ int rv = -1;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_num_of_storage_pools_ret ret;
+
+ remoteDriverLock(priv);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NUM_OF_STORAGE_POOLS,
+ (xdrproc_t)xdr_void, (char *)NULL,
+ (xdrproc_t)xdr_remote_num_of_storage_pools_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNWFilterPtr
+remoteNWFilterDefineXML(virConnectPtr conn, const char *xml, unsigned int flags ATTRIBUTE_UNUSED)
+{
+ virNWFilterPtr rv = NULL;
+ struct private_data *priv = conn->nwfilterPrivateData;
+ remote_nwfilter_define_xml_args args;
+ remote_nwfilter_define_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NWFILTER_DEFINE_XML,
+ (xdrproc_t)xdr_remote_nwfilter_define_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_nwfilter_define_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_nwfilter(conn, ret.nwfilter);
+ xdr_free((xdrproc_t)xdr_remote_nwfilter_define_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteNWFilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = nwfilter->conn->nwfilterPrivateData;
+ remote_nwfilter_get_xml_desc_args args;
+ remote_nwfilter_get_xml_desc_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_nwfilter(&args.nwfilter, nwfilter);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(nwfilter->conn, priv, 0, REMOTE_PROC_NWFILTER_GET_XML_DESC,
+ (xdrproc_t)xdr_remote_nwfilter_get_xml_desc_args, (char *)&args,
+ (xdrproc_t)xdr_remote_nwfilter_get_xml_desc_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNWFilterPtr
+remoteNWFilterLookupByName(virConnectPtr conn, const char *name)
+{
+ virNWFilterPtr rv = NULL;
+ struct private_data *priv = conn->nwfilterPrivateData;
+ remote_nwfilter_lookup_by_name_args args;
+ remote_nwfilter_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = (char *)name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NWFILTER_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_nwfilter_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_nwfilter_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_nwfilter(conn, ret.nwfilter);
+ xdr_free((xdrproc_t)xdr_remote_nwfilter_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virNWFilterPtr
+remoteNWFilterLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
+{
+ virNWFilterPtr rv = NULL;
+ struct private_data *priv = conn->nwfilterPrivateData;
+ remote_nwfilter_lookup_by_uuid_args args;
+ remote_nwfilter_lookup_by_uuid_ret ret;
+
+ remoteDriverLock(priv);
+
+ memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_NWFILTER_LOOKUP_BY_UUID,
+ (xdrproc_t)xdr_remote_nwfilter_lookup_by_uuid_args, (char *)&args,
+ (xdrproc_t)xdr_remote_nwfilter_lookup_by_uuid_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_nwfilter(conn, ret.nwfilter);
+ xdr_free((xdrproc_t)xdr_remote_nwfilter_lookup_by_uuid_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteNWFilterUndefine(virNWFilterPtr nwfilter)
+{
+ int rv = -1;
+ struct private_data *priv = nwfilter->conn->nwfilterPrivateData;
+ remote_nwfilter_undefine_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_nwfilter(&args.nwfilter, nwfilter);
+
+ if (call(nwfilter->conn, priv, 0, REMOTE_PROC_NWFILTER_UNDEFINE,
+ (xdrproc_t)xdr_remote_nwfilter_undefine_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchOpen has to be implemented manually */
+
+static virSecretPtr
+remoteSecretDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
+{
+ virSecretPtr rv = NULL;
+ struct private_data *priv = conn->secretPrivateData;
+ remote_secret_define_xml_args args;
+ remote_secret_define_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_SECRET_DEFINE_XML,
+ (xdrproc_t)xdr_remote_secret_define_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_secret_define_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_secret(conn, ret.secret);
+ xdr_free((xdrproc_t)xdr_remote_secret_define_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchSecretGetValue has to be implemented manually */
+
+static char *
+remoteSecretGetXMLDesc(virSecretPtr secret, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = secret->conn->secretPrivateData;
+ remote_secret_get_xml_desc_args args;
+ remote_secret_get_xml_desc_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_secret(&args.secret, secret);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(secret->conn, priv, 0, REMOTE_PROC_SECRET_GET_XML_DESC,
+ (xdrproc_t)xdr_remote_secret_get_xml_desc_args, (char *)&args,
+ (xdrproc_t)xdr_remote_secret_get_xml_desc_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virSecretPtr
+remoteSecretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID)
+{
+ virSecretPtr rv = NULL;
+ struct private_data *priv = conn->secretPrivateData;
+ remote_secret_lookup_by_usage_args args;
+ remote_secret_lookup_by_usage_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.usageType = usageType;
+ args.usageID = (char *)usageID;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_SECRET_LOOKUP_BY_USAGE,
+ (xdrproc_t)xdr_remote_secret_lookup_by_usage_args, (char *)&args,
+ (xdrproc_t)xdr_remote_secret_lookup_by_usage_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_secret(conn, ret.secret);
+ xdr_free((xdrproc_t)xdr_remote_secret_lookup_by_usage_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virSecretPtr
+remoteSecretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
+{
+ virSecretPtr rv = NULL;
+ struct private_data *priv = conn->secretPrivateData;
+ remote_secret_lookup_by_uuid_args args;
+ remote_secret_lookup_by_uuid_ret ret;
+
+ remoteDriverLock(priv);
+
+ memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_SECRET_LOOKUP_BY_UUID,
+ (xdrproc_t)xdr_remote_secret_lookup_by_uuid_args, (char *)&args,
+ (xdrproc_t)xdr_remote_secret_lookup_by_uuid_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_secret(conn, ret.secret);
+ xdr_free((xdrproc_t)xdr_remote_secret_lookup_by_uuid_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteSecretSetValue(virSecretPtr secret, const unsigned char *value, size_t valuelen, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = secret->conn->secretPrivateData;
+ remote_secret_set_value_args args;
+
+ remoteDriverLock(priv);
+
+ if (valuelen > REMOTE_SECRET_VALUE_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("%s length greater than maximum: %d > %d"),
+ "value", (int)valuelen, REMOTE_SECRET_VALUE_MAX);
+ goto done;
+ }
+
+ make_nonnull_secret(&args.secret, secret);
+ args.value.value_val = (char *)value;
+ args.value.value_len = valuelen;
+ args.flags = flags;
+
+ if (call(secret->conn, priv, 0, REMOTE_PROC_SECRET_SET_VALUE,
+ (xdrproc_t)xdr_remote_secret_set_value_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteSecretUndefine(virSecretPtr secret)
+{
+ int rv = -1;
+ struct private_data *priv = secret->conn->secretPrivateData;
+ remote_secret_undefine_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_secret(&args.secret, secret);
+
+ if (call(secret->conn, priv, 0, REMOTE_PROC_SECRET_UNDEFINE,
+ (xdrproc_t)xdr_remote_secret_undefine_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolBuild(virStoragePoolPtr pool, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_build_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.flags = flags;
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_BUILD,
+ (xdrproc_t)xdr_remote_storage_pool_build_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolCreate(virStoragePoolPtr pool, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_create_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.flags = flags;
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_CREATE,
+ (xdrproc_t)xdr_remote_storage_pool_create_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStoragePoolPtr
+remoteStoragePoolCreateXML(virConnectPtr conn, const char *xml, unsigned int flags)
+{
+ virStoragePoolPtr rv = NULL;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_storage_pool_create_xml_args args;
+ remote_storage_pool_create_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_CREATE_XML,
+ (xdrproc_t)xdr_remote_storage_pool_create_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_create_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_pool(conn, ret.pool);
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_create_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStoragePoolPtr
+remoteStoragePoolDefineXML(virConnectPtr conn, const char *xml, unsigned int flags)
+{
+ virStoragePoolPtr rv = NULL;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_storage_pool_define_xml_args args;
+ remote_storage_pool_define_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DEFINE_XML,
+ (xdrproc_t)xdr_remote_storage_pool_define_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_define_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_pool(conn, ret.pool);
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_define_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolDelete(virStoragePoolPtr pool, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_delete_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.flags = flags;
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DELETE,
+ (xdrproc_t)xdr_remote_storage_pool_delete_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolDestroy(virStoragePoolPtr pool)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_destroy_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DESTROY,
+ (xdrproc_t)xdr_remote_storage_pool_destroy_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteStoragePoolDumpXML(virStoragePoolPtr pool, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_dump_xml_args args;
+ remote_storage_pool_dump_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_DUMP_XML,
+ (xdrproc_t)xdr_remote_storage_pool_dump_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_dump_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolGetAutostart(virStoragePoolPtr pool, int *autostart)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_get_autostart_args args;
+ remote_storage_pool_get_autostart_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_GET_AUTOSTART,
+ (xdrproc_t)xdr_remote_storage_pool_get_autostart_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_get_autostart_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (autostart) *autostart = ret.autostart;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolGetInfo(virStoragePoolPtr pool, virStoragePoolInfoPtr result)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_get_info_args args;
+ remote_storage_pool_get_info_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_GET_INFO,
+ (xdrproc_t)xdr_remote_storage_pool_get_info_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_get_info_ret, (char *)&ret) == -1)
+ goto done;
+
+ result->state = ret.state;
+ result->capacity = ret.capacity;
+ result->allocation = ret.allocation;
+ result->available = ret.available;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolIsActive(virStoragePoolPtr pool)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_is_active_args args;
+ remote_storage_pool_is_active_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_IS_ACTIVE,
+ (xdrproc_t)xdr_remote_storage_pool_is_active_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_is_active_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.active;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolIsPersistent(virStoragePoolPtr pool)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_is_persistent_args args;
+ remote_storage_pool_is_persistent_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_IS_PERSISTENT,
+ (xdrproc_t)xdr_remote_storage_pool_is_persistent_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_is_persistent_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.persistent;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int maxnames)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_list_volumes_args args;
+ remote_storage_pool_list_volumes_ret ret;
+ int i;
+
+ remoteDriverLock(priv);
+
+ if (maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ maxnames, REMOTE_STORAGE_VOL_NAME_LIST_MAX);
+ goto done;
+ }
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.maxnames = maxnames;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LIST_VOLUMES,
+ (xdrproc_t)xdr_remote_storage_pool_list_volumes_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_list_volumes_ret, (char *)&ret) == -1)
+ goto done;
+
+ if (ret.names.names_len > maxnames) {
+ remoteError(VIR_ERR_RPC,
+ _("too many remote undefineds: %d > %d"),
+ ret.names.names_len, maxnames);
+ goto cleanup;
+ }
+
+ /* This call is caller-frees (although that isn't clear from
+ * the documentation). However xdr_free will free up both the
+ * names and the list of pointers, so we have to strdup the
+ * names here. */
+ for (i = 0; i < ret.names.names_len; ++i) {
+ names[i] = strdup(ret.names.names_val[i]);
+
+ if (names[i] == NULL) {
+ for (--i; i >= 0; --i)
+ VIR_FREE(names[i]);
+
+ virReportOOMError();
+ goto cleanup;
+ }
+ }
+
+ rv = ret.names.names_len;
+
+cleanup:
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_list_volumes_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStoragePoolPtr
+remoteStoragePoolLookupByName(virConnectPtr conn, const char *name)
+{
+ virStoragePoolPtr rv = NULL;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_storage_pool_lookup_by_name_args args;
+ remote_storage_pool_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.name = (char *)name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_storage_pool_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_pool(conn, ret.pool);
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStoragePoolPtr
+remoteStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
+{
+ virStoragePoolPtr rv = NULL;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_storage_pool_lookup_by_uuid_args args;
+ remote_storage_pool_lookup_by_uuid_ret ret;
+
+ remoteDriverLock(priv);
+
+ memcpy(args.uuid, uuid, VIR_UUID_BUFLEN);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_UUID,
+ (xdrproc_t)xdr_remote_storage_pool_lookup_by_uuid_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_lookup_by_uuid_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_pool(conn, ret.pool);
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_lookup_by_uuid_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStoragePoolPtr
+remoteStoragePoolLookupByVolume(virStorageVolPtr vol)
+{
+ virStoragePoolPtr rv = NULL;
+ struct private_data *priv = vol->conn->storagePrivateData;
+ remote_storage_pool_lookup_by_volume_args args;
+ remote_storage_pool_lookup_by_volume_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_vol(&args.vol, vol);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_VOLUME,
+ (xdrproc_t)xdr_remote_storage_pool_lookup_by_volume_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_lookup_by_volume_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_pool(vol->conn, ret.pool);
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_lookup_by_volume_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolNumOfVolumes(virStoragePoolPtr pool)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_num_of_volumes_args args;
+ remote_storage_pool_num_of_volumes_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_NUM_OF_VOLUMES,
+ (xdrproc_t)xdr_remote_storage_pool_num_of_volumes_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_pool_num_of_volumes_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.num;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolRefresh(virStoragePoolPtr pool, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_refresh_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.flags = flags;
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_REFRESH,
+ (xdrproc_t)xdr_remote_storage_pool_refresh_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolSetAutostart(virStoragePoolPtr pool, int autostart)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_set_autostart_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.autostart = autostart;
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_SET_AUTOSTART,
+ (xdrproc_t)xdr_remote_storage_pool_set_autostart_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStoragePoolUndefine(virStoragePoolPtr pool)
+{
+ int rv = -1;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_pool_undefine_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_POOL_UNDEFINE,
+ (xdrproc_t)xdr_remote_storage_pool_undefine_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStorageVolPtr
+remoteStorageVolCreateXML(virStoragePoolPtr pool, const char *xml, unsigned int flags)
+{
+ virStorageVolPtr rv = NULL;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_vol_create_xml_args args;
+ remote_storage_vol_create_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.xml = (char *)xml;
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_CREATE_XML,
+ (xdrproc_t)xdr_remote_storage_vol_create_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_create_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_vol(pool->conn, ret.vol);
+ xdr_free((xdrproc_t)xdr_remote_storage_vol_create_xml_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStorageVolPtr
+remoteStorageVolCreateXMLFrom(virStoragePoolPtr pool, const char *xml, virStorageVolPtr clonevol, unsigned int flags)
+{
+ virStorageVolPtr rv = NULL;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_vol_create_xml_from_args args;
+ remote_storage_vol_create_xml_from_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.xml = (char *)xml;
+ make_nonnull_storage_vol(&args.clonevol, clonevol);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_CREATE_XML_FROM,
+ (xdrproc_t)xdr_remote_storage_vol_create_xml_from_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_create_xml_from_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_vol(pool->conn, ret.vol);
+ xdr_free((xdrproc_t)xdr_remote_storage_vol_create_xml_from_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStorageVolDelete(virStorageVolPtr vol, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = vol->conn->storagePrivateData;
+ remote_storage_vol_delete_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_vol(&args.vol, vol);
+ args.flags = flags;
+
+ if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_DELETE,
+ (xdrproc_t)xdr_remote_storage_vol_delete_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchStorageVolDownload has to be implemented manually */
+
+static char *
+remoteStorageVolDumpXML(virStorageVolPtr vol, unsigned int flags)
+{
+ char *rv = NULL;
+ struct private_data *priv = vol->conn->storagePrivateData;
+ remote_storage_vol_dump_xml_args args;
+ remote_storage_vol_dump_xml_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_vol(&args.vol, vol);
+ args.flags = flags;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_DUMP_XML,
+ (xdrproc_t)xdr_remote_storage_vol_dump_xml_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_dump_xml_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.xml;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static int
+remoteStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr result)
+{
+ int rv = -1;
+ struct private_data *priv = vol->conn->storagePrivateData;
+ remote_storage_vol_get_info_args args;
+ remote_storage_vol_get_info_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_vol(&args.vol, vol);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_GET_INFO,
+ (xdrproc_t)xdr_remote_storage_vol_get_info_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_get_info_ret, (char *)&ret) == -1)
+ goto done;
+
+ result->type = ret.type;
+ result->capacity = ret.capacity;
+ result->allocation = ret.allocation;
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static char *
+remoteStorageVolGetPath(virStorageVolPtr vol)
+{
+ char *rv = NULL;
+ struct private_data *priv = vol->conn->storagePrivateData;
+ remote_storage_vol_get_path_args args;
+ remote_storage_vol_get_path_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_vol(&args.vol, vol);
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_GET_PATH,
+ (xdrproc_t)xdr_remote_storage_vol_get_path_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_get_path_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = ret.name;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStorageVolPtr
+remoteStorageVolLookupByKey(virConnectPtr conn, const char *key)
+{
+ virStorageVolPtr rv = NULL;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_storage_vol_lookup_by_key_args args;
+ remote_storage_vol_lookup_by_key_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.key = (char *)key;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_KEY,
+ (xdrproc_t)xdr_remote_storage_vol_lookup_by_key_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_lookup_by_key_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_vol(conn, ret.vol);
+ xdr_free((xdrproc_t)xdr_remote_storage_vol_lookup_by_key_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStorageVolPtr
+remoteStorageVolLookupByName(virStoragePoolPtr pool, const char *name)
+{
+ virStorageVolPtr rv = NULL;
+ struct private_data *priv = pool->conn->storagePrivateData;
+ remote_storage_vol_lookup_by_name_args args;
+ remote_storage_vol_lookup_by_name_ret ret;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_pool(&args.pool, pool);
+ args.name = (char *)name;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(pool->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_NAME,
+ (xdrproc_t)xdr_remote_storage_vol_lookup_by_name_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_lookup_by_name_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_vol(pool->conn, ret.vol);
+ xdr_free((xdrproc_t)xdr_remote_storage_vol_lookup_by_name_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+static virStorageVolPtr
+remoteStorageVolLookupByPath(virConnectPtr conn, const char *path)
+{
+ virStorageVolPtr rv = NULL;
+ struct private_data *priv = conn->storagePrivateData;
+ remote_storage_vol_lookup_by_path_args args;
+ remote_storage_vol_lookup_by_path_ret ret;
+
+ remoteDriverLock(priv);
+
+ args.path = (char *)path;
+
+ memset(&ret, 0, sizeof ret);
+
+ if (call(conn, priv, 0, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH,
+ (xdrproc_t)xdr_remote_storage_vol_lookup_by_path_args, (char *)&args,
+ (xdrproc_t)xdr_remote_storage_vol_lookup_by_path_ret, (char *)&ret) == -1)
+ goto done;
+
+ rv = get_nonnull_storage_vol(conn, ret.vol);
+ xdr_free((xdrproc_t)xdr_remote_storage_vol_lookup_by_path_ret, (char *)&ret);
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchStorageVolUpload has to be implemented manually */
+
+static int
+remoteStorageVolWipe(virStorageVolPtr vol, unsigned int flags)
+{
+ int rv = -1;
+ struct private_data *priv = vol->conn->storagePrivateData;
+ remote_storage_vol_wipe_args args;
+
+ remoteDriverLock(priv);
+
+ make_nonnull_storage_vol(&args.vol, vol);
+ args.flags = flags;
+
+ if (call(vol->conn, priv, 0, REMOTE_PROC_STORAGE_VOL_WIPE,
+ (xdrproc_t)xdr_remote_storage_vol_wipe_args, (char *)&args,
+ (xdrproc_t)xdr_void, (char *)NULL) == -1)
+ goto done;
+
+ rv = 0;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
+/* remoteDispatchSupportsFeature has to be implemented manually */
return rv;
}
-#include "remote_client_bodies.c"
-#include "qemu_client_bodies.c"
+#include "remote_client_bodies.h"
+#include "qemu_client_bodies.h"
/*----------------------------------------------------------------------*/