]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
implement the remote protocol
authorOsier Yang <jyang@redhat.com>
Mon, 15 Nov 2010 03:23:34 +0000 (11:23 +0800)
committerEric Blake <eblake@redhat.com>
Tue, 23 Nov 2010 22:04:42 +0000 (15:04 -0700)
* daemon/remote.c
* daemon/remote_dispatch_args.h
* daemon/remote_dispatch_prototypes.h
* daemon/remote_dispatch_ret.h
* daemon/remote_dispatch_table.h
* src/remote/remote_driver.c
* src/remote/remote_protocol.c
* src/remote/remote_protocol.h
* src/remote/remote_protocol.x
* src/remote_protocol-structs

daemon/remote.c
daemon/remote_dispatch_args.h
daemon/remote_dispatch_prototypes.h
daemon/remote_dispatch_ret.h
daemon/remote_dispatch_table.h
src/remote/remote_driver.c
src/remote/remote_protocol.c
src/remote/remote_protocol.h
src/remote/remote_protocol.x
src/remote_protocol-structs

index 16608156d925f5363639237c83509ef8853a92ab..9dba3255c2c6bccff4dc62367b3c3e8d461c4384 100644 (file)
@@ -5965,6 +5965,34 @@ static int remoteDispatchDomainIsPersistent(struct qemud_server *server ATTRIBUT
     return 0;
 }
 
+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 *err,
+                                            remote_domain_is_updated_args *args,
+                                            remote_domain_is_updated_ret *ret)
+{
+    virDomainPtr domain;
+
+    domain = get_nonnull_domain(conn, args->dom);
+    if (domain == NULL) {
+        remoteDispatchConnError(err, conn);
+        return -1;
+    }
+
+    ret->updated = virDomainIsUpdated(domain);
+
+    if (ret->updated < 0) {
+        virDomainFree(domain);
+        remoteDispatchConnError(err, conn);
+        return -1;
+    }
+
+    virDomainFree(domain);
+    return 0;
+}
+
 static int remoteDispatchInterfaceIsActive(struct qemud_server *server ATTRIBUTE_UNUSED,
                                            struct qemud_client *client ATTRIBUTE_UNUSED,
                                            virConnectPtr conn,
index 971af8000836632db7df0e59780d36a94a4f2414..221af88d9b8c890d49e615025fb985d9ba4102aa 100644 (file)
     remote_domain_set_vcpus_flags_args val_remote_domain_set_vcpus_flags_args;
     remote_domain_get_vcpus_flags_args val_remote_domain_get_vcpus_flags_args;
     remote_domain_open_console_args val_remote_domain_open_console_args;
+    remote_domain_is_updated_args val_remote_domain_is_updated_args;
index 15c7ec792eb459c382b36a9958a074847c7dffdd..4a5246f28af7dd94374cca8d2483c5a4a8ce26ed 100644 (file)
@@ -354,6 +354,14 @@ static int remoteDispatchDomainIsPersistent(
     remote_error *err,
     remote_domain_is_persistent_args *args,
     remote_domain_is_persistent_ret *ret);
+static int remoteDispatchDomainIsUpdated(
+    struct qemud_server *server,
+    struct qemud_client *client,
+    virConnectPtr conn,
+    remote_message_header *hdr,
+    remote_error *err,
+    remote_domain_is_updated_args *args,
+    remote_domain_is_updated_ret *ret);
 static int remoteDispatchDomainLookupById(
     struct qemud_server *server,
     struct qemud_client *client,
index 3723b003e33884411117a4c6a466ce66221001ec..c01f3ba34f4186643ee2ff0dd6935e4c2fc14db2 100644 (file)
     remote_domain_create_with_flags_ret val_remote_domain_create_with_flags_ret;
     remote_domain_get_memory_parameters_ret val_remote_domain_get_memory_parameters_ret;
     remote_domain_get_vcpus_flags_ret val_remote_domain_get_vcpus_flags_ret;
+    remote_domain_is_updated_ret val_remote_domain_is_updated_ret;
index 4cfa1b1540d9467ee9a86d0390518e698bd5de88..3e55424f5638d9aff39c8fd892492c0fd8e1d7f6 100644 (file)
     .args_filter = (xdrproc_t) xdr_remote_domain_open_console_args,
     .ret_filter = (xdrproc_t) xdr_void,
 },
+{   /* DomainIsUpdated => 202 */
+    .fn = (dispatch_fn) remoteDispatchDomainIsUpdated,
+    .args_filter = (xdrproc_t) xdr_remote_domain_is_updated_args,
+    .ret_filter = (xdrproc_t) xdr_remote_domain_is_updated_ret,
+},
index 73a0132cd4455962033c35a39a1e4dbafd434fa1..e6eb9b5d41f6bf761d8f1bf539b3fa89a901624e 100644 (file)
@@ -1983,6 +1983,30 @@ done:
     return rv;
 }
 
+static int
+remoteDomainIsUpdated(virDomainPtr domain)
+{
+    int rv = -1;
+    remote_domain_is_updated_args args;
+    remote_domain_is_updated_ret ret;
+    struct private_data *priv = domain->conn->privateData;
+
+    remoteDriverLock(priv);
+
+    make_nonnull_domain (&args.dom, domain);
+
+    if (call (domain->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
 remoteDomainCreateXML (virConnectPtr conn,
                          const char *xmlDesc,
@@ -10734,7 +10758,7 @@ static virDriver remote_driver = {
     remoteIsSecure, /* isSecure */
     remoteDomainIsActive, /* domainIsActive */
     remoteDomainIsPersistent, /* domainIsPersistent */
-    NULL, /* domainIsUpdated */
+    remoteDomainIsUpdated, /* domainIsUpdated */
     remoteCPUCompare, /* cpuCompare */
     remoteCPUBaseline, /* cpuBaseline */
     remoteDomainGetJobInfo, /* domainGetJobInfo */
index 41f5e7d7fb5ae62875bf827811b4733a63aba90e..6e07b70cbe8f9b0cacf7009d9dc7fa2b0884a790 100644 (file)
@@ -3176,6 +3176,24 @@ xdr_remote_domain_is_persistent_ret (XDR *xdrs, remote_domain_is_persistent_ret
         return TRUE;
 }
 
+bool_t
+xdr_remote_domain_is_updated_args (XDR *xdrs, remote_domain_is_updated_args *objp)
+{
+
+         if (!xdr_remote_nonnull_domain (xdrs, &objp->dom))
+                 return FALSE;
+        return TRUE;
+}
+
+bool_t
+xdr_remote_domain_is_updated_ret (XDR *xdrs, remote_domain_is_updated_ret *objp)
+{
+
+         if (!xdr_int (xdrs, &objp->updated))
+                 return FALSE;
+        return TRUE;
+}
+
 bool_t
 xdr_remote_network_is_active_args (XDR *xdrs, remote_network_is_active_args *objp)
 {
index 8dc89a50fd9713c29c24436596718792c1772403..4240963ca6645affcf5815abd0400161087af5d5 100644 (file)
@@ -1801,6 +1801,16 @@ struct remote_domain_is_persistent_ret {
 };
 typedef struct remote_domain_is_persistent_ret remote_domain_is_persistent_ret;
 
+struct remote_domain_is_updated_args {
+        remote_nonnull_domain dom;
+};
+typedef struct remote_domain_is_updated_args remote_domain_is_updated_args;
+
+struct remote_domain_is_updated_ret {
+        int updated;
+};
+typedef struct remote_domain_is_updated_ret remote_domain_is_updated_ret;
+
 struct remote_network_is_active_args {
         remote_nonnull_network net;
 };
@@ -2309,6 +2319,7 @@ enum remote_procedure {
         REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS = 199,
         REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200,
         REMOTE_PROC_DOMAIN_OPEN_CONSOLE = 201,
+        REMOTE_PROC_DOMAIN_IS_UPDATED = 202,
 };
 typedef enum remote_procedure remote_procedure;
 
@@ -2630,6 +2641,8 @@ extern  bool_t xdr_remote_domain_is_active_args (XDR *, remote_domain_is_active_
 extern  bool_t xdr_remote_domain_is_active_ret (XDR *, remote_domain_is_active_ret*);
 extern  bool_t xdr_remote_domain_is_persistent_args (XDR *, remote_domain_is_persistent_args*);
 extern  bool_t xdr_remote_domain_is_persistent_ret (XDR *, remote_domain_is_persistent_ret*);
+extern  bool_t xdr_remote_domain_is_updated_args (XDR *, remote_domain_is_updated_args*);
+extern  bool_t xdr_remote_domain_is_updated_ret (XDR *, remote_domain_is_updated_ret*);
 extern  bool_t xdr_remote_network_is_active_args (XDR *, remote_network_is_active_args*);
 extern  bool_t xdr_remote_network_is_active_ret (XDR *, remote_network_is_active_ret*);
 extern  bool_t xdr_remote_network_is_persistent_args (XDR *, remote_network_is_persistent_args*);
@@ -2974,6 +2987,8 @@ extern bool_t xdr_remote_domain_is_active_args ();
 extern bool_t xdr_remote_domain_is_active_ret ();
 extern bool_t xdr_remote_domain_is_persistent_args ();
 extern bool_t xdr_remote_domain_is_persistent_ret ();
+extern bool_t xdr_remote_domain_is_updated_args ();
+extern bool_t xdr_remote_domain_is_updated_ret ();
 extern bool_t xdr_remote_network_is_active_args ();
 extern bool_t xdr_remote_network_is_active_ret ();
 extern bool_t xdr_remote_network_is_persistent_args ();
index e84afe52c5bdc738d44cfc0a46c621f473979a4c..e1981fd8bb41e10a552f950f5fc7c0c757bf3f90 100644 (file)
@@ -1600,6 +1600,13 @@ struct remote_domain_is_persistent_ret {
     int persistent;
 };
 
+struct remote_domain_is_updated_args {
+    remote_nonnull_domain dom;
+};
+
+struct remote_domain_is_updated_ret {
+    int updated;
+};
 
 struct remote_network_is_active_args {
     remote_nonnull_network net;
@@ -2086,7 +2093,8 @@ enum remote_procedure {
     REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS = 199,
     REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200,
 
-    REMOTE_PROC_DOMAIN_OPEN_CONSOLE = 201
+    REMOTE_PROC_DOMAIN_OPEN_CONSOLE = 201,
+    REMOTE_PROC_DOMAIN_IS_UPDATED = 202
 
     /*
      * Notice how the entries are grouped in sets of 10 ?
index 3054bbf7d780352eb38a7c94af3651ed8550b356..7ca968f031ef659dd1209389bbe4c442a844c7c8 100644 (file)
@@ -1152,6 +1152,12 @@ struct remote_domain_is_persistent_args {
 struct remote_domain_is_persistent_ret {
        int                        persistent;
 };
+struct remote_domain_is_updated_args {
+       remote_nonnull_domain      dom;
+};
+struct remote_domain_is_updated_ret {
+       int                        updated;
+};
 struct remote_network_is_active_args {
        remote_nonnull_network     net;
 };