From addee8a096c262b43a55edbd8ec8b683c21fca19 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Mon, 7 Feb 2011 14:48:24 -0700 Subject: [PATCH] sysinfo: implement the public API * src/libvirt.c (virConnectGetSysinfo): New function. * docs/formatdomain.html.in: Mention it. --- docs/formatdomain.html.in | 5 ++++- src/libvirt.c | 42 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index c543dab6ad..417a8a2737 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -125,7 +125,10 @@ The mode attribute must be specified, and is either "emulate" (let the hypervisor generate all values), "host" (copy all of Block 0 and Block 1, except for the UUID, from the host's - SMBIOS values), or "sysinfo" (use the values in + SMBIOS values; + the + virConnectGetSysinfo call can be + used to see what values are copied), or "sysinfo" (use the values in the sysinfo element). If not specified, the hypervisor default is used. Since 0.8.7 diff --git a/src/libvirt.c b/src/libvirt.c index c65b1e5691..479a9b5aa6 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -776,7 +776,7 @@ virRegisterStateDriver(virStateDriverPtr driver) /** * virStateInitialize: - * @privileged: set to 1 if running with root priviledge, 0 otherwise + * @privileged: set to 1 if running with root privilege, 0 otherwise * * Initialize all virtualization drivers. * @@ -1593,6 +1593,46 @@ error: return NULL; } +/** + * virConnectGetSysinfo: + * @conn: pointer to a hypervisor connection + * @flags: callers should always pass 0 + * + * This returns the XML description of the sysinfo details for the + * host on which the hypervisor is running, in the same format as the + * element of a domain XML. This information is generally + * available only for hypervisors running with root privileges. + * + * Returns the XML string which must be freed by the caller, or + * NULL if there was an error. + */ +char * +virConnectGetSysinfo (virConnectPtr conn, unsigned int flags) +{ + DEBUG("conn=%p", conn); + + virResetLastError(); + + if (!VIR_IS_CONNECT(conn)) { + virLibConnError(VIR_ERR_INVALID_CONN, __FUNCTION__); + virDispatchError(NULL); + return NULL; + } + + if (conn->driver->getSysinfo) { + char *ret = conn->driver->getSysinfo (conn, flags); + if (!ret) + goto error; + return ret; + } + + virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__); + +error: + virDispatchError(conn); + return NULL; +} + /** * virConnectGetMaxVcpus: * @conn: pointer to the hypervisor connection