]> xenbits.xensource.com Git - libvirt.git/commitdiff
* proxy/libvirt_proxy.c src/proxy_internal.[ch] src/xend_internal.[ch]:
authorDaniel Veillard <veillard@redhat.com>
Mon, 3 Jul 2006 11:12:12 +0000 (11:12 +0000)
committerDaniel Veillard <veillard@redhat.com>
Mon, 3 Jul 2006 11:12:12 +0000 (11:12 +0000)
  finished the last entry point missing for the proxy code.
Daniel

ChangeLog
proxy/libvirt_proxy.c
src/proxy_internal.c
src/proxy_internal.h
src/xend_internal.c
src/xend_internal.h

index e95d36014a0781a72fd6796fe6e1ef024a9c84db..e4cc571861fe83842d05e28246f855a8ebce00ff 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Jul  3 11:21:10 EDT 2006 Daniel Veillard <veillard@redhat.com>
+
+       * proxy/libvirt_proxy.c src/proxy_internal.[ch] src/xend_internal.[ch]:
+         finished the last entry point missing for the proxy code.
+
 Fri Jun 30 16:31:47 EDT 2006 Daniel Veillard <veillard@redhat.com>
 
        * proxy/libvirt_proxy.c src/proxy_internal.c: more bug fixes,
index fdd96d67285f56c5ecc28461a691dd14859dace1..7d04eb0171d52b225e6e2be59c2fd3dfff4d2f2c 100644 (file)
@@ -560,8 +560,22 @@ retry2:
            break;
        }
        case VIR_PROXY_NODE_INFO:
-           TODO;
-           req->data.arg = -1;
+           if (req->len != sizeof(virProxyPacket))
+               goto comm_error;
+
+           /*
+            * Hum, could we expect those informations to be unmutable and
+            * cache them ? Since it's probably an unfrequent call better
+            * not make assumption and do the xend RPC each call.
+            */
+           ret = xenDaemonNodeGetInfo(conn, &request.extra.ninfo);
+           if (ret < 0) {
+                req->data.arg = -1;
+               req->len = sizeof(virProxyPacket);
+           } else {
+                req->data.arg = 0;
+               req->len = sizeof(virProxyPacket) + sizeof(virNodeInfo);
+           }
            break;
        default:
            goto comm_error;
index b560ba3e6624f26c11e7b223c36cc9c2f300babf..b8716b4db403fb382f37d772b8789bf91a5c1c4a 100644 (file)
@@ -49,7 +49,7 @@ static virDriver xenProxyDriver = {
     xenProxyClose, /* close */
     NULL, /* type */
     xenProxyGetVersion, /* version */
-    NULL, /* nodeGetInfo */
+    xenProxyNodeGetInfo, /* nodeGetInfo */
     xenProxyListDomains, /* listDomains */
     xenProxyNumOfDomains, /* numOfDomains */
     NULL, /* domainCreateLinux */
@@ -889,7 +889,34 @@ xenProxyDomainLookupByName(virConnectPtr conn, const char *name)
  */
 static int
 xenProxyNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info) {
-    TODO
-    return(-1);
+    virProxyPacket req;
+    virProxyFullPacket ans;
+    int ret;
+
+    if (!VIR_IS_CONNECT(conn)) {
+        virProxyError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
+        return (-1);
+    }
+    if (info == NULL) {
+        virProxyError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
+       return (-1);
+    }
+    memset(&req, 0, sizeof(req));
+    req.command = VIR_PROXY_NODE_INFO;
+    req.data.arg = 0;
+    req.len = sizeof(req);
+    ret = xenProxyCommand(conn, &req, &ans);
+    if (ret < 0) {
+        xenProxyClose(conn);
+       return(-1);
+    }
+    if (ans.data.arg == -1) {
+       return(-1);
+    }
+    if (ans.len != sizeof(virProxyPacket) + sizeof(virNodeInfo)) {
+       return(-1);
+    }
+    memcpy(info, &ans.extra.ninfo, sizeof(virNodeInfo));
+    return(0);
 }
 
index 1a462fe6c0786146e8de20b49c1132b0f70ebcf5..705af8645a3e767df88d5f6ea6e561510045752a 100644 (file)
@@ -77,6 +77,7 @@ struct _virProxyFullPacket {
         char       str[4080];   /* extra char array */
         int        arg[1020];   /* extra int array */
        virDomainInfo dinfo;    /* domain informations */
+       virNodeInfo   ninfo;    /* node informations */
     } extra;
 };
 typedef struct _virProxyFullPacket virProxyFullPacket;
index aa7696c8303a248a2303eeeea2f353c0cd3e1d28..e00bfde004d3d284d6a07bd9232f56292c0213bb 100644 (file)
@@ -37,7 +37,6 @@
 #include "xen_internal.h" /* for DOM0_INTERFACE_VERSION */
 
 static const char * xenDaemonGetType(virConnectPtr conn);
-static int xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
 static int xenDaemonListDomains(virConnectPtr conn, int *ids, int maxids);
 static int xenDaemonNumOfDomains(virConnectPtr conn);
 static virDomainPtr xenDaemonLookupByID(virConnectPtr conn, int id);
@@ -2072,7 +2071,7 @@ error:
  *
  * Returns 0 in case of success and -1 in case of failure.
  */
-static int
+int
 xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info) {
     int ret = -1;
     struct sexpr *root;
index a5ea00609655ebcf08d9cac47bab5aa1afa5904e..eeb79b6adbe0a0799fa3f7cd239ea17bf99ccab3 100644 (file)
@@ -601,6 +601,7 @@ void xenDaemonRegister(void);
 int xenDaemonOpen(virConnectPtr conn, const char *name, int flags);
 int xenDaemonClose(virConnectPtr conn);
 int xenDaemonGetVersion(virConnectPtr conn, unsigned long *hvVer);
+int xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
 int xenDaemonDomainSuspend(virDomainPtr domain);
 int xenDaemonDomainResume(virDomainPtr domain);
 int xenDaemonDomainShutdown(virDomainPtr domain);