On 04/02/2018 10:18 AM, Brijesh Singh wrote: > Add remote support for launch security info. > > Signed-off-by: Brijesh Singh <brijesh.singh@xxxxxxx> > --- > src/remote/remote_daemon_dispatch.c | 47 +++++++++++++++++++++++++++++++++++++ > src/remote/remote_driver.c | 42 ++++++++++++++++++++++++++++++++- > src/remote/remote_protocol.x | 20 +++++++++++++++- > src/remote_protocol-structs | 11 +++++++++ > 4 files changed, 118 insertions(+), 2 deletions(-) > > diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c > index 121d114..0959604 100644 > --- a/src/remote/remote_daemon_dispatch.c > +++ b/src/remote/remote_daemon_dispatch.c > @@ -3088,6 +3088,53 @@ remoteDispatchNodeGetMemoryStats(virNetServerPtr server ATTRIBUTE_UNUSED, > } > > static int > +remoteDispatchDomainGetLaunchSecurityInfo(virNetServerPtr server ATTRIBUTE_UNUSED, > + virNetServerClientPtr client ATTRIBUTE_UNUSED, > + virNetMessagePtr msg ATTRIBUTE_UNUSED, > + virNetMessageErrorPtr rerr, > + remote_domain_get_launch_security_info_args *args, > + remote_domain_get_launch_security_info_ret *ret) > +{ > + virDomainPtr dom = NULL; > + 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 (!(dom = get_nonnull_domain(priv->conn, args->dom))) > + goto cleanup; > + > + if (virDomainGetLaunchSecurityInfo(dom, ¶ms, &nparams, args->flags) < 0) > + goto cleanup; > + > + if (nparams > REMOTE_DOMAIN_LAUNCH_SECURITY_INFO_PARAMS_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); > + virObjectUnref(dom); > + return rv; > +} > + > +static int > remoteDispatchDomainGetPerfEvents(virNetServerPtr server ATTRIBUTE_UNUSED, > virNetServerClientPtr client ATTRIBUTE_UNUSED, > virNetMessagePtr msg ATTRIBUTE_UNUSED, > diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c > index 325ef3f..b52faa1 100644 > --- a/src/remote/remote_driver.c > +++ b/src/remote/remote_driver.c > @@ -1948,6 +1948,45 @@ remoteDomainGetNumaParameters(virDomainPtr domain, > } > > static int > +remoteDomainGetLaunchSecurityInfo(virDomainPtr domain, > + virTypedParameterPtr *params, > + int *nparams, > + unsigned int flags) > +{ > + int rv = -1; > + remote_domain_get_launch_security_info_args args; > + remote_domain_get_launch_security_info_ret ret; > + struct private_data *priv = domain->conn->privateData; > + > + remoteDriverLock(priv); > + > + make_nonnull_domain(&args.dom, domain); > + args.flags = flags; > + > + memset(&ret, 0, sizeof(ret)); > + if (call(domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_LAUNCH_SECURITY_INFO, > + (xdrproc_t) xdr_remote_domain_get_launch_security_info_args, (char *) &args, > + (xdrproc_t) xdr_remote_domain_get_launch_security_info_ret, (char *) &ret) == -1) > + goto done; > + > + if (virTypedParamsDeserialize((virTypedParameterRemotePtr) ret.params.params_val, > + ret.params.params_len, > + REMOTE_DOMAIN_LAUNCH_SECURITY_INFO_PARAMS_MAX, > + params, > + nparams) < 0) > + goto cleanup; > + > + rv = 0; > + > + cleanup: > + xdr_free((xdrproc_t) xdr_remote_domain_get_launch_security_info_ret, > + (char *) &ret); > + done: > + remoteDriverUnlock(priv); > + return rv; > +} > + > +static int > remoteDomainGetPerfEvents(virDomainPtr domain, > virTypedParameterPtr *params, > int *nparams, > @@ -8430,7 +8469,8 @@ static virHypervisorDriver hypervisor_driver = { > .domainSetGuestVcpus = remoteDomainSetGuestVcpus, /* 2.0.0 */ > .domainSetVcpu = remoteDomainSetVcpu, /* 3.1.0 */ > .domainSetBlockThreshold = remoteDomainSetBlockThreshold, /* 3.2.0 */ > - .domainSetLifecycleAction = remoteDomainSetLifecycleAction /* 3.9.0 */ > + .domainSetLifecycleAction = remoteDomainSetLifecycleAction, /* 3.9.0 */ > + .domainGetLaunchSecurityInfo = remoteDomainGetLaunchSecurityInfo /* 4.2.0 */ 4.3.0 now... John > }; > > static virNetworkDriver network_driver = { > diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x > index 9dbd497..4c0144c 100644 > --- a/src/remote/remote_protocol.x > +++ b/src/remote/remote_protocol.x > @@ -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 launch security information entries */ > +const REMOTE_DOMAIN_LAUNCH_SECURITY_INFO_PARAMS_MAX = 64; > + > /* UUID. VIR_UUID_BUFLEN definition comes from libvirt.h */ > typedef opaque remote_uuid[VIR_UUID_BUFLEN]; > > @@ -3448,6 +3451,15 @@ struct remote_domain_set_lifecycle_action_args { > unsigned int flags; > }; > > +struct remote_domain_get_launch_security_info_args { > + remote_nonnull_domain dom; > + unsigned int flags; > +}; > + > +struct remote_domain_get_launch_security_info_ret { > + remote_typed_param params<REMOTE_DOMAIN_LAUNCH_SECURITY_INFO_PARAMS_MAX>; > +}; > + > /*----- Protocol. -----*/ > > /* Define the program number, protocol version and procedure numbers here. */ > @@ -6135,5 +6147,11 @@ enum remote_procedure { > * @priority: high > * @acl: storage_pool:getattr > */ > - REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH = 391 > + REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH = 391, > + > + /** > + * @generate: none > + * @acl: domain:read > + */ > + REMOTE_PROC_DOMAIN_GET_LAUNCH_SECURITY_INFO = 392 > }; > diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs > index f45aba2..8f19d98 100644 cannot tell you how many people miss this one... > --- a/src/remote_protocol-structs > +++ b/src/remote_protocol-structs > @@ -2877,6 +2877,16 @@ struct remote_domain_set_lifecycle_action_args { > u_int action; > u_int flags; > }; > +struct remote_domain_get_launch_security_info_args { > + remote_nonnull_domain dom; > + u_int flags; > +}; > +struct remote_domain_get_launch_security_info_ret { > + struct { > + u_int params_len; > + remote_typed_param * params_val; > + } params; > +}; > enum remote_procedure { > REMOTE_PROC_CONNECT_OPEN = 1, > REMOTE_PROC_CONNECT_CLOSE = 2, > @@ -3269,4 +3279,5 @@ enum remote_procedure { > REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389, > REMOTE_PROC_DOMAIN_SET_LIFECYCLE_ACTION = 390, > REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH = 391, > + REMOTE_PROC_DOMAIN_GET_LAUNCH_SECURITY_INFO = 392, > }; > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list