mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
Mon Apr 30 18:02:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* src/proxy_internal.c (xenProxyGetCapabilities): Add support for virConnectGetCapabilities across Xen proxy.
This commit is contained in:
parent
ebd8071688
commit
27151b3d10
@ -1,3 +1,8 @@
|
||||
Mon Apr 30 18:02:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
|
||||
|
||||
* src/proxy_internal.c (xenProxyGetCapabilities): Add support
|
||||
for virConnectGetCapabilities across Xen proxy.
|
||||
|
||||
Mon Apr 30 18:00:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
|
||||
|
||||
* src/xen_unified.c: In the non-root case keep track of the
|
||||
|
@ -587,6 +587,29 @@ retry2:
|
||||
req->len = sizeof(virProxyPacket) + sizeof(virNodeInfo);
|
||||
}
|
||||
break;
|
||||
|
||||
case VIR_PROXY_GET_CAPABILITIES:
|
||||
if (req->len != sizeof(virProxyPacket))
|
||||
goto comm_error;
|
||||
|
||||
xml = xenHypervisorGetCapabilities (conn);
|
||||
if (!xml) {
|
||||
req->data.arg = -1;
|
||||
req->len = sizeof (virProxyPacket);
|
||||
} else {
|
||||
int xmllen = strlen (xml);
|
||||
if (xmllen > (int) sizeof (request.extra.str)) {
|
||||
req->data.arg = -2;
|
||||
req->len = sizeof (virProxyPacket);
|
||||
} else {
|
||||
req->data.arg = 0;
|
||||
memmove (request.extra.str, xml, xmllen);
|
||||
req->len = sizeof (virProxyPacket) + xmllen;
|
||||
}
|
||||
free (xml);
|
||||
}
|
||||
break;
|
||||
|
||||
case VIR_PROXY_DOMAIN_XML:
|
||||
if (req->len != sizeof(virProxyPacket))
|
||||
goto comm_error;
|
||||
|
@ -31,6 +31,7 @@ static int xenProxyClose(virConnectPtr conn);
|
||||
static int xenProxyOpen(virConnectPtr conn, const char *name, int flags);
|
||||
static int xenProxyGetVersion(virConnectPtr conn, unsigned long *hvVer);
|
||||
static int xenProxyNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
|
||||
static char *xenProxyGetCapabilities(virConnectPtr conn);
|
||||
static int xenProxyListDomains(virConnectPtr conn, int *ids, int maxids);
|
||||
static int xenProxyNumOfDomains(virConnectPtr conn);
|
||||
static virDomainPtr xenProxyLookupByID(virConnectPtr conn, int id);
|
||||
@ -53,7 +54,7 @@ virDriver xenProxyDriver = {
|
||||
xenProxyGetVersion, /* version */
|
||||
NULL, /* getMaxVcpus */
|
||||
xenProxyNodeGetInfo, /* nodeGetInfo */
|
||||
NULL, /* getCapabilities */
|
||||
xenProxyGetCapabilities, /* getCapabilities */
|
||||
xenProxyListDomains, /* listDomains */
|
||||
xenProxyNumOfDomains, /* numOfDomains */
|
||||
NULL, /* domainCreateLinux */
|
||||
@ -976,6 +977,55 @@ xenProxyNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* xenProxyGetCapabilities:
|
||||
* @conn: pointer to the Xen Daemon block
|
||||
*
|
||||
* Extract capabilities of the hypervisor.
|
||||
*
|
||||
* Returns capabilities in case of success (freed by caller)
|
||||
* and NULL in case of failure.
|
||||
*/
|
||||
static char *
|
||||
xenProxyGetCapabilities (virConnectPtr conn)
|
||||
{
|
||||
virProxyPacket req;
|
||||
virProxyFullPacket ans;
|
||||
int ret, xmllen;
|
||||
char *xml;
|
||||
|
||||
if (!VIR_IS_CONNECT(conn)) {
|
||||
virProxyError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
memset(&req, 0, sizeof(req));
|
||||
req.command = VIR_PROXY_GET_CAPABILITIES;
|
||||
req.data.arg = 0;
|
||||
req.len = sizeof(req);
|
||||
ret = xenProxyCommand(conn, &req, &ans, 0);
|
||||
if (ret < 0) {
|
||||
xenProxyClose(conn);
|
||||
return NULL;
|
||||
}
|
||||
if (ans.data.arg == -1)
|
||||
return NULL;
|
||||
if (ans.len <= sizeof(virProxyPacket)) {
|
||||
virProxyError(conn, VIR_ERR_OPERATION_FAILED, __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xmllen = ans.len - sizeof (virProxyPacket);
|
||||
xml = malloc (xmllen+1);
|
||||
if (!xml) {
|
||||
virProxyError (conn, VIR_ERR_NO_MEMORY, __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
memmove (xml, ans.extra.str, xmllen);
|
||||
xml[xmllen] = '\0';
|
||||
|
||||
return xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* xenProxyDomainDumpXML:
|
||||
* @domain: a domain object
|
||||
|
@ -36,7 +36,8 @@ typedef enum {
|
||||
VIR_PROXY_MAX_MEMORY = 8,
|
||||
VIR_PROXY_DOMAIN_INFO = 9,
|
||||
VIR_PROXY_DOMAIN_XML = 10,
|
||||
VIR_PROXY_DOMAIN_OSTYPE = 11
|
||||
VIR_PROXY_DOMAIN_OSTYPE = 11,
|
||||
VIR_PROXY_GET_CAPABILITIES = 12
|
||||
} virProxyCommand;
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user