diff --git a/ChangeLog b/ChangeLog index e95d36014a0781a72fd6796fe6e1ef024a9c84db..e4cc571861fe83842d05e28246f855a8ebce00ff 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 fdd96d67285f56c5ecc28461a691dd14859dace1..7d04eb0171d52b225e6e2be59c2fd3dfff4d2f2c 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 b560ba3e6624f26c11e7b223c36cc9c2f300babf..b8716b4db403fb382f37d772b8789bf91a5c1c4a 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 1a462fe6c0786146e8de20b49c1132b0f70ebcf5..705af8645a3e767df88d5f6ea6e561510045752a 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 aa7696c8303a248a2303eeeea2f353c0cd3e1d28..e00bfde004d3d284d6a07bd9232f56292c0213bb 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 a5ea00609655ebcf08d9cac47bab5aa1afa5904e..eeb79b6adbe0a0799fa3f7cd239ea17bf99ccab3 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);