finished the last entry point missing for the proxy code.
Daniel
+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,
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;
xenProxyClose, /* close */
NULL, /* type */
xenProxyGetVersion, /* version */
- NULL, /* nodeGetInfo */
+ xenProxyNodeGetInfo, /* nodeGetInfo */
xenProxyListDomains, /* listDomains */
xenProxyNumOfDomains, /* numOfDomains */
NULL, /* domainCreateLinux */
*/
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);
}
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;
#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);
*
* 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;
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);