]> xenbits.xensource.com Git - libvirt.git/commitdiff
build: rename generated files to .h, for automake's sake
authorEric Blake <eblake@redhat.com>
Fri, 6 May 2011 19:54:32 +0000 (13:54 -0600)
committerEric Blake <eblake@redhat.com>
Fri, 6 May 2011 21:11:36 +0000 (15:11 -0600)
In preparation for removing generated files, it is necessary
to tell automake that the generated files must be distributed
but not directly compiled (since they are included into the
body of a larger .c file that is compiled).  Hence, even though
these files are code and not headers in the strict sense of
the word, it is easier to rename them to .h for automake's sake.

* daemon/remote_client_bodies.c: Rename to .h.
* daemon/qemu_client_bodies.c: Likewise.
* src/remote/remote_client_bodies.c: Likewise.
* src/remote/qemu_client_bodies.c: Likewise.
* daemon/Makefile.am (remote_dispatch_bodies.c)
(qemu_dispatch_bodies.c): Rename to .h.
(remote.c, EXTRA_DIST): Reflect rename.
* daemon/remote.c: Likewise.
* daemon/remote_generator.pl: Likewise.
* src/Makefile.am (remote/remote_driver.c): Likewise.
* src/remote/remote_driver.c: Likewise.
* po/POTFILES.in: Likewise.
* cfg.mk (exclude_file_name_regexp--sc_require_config_h)
(exclude_file_name_regexp--sc_require_config_h_first)
(exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF):
Likewise.

15 files changed:
cfg.mk
daemon/Makefile.am
daemon/qemu_dispatch_bodies.c [deleted file]
daemon/qemu_dispatch_bodies.h [new file with mode: 0644]
daemon/remote.c
daemon/remote_dispatch_bodies.c [deleted file]
daemon/remote_dispatch_bodies.h [new file with mode: 0644]
daemon/remote_generator.pl
po/POTFILES.in
src/Makefile.am
src/remote/qemu_client_bodies.c [deleted file]
src/remote/qemu_client_bodies.h [new file with mode: 0644]
src/remote/remote_client_bodies.c [deleted file]
src/remote/remote_client_bodies.h [new file with mode: 0644]
src/remote/remote_driver.c

diff --git a/cfg.mk b/cfg.mk
index d80f3d50fc1352e176c7711c060c2ebd8f1a2ea5..27ed9290ca149bbd78ded8fd20113984debe063a 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -614,7 +614,7 @@ exclude_file_name_regexp--sc_prohibit_close = \
 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 = \
@@ -639,11 +639,9 @@ exclude_file_name_regexp--sc_prohibit_strncpy = \
 
 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)$$)
 
index 3dec18366023bcaf3dde38811b57303940ed8ac6..c6f4d29096bd75ba03796b2eff1625d1c5e0d4e0 100644 (file)
@@ -24,8 +24,8 @@ AVAHI_SOURCES =                                               \
 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                                \
@@ -206,10 +206,10 @@ endif
 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 \
@@ -232,7 +232,7 @@ remote_dispatch_args.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL)
 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)
@@ -247,7 +247,7 @@ qemu_dispatch_args.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 \
diff --git a/daemon/qemu_dispatch_bodies.c b/daemon/qemu_dispatch_bodies.c
deleted file mode 100644 (file)
index 8f5bed6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Automatically generated by remote_generator.pl.
- * Do not edit this file.  Any changes you make will be lost.
- */
-
-/* qemuDispatchMonitorCommand has to be implemented manually */
diff --git a/daemon/qemu_dispatch_bodies.h b/daemon/qemu_dispatch_bodies.h
new file mode 100644 (file)
index 0000000..8f5bed6
--- /dev/null
@@ -0,0 +1,5 @@
+/* Automatically generated by remote_generator.pl.
+ * Do not edit this file.  Any changes you make will be lost.
+ */
+
+/* qemuDispatchMonitorCommand has to be implemented manually */
index 883f18188ac4e6577f944d1e4a702bcfb5049195..2220655cb039979474153c57ca7da10c2a019e5b 100644 (file)
@@ -2985,8 +2985,8 @@ cleanup:
     return rv;
 }
 
-#include "remote_dispatch_bodies.c"
-#include "qemu_dispatch_bodies.c"
+#include "remote_dispatch_bodies.h"
+#include "qemu_dispatch_bodies.h"
 
 
 /*----- Helpers. -----*/
diff --git a/daemon/remote_dispatch_bodies.c b/daemon/remote_dispatch_bodies.c
deleted file mode 100644 (file)
index 702a8bd..0000000
+++ /dev/null
@@ -1,5932 +0,0 @@
-/* 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;
-}
diff --git a/daemon/remote_dispatch_bodies.h b/daemon/remote_dispatch_bodies.h
new file mode 100644 (file)
index 0000000..702a8bd
--- /dev/null
@@ -0,0 +1,5932 @@
+/* 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;
+}
index bb1978f44ff4e1d0489c7293f9d3f6bdb29f1fce..062ccc15ce416025ffd694a2379b732abfbdc496 100755 (executable)
@@ -236,7 +236,7 @@ elsif ($opt_t) {
     }
 }
 
-# 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;
@@ -726,7 +726,7 @@ elsif ($opt_b) {
     }
 }
 
-# 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;
index 8ecb6a0bed30d49d2b5ffc1b91affef5c1345b51..7f5156c0caadfc6fa212e09132717b47d6c0b141 100644 (file)
@@ -2,7 +2,7 @@ daemon/dispatch.c
 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
@@ -64,7 +64,7 @@ src/qemu/qemu_monitor.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
index 8ba176d320c45ab9b70b77ee475c131b948a8d14..962c6f93491f277c3932c8e4ca650de1e5a6d4f4 100644 (file)
@@ -162,19 +162,19 @@ REMOTE_DRIVER_SOURCES =                                           \
                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
diff --git a/src/remote/qemu_client_bodies.c b/src/remote/qemu_client_bodies.c
deleted file mode 100644 (file)
index 3ca2a91..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Automatically generated by remote_generator.pl.
- * Do not edit this file.  Any changes you make will be lost.
- */
diff --git a/src/remote/qemu_client_bodies.h b/src/remote/qemu_client_bodies.h
new file mode 100644 (file)
index 0000000..3ca2a91
--- /dev/null
@@ -0,0 +1,3 @@
+/* Automatically generated by remote_generator.pl.
+ * Do not edit this file.  Any changes you make will be lost.
+ */
diff --git a/src/remote/remote_client_bodies.c b/src/remote/remote_client_bodies.c
deleted file mode 100644 (file)
index 6b6f98d..0000000
+++ /dev/null
@@ -1,4663 +0,0 @@
-/* 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 */
diff --git a/src/remote/remote_client_bodies.h b/src/remote/remote_client_bodies.h
new file mode 100644 (file)
index 0000000..6b6f98d
--- /dev/null
@@ -0,0 +1,4663 @@
+/* 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 */
index 4dfeab6d1dc5aa8c5e9053e966fe4e60d0853fa7..d076a90087c9056f7cb16dc871068fd6fc988b14 100644 (file)
@@ -4962,8 +4962,8 @@ done:
     return rv;
 }
 
-#include "remote_client_bodies.c"
-#include "qemu_client_bodies.c"
+#include "remote_client_bodies.h"
+#include "qemu_client_bodies.h"
 
 /*----------------------------------------------------------------------*/