提交 e4db4daf 编写于 作者: B Brijesh Singh 提交者: Erik Skultety

remote: Implement the remote protocol for virNodeGetSEVInfo()

Add remote support for virNodeGetSEVInfo().
Signed-off-by: NBrijesh Singh <brijesh.singh@amd.com>
Reviewed-by: NErik Skultety <eskultet@redhat.com>
上级 45422935
......@@ -5000,6 +5000,50 @@ remoteDispatchDomainGetDiskErrors(virNetServerPtr server ATTRIBUTE_UNUSED,
}
static int
remoteDispatchNodeGetSevInfo(virNetServerPtr server ATTRIBUTE_UNUSED,
virNetServerClientPtr client ATTRIBUTE_UNUSED,
virNetMessagePtr msg ATTRIBUTE_UNUSED,
virNetMessageErrorPtr rerr,
remote_node_get_sev_info_args *args,
remote_node_get_sev_info_ret *ret)
{
virTypedParameterPtr params = NULL;
int nparams = 0;
int rv = -1;
struct daemonClientPrivate *priv =
virNetServerClientGetPrivateData(client);
if (!priv->conn) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
goto cleanup;
}
if (virNodeGetSEVInfo(priv->conn, &params, &nparams, args->flags) < 0)
goto cleanup;
if (nparams > REMOTE_NODE_SEV_INFO_MAX) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large"));
goto cleanup;
}
if (virTypedParamsSerialize(params, nparams,
(virTypedParameterRemotePtr *) &ret->params.params_val,
&ret->params.params_len,
args->flags) < 0)
goto cleanup;
rv = 0;
cleanup:
if (rv < 0)
virNetMessageSaveError(rerr);
virTypedParamsFree(params, nparams);
return rv;
}
static int
remoteDispatchNodeGetMemoryParameters(virNetServerPtr server ATTRIBUTE_UNUSED,
virNetServerClientPtr client ATTRIBUTE_UNUSED,
......
......@@ -6766,6 +6766,45 @@ remoteNodeGetMemoryParameters(virConnectPtr conn,
return rv;
}
static int
remoteNodeGetSEVInfo(virConnectPtr conn,
virTypedParameterPtr *params,
int *nparams,
unsigned int flags)
{
int rv = -1;
remote_node_get_sev_info_args args;
remote_node_get_sev_info_ret ret;
struct private_data *priv = conn->privateData;
remoteDriverLock(priv);
args.flags = flags;
memset(&ret, 0, sizeof(ret));
if (call(conn, priv, 0, REMOTE_PROC_NODE_GET_SEV_INFO,
(xdrproc_t) xdr_remote_node_get_sev_info_args, (char *) &args,
(xdrproc_t) xdr_remote_node_get_sev_info_ret, (char *) &ret) == -1)
goto done;
if (virTypedParamsDeserialize((virTypedParameterRemotePtr) ret.params.params_val,
ret.params.params_len,
REMOTE_NODE_SEV_INFO_MAX,
params,
nparams) < 0)
goto cleanup;
rv = 0;
cleanup:
xdr_free((xdrproc_t) xdr_remote_node_get_sev_info_ret, (char *) &ret);
done:
remoteDriverUnlock(priv);
return rv;
}
static int
remoteNodeGetCPUMap(virConnectPtr conn,
unsigned char **cpumap,
......@@ -8442,6 +8481,7 @@ static virHypervisorDriver hypervisor_driver = {
.domainSetLifecycleAction = remoteDomainSetLifecycleAction, /* 3.9.0 */
.connectCompareHypervisorCPU = remoteConnectCompareHypervisorCPU, /* 4.4.0 */
.connectBaselineHypervisorCPU = remoteConnectBaselineHypervisorCPU, /* 4.4.0 */
.nodeGetSEVInfo = remoteNodeGetSEVInfo, /* 4.5.0 */
};
static virNetworkDriver network_driver = {
......
......@@ -253,6 +253,9 @@ const REMOTE_DOMAIN_IP_ADDR_MAX = 2048;
/* Upper limit on number of guest vcpu information entries */
const REMOTE_DOMAIN_GUEST_VCPU_PARAMS_MAX = 64;
/* Upper limit on number of SEV parameters */
const REMOTE_NODE_SEV_INFO_MAX = 64;
/* UUID. VIR_UUID_BUFLEN definition comes from libvirt.h */
typedef opaque remote_uuid[VIR_UUID_BUFLEN];
......@@ -3480,6 +3483,17 @@ struct remote_connect_baseline_hypervisor_cpu_ret {
remote_nonnull_string cpu;
};
struct remote_node_get_sev_info_args {
int nparams;
unsigned int flags;
};
struct remote_node_get_sev_info_ret {
remote_typed_param params<REMOTE_NODE_SEV_INFO_MAX>;
int nparams;
};
/*----- Protocol. -----*/
/* Define the program number, protocol version and procedure numbers here. */
......@@ -6187,5 +6201,11 @@ enum remote_procedure {
* @generate: both
* @acl: connect:write
*/
REMOTE_PROC_CONNECT_BASELINE_HYPERVISOR_CPU = 394
REMOTE_PROC_CONNECT_BASELINE_HYPERVISOR_CPU = 394,
/**
* @generate: none
* @acl: connect:read
*/
REMOTE_PROC_NODE_GET_SEV_INFO = 395
};
......@@ -2907,6 +2907,17 @@ struct remote_connect_baseline_hypervisor_cpu_args {
struct remote_connect_baseline_hypervisor_cpu_ret {
remote_nonnull_string cpu;
};
struct remote_node_get_sev_info_args {
int nparams;
u_int flags;
};
struct remote_node_get_sev_info_ret {
struct {
u_int params_len;
remote_typed_param * params_val;
} params;
int nparams;
};
enum remote_procedure {
REMOTE_PROC_CONNECT_OPEN = 1,
REMOTE_PROC_CONNECT_CLOSE = 2,
......@@ -3302,4 +3313,5 @@ enum remote_procedure {
REMOTE_PROC_DOMAIN_DETACH_DEVICE_ALIAS = 392,
REMOTE_PROC_CONNECT_COMPARE_HYPERVISOR_CPU = 393,
REMOTE_PROC_CONNECT_BASELINE_HYPERVISOR_CPU = 394,
REMOTE_PROC_NODE_GET_SEV_INFO = 395,
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册