From 5995e2428c0c615bde125098713621ce21245b70 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Mon, 3 Jul 2006 11:12:12 +0000 Subject: [PATCH] * proxy/libvirt_proxy.c src/proxy_internal.[ch] src/xend_internal.[ch]: finished the last entry point missing for the proxy code. Daniel --- ChangeLog | 5 +++++ proxy/libvirt_proxy.c | 18 ++++++++++++++++-- src/proxy_internal.c | 33 ++++++++++++++++++++++++++++++--- src/proxy_internal.h | 1 + src/xend_internal.c | 3 +-- src/xend_internal.h | 1 + 6 files changed, 54 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index e95d36014a..e4cc571861 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Jul 3 11:21:10 EDT 2006 Daniel Veillard + + * 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 * proxy/libvirt_proxy.c src/proxy_internal.c: more bug fixes, diff --git a/proxy/libvirt_proxy.c b/proxy/libvirt_proxy.c index fdd96d6728..7d04eb0171 100644 --- a/proxy/libvirt_proxy.c +++ b/proxy/libvirt_proxy.c @@ -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; diff --git a/src/proxy_internal.c b/src/proxy_internal.c index b560ba3e66..b8716b4db4 100644 --- a/src/proxy_internal.c +++ b/src/proxy_internal.c @@ -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); } diff --git a/src/proxy_internal.h b/src/proxy_internal.h index 1a462fe6c0..705af8645a 100644 --- a/src/proxy_internal.h +++ b/src/proxy_internal.h @@ -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; diff --git a/src/xend_internal.c b/src/xend_internal.c index aa7696c830..e00bfde004 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -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; diff --git a/src/xend_internal.h b/src/xend_internal.h index a5ea006096..eeb79b6adb 100644 --- a/src/xend_internal.h +++ b/src/xend_internal.h @@ -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); -- 2.47.2