/*
* remote.c: handlers for RPC method calls
*
- * Copyright (C) 2007-2010 Red Hat, Inc.
+ * Copyright (C) 2007-2011 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
return 0;
}
+static int
+remoteDispatchGetSysinfo (struct qemud_server *server ATTRIBUTE_UNUSED,
+ struct qemud_client *client ATTRIBUTE_UNUSED,
+ virConnectPtr conn,
+ remote_message_header *hdr ATTRIBUTE_UNUSED,
+ remote_error *rerr,
+ remote_get_sysinfo_args *args,
+ remote_get_sysinfo_ret *ret)
+{
+ unsigned int flags;
+ char *sysinfo;
+
+ flags = args->flags;
+ sysinfo = virConnectGetSysinfo (conn, flags);
+ if (sysinfo == NULL) {
+ remoteDispatchConnError(rerr, conn);
+ return -1;
+ }
+
+ ret->sysinfo = sysinfo;
+ return 0;
+}
+
static int
remoteDispatchGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
struct qemud_client *client ATTRIBUTE_UNUSED,
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;
+ remote_get_sysinfo_args val_remote_get_sysinfo_args;
remote_error *err,
remote_get_max_vcpus_args *args,
remote_get_max_vcpus_ret *ret);
+static int remoteDispatchGetSysinfo(
+ struct qemud_server *server,
+ struct qemud_client *client,
+ virConnectPtr conn,
+ remote_message_header *hdr,
+ remote_error *err,
+ remote_get_sysinfo_args *args,
+ remote_get_sysinfo_ret *ret);
static int remoteDispatchGetType(
struct qemud_server *server,
struct qemud_client *client,
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;
+ remote_get_sysinfo_ret val_remote_get_sysinfo_ret;
.args_filter = (xdrproc_t) xdr_remote_domain_is_updated_args,
.ret_filter = (xdrproc_t) xdr_remote_domain_is_updated_ret,
},
+{ /* GetSysinfo => 203 */
+ .fn = (dispatch_fn) remoteDispatchGetSysinfo,
+ .args_filter = (xdrproc_t) xdr_remote_get_sysinfo_args,
+ .ret_filter = (xdrproc_t) xdr_remote_get_sysinfo_ret,
+},
return rv;
}
+static char *
+remoteGetSysinfo (virConnectPtr conn, unsigned int flags)
+{
+ char *rv = NULL;
+ remote_get_sysinfo_args args;
+ remote_get_sysinfo_ret ret;
+ struct private_data *priv = conn->privateData;
+
+ remoteDriverLock(priv);
+
+ memset (&ret, 0, sizeof ret);
+ args.flags = flags;
+ if (call (conn, priv, 0, REMOTE_PROC_GET_SYSINFO,
+ (xdrproc_t) xdr_remote_get_sysinfo_args, (char *) &args,
+ (xdrproc_t) xdr_remote_get_sysinfo_ret, (char *) &ret) == -1)
+ goto done;
+
+ /* Caller frees this. */
+ rv = ret.sysinfo;
+
+done:
+ remoteDriverUnlock(priv);
+ return rv;
+}
+
static int remoteIsSecure(virConnectPtr conn)
{
int rv = -1;
remoteGetVersion, /* version */
remoteGetLibVersion, /* libvirtVersion */
remoteGetHostname, /* getHostname */
- NULL, /* getSysinfo */
+ remoteGetSysinfo, /* getSysinfo */
remoteGetMaxVcpus, /* getMaxVcpus */
remoteNodeGetInfo, /* nodeGetInfo */
remoteGetCapabilities, /* getCapabilities */
return TRUE;
}
+bool_t
+xdr_remote_get_sysinfo_args (XDR *xdrs, remote_get_sysinfo_args *objp)
+{
+
+ if (!xdr_u_int (xdrs, &objp->flags))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_remote_get_sysinfo_ret (XDR *xdrs, remote_get_sysinfo_ret *objp)
+{
+
+ if (!xdr_remote_nonnull_string (xdrs, &objp->sysinfo))
+ return FALSE;
+ return TRUE;
+}
+
bool_t
xdr_remote_get_uri_ret (XDR *xdrs, remote_get_uri_ret *objp)
{
};
typedef struct remote_get_hostname_ret remote_get_hostname_ret;
+struct remote_get_sysinfo_args {
+ u_int flags;
+};
+typedef struct remote_get_sysinfo_args remote_get_sysinfo_args;
+
+struct remote_get_sysinfo_ret {
+ remote_nonnull_string sysinfo;
+};
+typedef struct remote_get_sysinfo_ret remote_get_sysinfo_ret;
+
struct remote_get_uri_ret {
remote_nonnull_string uri;
};
REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200,
REMOTE_PROC_DOMAIN_OPEN_CONSOLE = 201,
REMOTE_PROC_DOMAIN_IS_UPDATED = 202,
+ REMOTE_PROC_GET_SYSINFO = 203,
};
typedef enum remote_procedure remote_procedure;
extern bool_t xdr_remote_get_version_ret (XDR *, remote_get_version_ret*);
extern bool_t xdr_remote_get_lib_version_ret (XDR *, remote_get_lib_version_ret*);
extern bool_t xdr_remote_get_hostname_ret (XDR *, remote_get_hostname_ret*);
+extern bool_t xdr_remote_get_sysinfo_args (XDR *, remote_get_sysinfo_args*);
+extern bool_t xdr_remote_get_sysinfo_ret (XDR *, remote_get_sysinfo_ret*);
extern bool_t xdr_remote_get_uri_ret (XDR *, remote_get_uri_ret*);
extern bool_t xdr_remote_get_max_vcpus_args (XDR *, remote_get_max_vcpus_args*);
extern bool_t xdr_remote_get_max_vcpus_ret (XDR *, remote_get_max_vcpus_ret*);
extern bool_t xdr_remote_get_version_ret ();
extern bool_t xdr_remote_get_lib_version_ret ();
extern bool_t xdr_remote_get_hostname_ret ();
+extern bool_t xdr_remote_get_sysinfo_args ();
+extern bool_t xdr_remote_get_sysinfo_ret ();
extern bool_t xdr_remote_get_uri_ret ();
extern bool_t xdr_remote_get_max_vcpus_args ();
extern bool_t xdr_remote_get_max_vcpus_ret ();
* remote_internal driver and libvirtd. This protocol is
* internal and may change at any time.
*
- * Copyright (C) 2006-2010 Red Hat, Inc.
+ * Copyright (C) 2006-2011 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
remote_nonnull_string hostname;
};
+struct remote_get_sysinfo_args {
+ unsigned int flags;
+};
+
+struct remote_get_sysinfo_ret {
+ remote_nonnull_string sysinfo;
+};
+
struct remote_get_uri_ret {
remote_nonnull_string uri;
};
REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS = 200,
REMOTE_PROC_DOMAIN_OPEN_CONSOLE = 201,
- REMOTE_PROC_DOMAIN_IS_UPDATED = 202
+ REMOTE_PROC_DOMAIN_IS_UPDATED = 202,
+ REMOTE_PROC_GET_SYSINFO = 203
/*
* Notice how the entries are grouped in sets of 10 ?
struct remote_get_hostname_ret {
remote_nonnull_string hostname;
};
+struct remote_get_sysinfo_args {
+ u_int flags;
+};
+struct remote_get_sysinfo_ret {
+ remote_nonnull_string sysinfo;
+};
struct remote_get_uri_ret {
remote_nonnull_string uri;
};