[libvirt] PATCH: 2/5: Remote driver / daemon implementation

Daniel P. Berrange berrange at redhat.com
Wed May 13 14:36:22 UTC 2009


This patch wires up the new APIs to the remote driver and 
libvirtd daemon.


 qemud/remote.c                     |   41 ++++++++++++++++++++++
 qemud/remote_dispatch_args.h       |    2 +
 qemud/remote_dispatch_prototypes.h |   14 +++++++
 qemud/remote_dispatch_ret.h        |    2 +
 qemud/remote_dispatch_table.h      |   10 +++++
 qemud/remote_protocol.c            |   44 ++++++++++++++++++++++++
 qemud/remote_protocol.h            |   34 +++++++++++++++++++
 qemud/remote_protocol.x            |   27 ++++++++++++++-
 src/remote_internal.c              |   66 +++++++++++++++++++++++++++++++++++--
 src/virsh.c                        |    4 +-
 10 files changed, 239 insertions(+), 5 deletions(-)

Daniel


diff -r 4f46dfd24fdb qemud/remote.c
--- a/qemud/remote.c	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote.c	Wed May 13 10:00:22 2009 -0400
@@ -1236,6 +1236,47 @@ remoteDispatchDomainDumpXml (struct qemu
 }
 
 static int
+remoteDispatchDomainXmlFromNative (struct qemud_server *server ATTRIBUTE_UNUSED,
+                                   struct qemud_client *client ATTRIBUTE_UNUSED,
+                                   virConnectPtr conn,
+                                   remote_error *rerr,
+                                   remote_domain_xml_from_native_args *args,
+                                   remote_domain_xml_from_native_ret *ret)
+{
+    /* remoteDispatchClientRequest will free this. */
+    ret->domainXml = virConnectDomainXMLFromNative (conn,
+                                                    args->nativeFormat,
+                                                    args->nativeConfig,
+                                                    args->flags);
+    if (!ret->domainXml) {
+        remoteDispatchConnError(rerr, conn);
+        return -1;
+    }
+    return 0;
+}
+
+static int
+remoteDispatchDomainXmlToNative (struct qemud_server *server ATTRIBUTE_UNUSED,
+                                 struct qemud_client *client ATTRIBUTE_UNUSED,
+                                 virConnectPtr conn,
+                                 remote_error *rerr,
+                                 remote_domain_xml_to_native_args *args,
+                                 remote_domain_xml_to_native_ret *ret)
+{
+    /* remoteDispatchClientRequest will free this. */
+    ret->nativeConfig = virConnectDomainXMLToNative (conn,
+                                                     args->nativeFormat,
+                                                     args->domainXml,
+                                                     args->flags);
+    if (!ret->nativeConfig) {
+        remoteDispatchConnError(rerr, conn);
+        return -1;
+    }
+    return 0;
+}
+
+
+static int
 remoteDispatchDomainGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED,
                                   struct qemud_client *client ATTRIBUTE_UNUSED,
                                   virConnectPtr conn,
diff -r 4f46dfd24fdb qemud/remote_dispatch_args.h
--- a/qemud/remote_dispatch_args.h	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote_dispatch_args.h	Wed May 13 10:02:06 2009 -0400
@@ -106,3 +106,5 @@
     remote_node_device_create_xml_args val_remote_node_device_create_xml_args;
     remote_node_device_destroy_args val_remote_node_device_destroy_args;
     remote_storage_vol_create_xml_from_args val_remote_storage_vol_create_xml_from_args;
+    remote_domain_xml_from_native_args val_remote_domain_xml_from_native_args;
+    remote_domain_xml_to_native_args val_remote_domain_xml_to_native_args;
diff -r 4f46dfd24fdb qemud/remote_dispatch_prototypes.h
--- a/qemud/remote_dispatch_prototypes.h	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote_dispatch_prototypes.h	Wed May 13 10:02:06 2009 -0400
@@ -359,6 +359,20 @@ static int remoteDispatchDomainUndefine(
     remote_error *err,
     remote_domain_undefine_args *args,
     void *ret);
+static int remoteDispatchDomainXmlFromNative(
+    struct qemud_server *server,
+    struct qemud_client *client,
+    virConnectPtr conn,
+    remote_error *err,
+    remote_domain_xml_from_native_args *args,
+    remote_domain_xml_from_native_ret *ret);
+static int remoteDispatchDomainXmlToNative(
+    struct qemud_server *server,
+    struct qemud_client *client,
+    virConnectPtr conn,
+    remote_error *err,
+    remote_domain_xml_to_native_args *args,
+    remote_domain_xml_to_native_ret *ret);
 static int remoteDispatchFindStoragePoolSources(
     struct qemud_server *server,
     struct qemud_client *client,
diff -r 4f46dfd24fdb qemud/remote_dispatch_ret.h
--- a/qemud/remote_dispatch_ret.h	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote_dispatch_ret.h	Wed May 13 10:02:06 2009 -0400
@@ -90,3 +90,5 @@
     remote_node_get_security_model_ret val_remote_node_get_security_model_ret;
     remote_node_device_create_xml_ret val_remote_node_device_create_xml_ret;
     remote_storage_vol_create_xml_from_ret val_remote_storage_vol_create_xml_from_ret;
+    remote_domain_xml_from_native_ret val_remote_domain_xml_from_native_ret;
+    remote_domain_xml_to_native_ret val_remote_domain_xml_to_native_ret;
diff -r 4f46dfd24fdb qemud/remote_dispatch_table.h
--- a/qemud/remote_dispatch_table.h	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote_dispatch_table.h	Wed May 13 10:02:06 2009 -0400
@@ -632,3 +632,13 @@
     .args_filter = (xdrproc_t) xdr_remote_storage_vol_create_xml_from_args,
     .ret_filter = (xdrproc_t) xdr_remote_storage_vol_create_xml_from_ret,
 },
+{   /* DomainXmlFromNative => 126 */
+    .fn = (dispatch_fn) remoteDispatchDomainXmlFromNative,
+    .args_filter = (xdrproc_t) xdr_remote_domain_xml_from_native_args,
+    .ret_filter = (xdrproc_t) xdr_remote_domain_xml_from_native_ret,
+},
+{   /* DomainXmlToNative => 127 */
+    .fn = (dispatch_fn) remoteDispatchDomainXmlToNative,
+    .args_filter = (xdrproc_t) xdr_remote_domain_xml_to_native_args,
+    .ret_filter = (xdrproc_t) xdr_remote_domain_xml_to_native_ret,
+},
diff -r 4f46dfd24fdb qemud/remote_protocol.c
--- a/qemud/remote_protocol.c	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote_protocol.c	Wed May 13 09:57:11 2009 -0400
@@ -2314,6 +2314,50 @@ xdr_remote_domain_event_ret (XDR *xdrs, 
 }
 
 bool_t
+xdr_remote_domain_xml_from_native_args (XDR *xdrs, remote_domain_xml_from_native_args *objp)
+{
+
+         if (!xdr_remote_nonnull_string (xdrs, &objp->nativeFormat))
+                 return FALSE;
+         if (!xdr_remote_nonnull_string (xdrs, &objp->nativeConfig))
+                 return FALSE;
+         if (!xdr_u_int (xdrs, &objp->flags))
+                 return FALSE;
+        return TRUE;
+}
+
+bool_t
+xdr_remote_domain_xml_from_native_ret (XDR *xdrs, remote_domain_xml_from_native_ret *objp)
+{
+
+         if (!xdr_remote_nonnull_string (xdrs, &objp->domainXml))
+                 return FALSE;
+        return TRUE;
+}
+
+bool_t
+xdr_remote_domain_xml_to_native_args (XDR *xdrs, remote_domain_xml_to_native_args *objp)
+{
+
+         if (!xdr_remote_nonnull_string (xdrs, &objp->nativeFormat))
+                 return FALSE;
+         if (!xdr_remote_nonnull_string (xdrs, &objp->domainXml))
+                 return FALSE;
+         if (!xdr_u_int (xdrs, &objp->flags))
+                 return FALSE;
+        return TRUE;
+}
+
+bool_t
+xdr_remote_domain_xml_to_native_ret (XDR *xdrs, remote_domain_xml_to_native_ret *objp)
+{
+
+         if (!xdr_remote_nonnull_string (xdrs, &objp->nativeConfig))
+                 return FALSE;
+        return TRUE;
+}
+
+bool_t
 xdr_remote_procedure (XDR *xdrs, remote_procedure *objp)
 {
 
diff -r 4f46dfd24fdb qemud/remote_protocol.h
--- a/qemud/remote_protocol.h	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote_protocol.h	Wed May 13 09:57:11 2009 -0400
@@ -1300,6 +1300,30 @@ struct remote_domain_event_ret {
         int detail;
 };
 typedef struct remote_domain_event_ret remote_domain_event_ret;
+
+struct remote_domain_xml_from_native_args {
+        remote_nonnull_string nativeFormat;
+        remote_nonnull_string nativeConfig;
+        u_int flags;
+};
+typedef struct remote_domain_xml_from_native_args remote_domain_xml_from_native_args;
+
+struct remote_domain_xml_from_native_ret {
+        remote_nonnull_string domainXml;
+};
+typedef struct remote_domain_xml_from_native_ret remote_domain_xml_from_native_ret;
+
+struct remote_domain_xml_to_native_args {
+        remote_nonnull_string nativeFormat;
+        remote_nonnull_string domainXml;
+        u_int flags;
+};
+typedef struct remote_domain_xml_to_native_args remote_domain_xml_to_native_args;
+
+struct remote_domain_xml_to_native_ret {
+        remote_nonnull_string nativeConfig;
+};
+typedef struct remote_domain_xml_to_native_ret remote_domain_xml_to_native_ret;
 #define REMOTE_PROGRAM 0x20008086
 #define REMOTE_PROTOCOL_VERSION 1
 
@@ -1429,6 +1453,8 @@ enum remote_procedure {
         REMOTE_PROC_NODE_DEVICE_CREATE_XML = 123,
         REMOTE_PROC_NODE_DEVICE_DESTROY = 124,
         REMOTE_PROC_STORAGE_VOL_CREATE_XML_FROM = 125,
+        REMOTE_PROC_DOMAIN_XML_FROM_NATIVE = 125,
+        REMOTE_PROC_DOMAIN_XML_TO_NATIVE = 126,
 };
 typedef enum remote_procedure remote_procedure;
 
@@ -1669,6 +1695,10 @@ extern  bool_t xdr_remote_domain_events_
 extern  bool_t xdr_remote_domain_events_register_ret (XDR *, remote_domain_events_register_ret*);
 extern  bool_t xdr_remote_domain_events_deregister_ret (XDR *, remote_domain_events_deregister_ret*);
 extern  bool_t xdr_remote_domain_event_ret (XDR *, remote_domain_event_ret*);
+extern  bool_t xdr_remote_domain_xml_from_native_args (XDR *, remote_domain_xml_from_native_args*);
+extern  bool_t xdr_remote_domain_xml_from_native_ret (XDR *, remote_domain_xml_from_native_ret*);
+extern  bool_t xdr_remote_domain_xml_to_native_args (XDR *, remote_domain_xml_to_native_args*);
+extern  bool_t xdr_remote_domain_xml_to_native_ret (XDR *, remote_domain_xml_to_native_ret*);
 extern  bool_t xdr_remote_procedure (XDR *, remote_procedure*);
 extern  bool_t xdr_remote_message_direction (XDR *, remote_message_direction*);
 extern  bool_t xdr_remote_message_status (XDR *, remote_message_status*);
@@ -1885,6 +1915,10 @@ extern bool_t xdr_remote_domain_events_r
 extern bool_t xdr_remote_domain_events_register_ret ();
 extern bool_t xdr_remote_domain_events_deregister_ret ();
 extern bool_t xdr_remote_domain_event_ret ();
+extern bool_t xdr_remote_domain_xml_from_native_args ();
+extern bool_t xdr_remote_domain_xml_from_native_ret ();
+extern bool_t xdr_remote_domain_xml_to_native_args ();
+extern bool_t xdr_remote_domain_xml_to_native_ret ();
 extern bool_t xdr_remote_procedure ();
 extern bool_t xdr_remote_message_direction ();
 extern bool_t xdr_remote_message_status ();
diff -r 4f46dfd24fdb qemud/remote_protocol.x
--- a/qemud/remote_protocol.x	Wed May 13 09:54:09 2009 -0400
+++ b/qemud/remote_protocol.x	Wed May 13 10:02:03 2009 -0400
@@ -1154,6 +1154,29 @@ struct remote_domain_event_ret {
     int detail;
 };
 
+
+struct remote_domain_xml_from_native_args {
+    remote_nonnull_string nativeFormat;
+    remote_nonnull_string nativeConfig;
+    unsigned flags;
+};
+
+struct remote_domain_xml_from_native_ret {
+    remote_nonnull_string domainXml;
+};
+
+
+struct remote_domain_xml_to_native_args {
+    remote_nonnull_string nativeFormat;
+    remote_nonnull_string domainXml;
+    unsigned flags;
+};
+
+struct remote_domain_xml_to_native_ret {
+    remote_nonnull_string nativeConfig;
+};
+
+
 /*----- Protocol. -----*/
 
 /* Define the program number, protocol version and procedure numbers here. */
@@ -1299,7 +1322,9 @@ enum remote_procedure {
     REMOTE_PROC_NODE_DEVICE_CREATE_XML = 123,
     REMOTE_PROC_NODE_DEVICE_DESTROY = 124,
 
-    REMOTE_PROC_STORAGE_VOL_CREATE_XML_FROM = 125
+    REMOTE_PROC_STORAGE_VOL_CREATE_XML_FROM = 125,
+    REMOTE_PROC_DOMAIN_XML_FROM_NATIVE = 126,
+    REMOTE_PROC_DOMAIN_XML_TO_NATIVE = 127
 };
 
 /* Custom RPC structure. */
diff -r 4f46dfd24fdb src/remote_internal.c
--- a/src/remote_internal.c	Wed May 13 09:54:09 2009 -0400
+++ b/src/remote_internal.c	Wed May 13 09:54:10 2009 -0400
@@ -2395,6 +2395,68 @@ remoteDomainDumpXML (virDomainPtr domain
 
     /* Caller frees. */
     rv = ret.xml;
+
+done:
+    remoteDriverUnlock(priv);
+    return rv;
+}
+
+static char *
+remoteDomainXMLFromNative (virConnectPtr conn,
+                           const char *format,
+                           const char *config,
+                           unsigned int flags)
+{
+    char *rv = NULL;
+    remote_domain_xml_from_native_args args;
+    remote_domain_xml_from_native_ret ret;
+    struct private_data *priv = conn->privateData;
+
+    remoteDriverLock(priv);
+
+    args.nativeFormat = (char *)format;
+    args.nativeConfig = (char *)config;
+    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;
+
+    /* Caller frees. */
+    rv = ret.domainXml;
+
+done:
+    remoteDriverUnlock(priv);
+    return rv;
+}
+
+static char *
+remoteDomainXMLToNative (virConnectPtr conn,
+                         const char *format,
+                         const char *xml,
+                         unsigned int flags)
+{
+    char *rv = NULL;
+    remote_domain_xml_to_native_args args;
+    remote_domain_xml_to_native_ret ret;
+    struct private_data *priv = conn->privateData;
+
+    remoteDriverLock(priv);
+
+    args.nativeFormat = (char *)format;
+    args.domainXml = (char *)xml;
+    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;
+
+    /* Caller frees. */
+    rv = ret.nativeConfig;
 
 done:
     remoteDriverUnlock(priv);
@@ -6968,8 +7030,8 @@ static virDriver driver = {
     remoteDomainGetSecurityLabel, /* domainGetSecurityLabel */
     remoteNodeGetSecurityModel, /* nodeGetSecurityModel */
     remoteDomainDumpXML, /* domainDumpXML */
-    NULL, /* domainXmlFromNative */
-    NULL, /* domainXmlToNative */
+    remoteDomainXMLFromNative, /* domainXMLFromNative */
+    remoteDomainXMLToNative, /* domainXMLToNative */
     remoteListDefinedDomains, /* listDefinedDomains */
     remoteNumOfDefinedDomains, /* numOfDefinedDomains */
     remoteDomainCreate, /* domainCreate */
diff -r 4f46dfd24fdb src/virsh.c
--- a/src/virsh.c	Wed May 13 09:54:09 2009 -0400
+++ b/src/virsh.c	Wed May 13 09:54:10 2009 -0400
@@ -4189,8 +4189,8 @@ makeCloneXML(char *origxml, char *newnam
 makeCloneXML(char *origxml, char *newname) {
 
     xmlDocPtr doc;
-    xmlXPathContextPtr ctxt;
-    xmlXPathObjectPtr obj;
+    xmlXPathContextPtr ctxt = NULL;
+    xmlXPathObjectPtr obj = NULL;
     xmlChar *newxml = NULL;
     int size;
 


-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list