mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
virNodeGetCPUMap: Implement wire protocol.
- Defined the wire protocol format for virNodeGetCPUMap and its arguments - Implemented remote method invocation (remoteNodeGetCPUMap) - Implemented method dispatcher (remoteDispatchNodeGetCPUMap) Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
7ecc1d814a
commit
d804d35fac
@ -4569,6 +4569,53 @@ cleanup:
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
remoteDispatchNodeGetCPUMap(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||||
|
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||||
|
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||||
|
virNetMessageErrorPtr rerr,
|
||||||
|
remote_node_get_cpu_map_args *args,
|
||||||
|
remote_node_get_cpu_map_ret *ret)
|
||||||
|
{
|
||||||
|
unsigned char *cpumap = NULL;
|
||||||
|
unsigned int online;
|
||||||
|
unsigned int flags;
|
||||||
|
int cpunum;
|
||||||
|
int rv = -1;
|
||||||
|
struct daemonClientPrivate *priv =
|
||||||
|
virNetServerClientGetPrivateData(client);
|
||||||
|
|
||||||
|
if (!priv->conn) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
flags = args->flags;
|
||||||
|
|
||||||
|
cpunum = virNodeGetCPUMap(priv->conn, args->need_results ? &cpumap : NULL,
|
||||||
|
&online, flags);
|
||||||
|
if (cpunum < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
/* 'serialize' return cpumap */
|
||||||
|
if (args->need_results) {
|
||||||
|
ret->cpumap.cpumap_len = VIR_CPU_MAPLEN(cpunum);
|
||||||
|
ret->cpumap.cpumap_val = (char *) cpumap;
|
||||||
|
cpumap = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret->online = online;
|
||||||
|
ret->ret = cpunum;
|
||||||
|
|
||||||
|
rv = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (rv < 0)
|
||||||
|
virNetMessageSaveError(rerr);
|
||||||
|
VIR_FREE(cpumap);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
/*----- Helpers. -----*/
|
/*----- Helpers. -----*/
|
||||||
|
|
||||||
/* get_nonnull_domain and get_nonnull_network turn an on-wire
|
/* get_nonnull_domain and get_nonnull_network turn an on-wire
|
||||||
|
@ -5780,6 +5780,53 @@ done:
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
remoteNodeGetCPUMap(virConnectPtr conn,
|
||||||
|
unsigned char **cpumap,
|
||||||
|
unsigned int *online,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
int rv = -1;
|
||||||
|
remote_node_get_cpu_map_args args;
|
||||||
|
remote_node_get_cpu_map_ret ret;
|
||||||
|
struct private_data *priv = conn->privateData;
|
||||||
|
|
||||||
|
remoteDriverLock(priv);
|
||||||
|
|
||||||
|
args.need_results = !!cpumap;
|
||||||
|
args.flags = flags;
|
||||||
|
|
||||||
|
memset (&ret, 0, sizeof(ret));
|
||||||
|
if (call(conn, priv, 0, REMOTE_PROC_NODE_GET_CPU_MAP,
|
||||||
|
(xdrproc_t) xdr_remote_node_get_cpu_map_args,
|
||||||
|
(char *) &args,
|
||||||
|
(xdrproc_t) xdr_remote_node_get_cpu_map_ret,
|
||||||
|
(char *) &ret) == -1)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
if (ret.ret < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (cpumap) {
|
||||||
|
if (VIR_ALLOC_N(*cpumap, ret.cpumap.cpumap_len) < 0) {
|
||||||
|
virReportOOMError();
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
memcpy(*cpumap, ret.cpumap.cpumap_val, ret.cpumap.cpumap_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (online)
|
||||||
|
*online = ret.online;
|
||||||
|
|
||||||
|
rv = ret.ret;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
xdr_free((xdrproc_t) xdr_remote_node_get_cpu_map_ret, (char *) &ret);
|
||||||
|
done:
|
||||||
|
remoteDriverUnlock(priv);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
remoteDomainEventQueue(struct private_data *priv, virDomainEventPtr event)
|
remoteDomainEventQueue(struct private_data *priv, virDomainEventPtr event)
|
||||||
{
|
{
|
||||||
@ -6094,6 +6141,7 @@ static virDriver remote_driver = {
|
|||||||
.domainGetHostname = remoteDomainGetHostname, /* 0.10.0 */
|
.domainGetHostname = remoteDomainGetHostname, /* 0.10.0 */
|
||||||
.nodeSetMemoryParameters = remoteNodeSetMemoryParameters, /* 0.10.2 */
|
.nodeSetMemoryParameters = remoteNodeSetMemoryParameters, /* 0.10.2 */
|
||||||
.nodeGetMemoryParameters = remoteNodeGetMemoryParameters, /* 0.10.2 */
|
.nodeGetMemoryParameters = remoteNodeGetMemoryParameters, /* 0.10.2 */
|
||||||
|
.nodeGetCPUMap = remoteNodeGetCPUMap, /* 1.0.0 */
|
||||||
};
|
};
|
||||||
|
|
||||||
static virNetworkDriver network_driver = {
|
static virNetworkDriver network_driver = {
|
||||||
|
@ -2670,6 +2670,17 @@ struct remote_node_get_memory_parameters_ret {
|
|||||||
int nparams;
|
int nparams;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct remote_node_get_cpu_map_args {
|
||||||
|
int need_results;
|
||||||
|
unsigned int flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct remote_node_get_cpu_map_ret {
|
||||||
|
opaque cpumap<REMOTE_CPUMAP_MAX>;
|
||||||
|
unsigned int online;
|
||||||
|
int ret;
|
||||||
|
};
|
||||||
|
|
||||||
/*----- Protocol. -----*/
|
/*----- Protocol. -----*/
|
||||||
|
|
||||||
/* Define the program number, protocol version and procedure numbers here. */
|
/* Define the program number, protocol version and procedure numbers here. */
|
||||||
@ -3013,7 +3024,8 @@ enum remote_procedure {
|
|||||||
REMOTE_PROC_DOMAIN_BLOCK_COMMIT = 290, /* autogen autogen */
|
REMOTE_PROC_DOMAIN_BLOCK_COMMIT = 290, /* autogen autogen */
|
||||||
|
|
||||||
REMOTE_PROC_NETWORK_UPDATE = 291, /* autogen autogen priority:high */
|
REMOTE_PROC_NETWORK_UPDATE = 291, /* autogen autogen priority:high */
|
||||||
REMOTE_PROC_DOMAIN_EVENT_PMSUSPEND_DISK = 292 /* autogen autogen */
|
REMOTE_PROC_DOMAIN_EVENT_PMSUSPEND_DISK = 292, /* autogen autogen */
|
||||||
|
REMOTE_PROC_NODE_GET_CPU_MAP = 293 /* skipgen skipgen */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Notice how the entries are grouped in sets of 10 ?
|
* Notice how the entries are grouped in sets of 10 ?
|
||||||
|
@ -2126,6 +2126,18 @@ struct remote_node_get_memory_parameters_ret {
|
|||||||
} params;
|
} params;
|
||||||
int nparams;
|
int nparams;
|
||||||
};
|
};
|
||||||
|
struct remote_node_get_cpu_map_args {
|
||||||
|
int need_results;
|
||||||
|
u_int flags;
|
||||||
|
};
|
||||||
|
struct remote_node_get_cpu_map_ret {
|
||||||
|
struct {
|
||||||
|
u_int cpumap_len;
|
||||||
|
char * cpumap_val;
|
||||||
|
} cpumap;
|
||||||
|
u_int online;
|
||||||
|
int ret;
|
||||||
|
};
|
||||||
enum remote_procedure {
|
enum remote_procedure {
|
||||||
REMOTE_PROC_OPEN = 1,
|
REMOTE_PROC_OPEN = 1,
|
||||||
REMOTE_PROC_CLOSE = 2,
|
REMOTE_PROC_CLOSE = 2,
|
||||||
@ -2419,4 +2431,5 @@ enum remote_procedure {
|
|||||||
REMOTE_PROC_DOMAIN_BLOCK_COMMIT = 290,
|
REMOTE_PROC_DOMAIN_BLOCK_COMMIT = 290,
|
||||||
REMOTE_PROC_NETWORK_UPDATE = 291,
|
REMOTE_PROC_NETWORK_UPDATE = 291,
|
||||||
REMOTE_PROC_DOMAIN_EVENT_PMSUSPEND_DISK = 292,
|
REMOTE_PROC_DOMAIN_EVENT_PMSUSPEND_DISK = 292,
|
||||||
|
REMOTE_PROC_NODE_GET_CPU_MAP = 293,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user