From baa371eca0f352c46ae06f43767fad4063a9d727 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Tue, 17 May 2011 15:45:03 -0600 Subject: [PATCH] remote: introduce remoteGetSchedulerParametersFlags * daemon/remote.c (remoteDispatchDomainGetSchedulerParameters): New function. * src/remote/remote_driver.c (remoteDomainGetSchedulerParameters): Likewise. * src/remote/remote_protocol.x (remote_domain_get_scheduler_parameters_flags_args) (remote_domain_get_scheduler_parameters_flags_ret): New types. (remote_procedure): New RPC. * src/remote_protocol-structs: Likewise. --- daemon/remote.c | 53 ++++++++++++++++++++++++++++++++++++ src/remote/remote_driver.c | 42 +++++++++++++++++++++++++++- src/remote/remote_protocol.x | 13 ++++++++- src/remote_protocol-structs | 11 ++++++++ 4 files changed, 117 insertions(+), 2 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 75abddd431..bc9fd3b417 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -684,6 +684,59 @@ no_memory: goto cleanup; } +static int +remoteDispatchDomainGetSchedulerParametersFlags(struct qemud_server *server ATTRIBUTE_UNUSED, + struct qemud_client *client ATTRIBUTE_UNUSED, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *rerr, + remote_domain_get_scheduler_parameters_flags_args *args, + remote_domain_get_scheduler_parameters_flags_ret *ret) +{ + virDomainPtr dom = NULL; + virTypedParameterPtr params = NULL; + int nparams = args->nparams; + int rv = -1; + + if (!conn) { + virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open")); + goto cleanup; + } + + if (nparams > REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX) { + virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("nparams too large")); + goto cleanup; + } + if (VIR_ALLOC_N(params, nparams) < 0) + goto no_memory; + + if (!(dom = get_nonnull_domain(conn, args->dom))) + goto cleanup; + + if (virDomainGetSchedulerParametersFlags(dom, params, &nparams, + args->flags) < 0) + goto cleanup; + + if (remoteSerializeTypedParameters(params, nparams, + &ret->params.params_len, + &ret->params.params_val) < 0) + goto cleanup; + + rv = 0; + +cleanup: + if (rv < 0) + remoteDispatchError(rerr); + if (dom) + virDomainFree(dom); + VIR_FREE(params); + return rv; + +no_memory: + virReportOOMError(); + goto cleanup; +} + static int remoteDispatchDomainSetSchedulerParameters(struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 5b6713ce83..870b3905cd 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -2466,6 +2466,45 @@ done: return rv; } +static int +remoteDomainGetSchedulerParametersFlags (virDomainPtr domain, + virTypedParameterPtr params, + int *nparams, + unsigned int flags) +{ + int rv = -1; + remote_domain_get_scheduler_parameters_flags_args args; + remote_domain_get_scheduler_parameters_flags_ret ret; + struct private_data *priv = domain->conn->privateData; + + remoteDriverLock(priv); + + make_nonnull_domain (&args.dom, domain); + args.nparams = *nparams; + args.flags = flags; + + memset (&ret, 0, sizeof ret); + if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS_FLAGS, + (xdrproc_t) xdr_remote_domain_get_scheduler_parameters_flags_args, (char *) &args, + (xdrproc_t) xdr_remote_domain_get_scheduler_parameters_flags_ret, (char *) &ret) == -1) + goto done; + + if (remoteDeserializeTypedParameters(ret.params.params_len, + ret.params.params_val, + REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX, + params, + nparams) < 0) + goto cleanup; + + rv = 0; + +cleanup: + xdr_free ((xdrproc_t) xdr_remote_domain_get_scheduler_parameters_flags_ret, (char *) &ret); +done: + remoteDriverUnlock(priv); + return rv; +} + static int remoteDomainSetSchedulerParameters (virDomainPtr domain, virTypedParameterPtr params, int nparams) @@ -6424,7 +6463,9 @@ static virDriver remote_driver = { .domainSetAutostart = remoteDomainSetAutostart, /* 0.3.0 */ .domainGetSchedulerType = remoteDomainGetSchedulerType, /* 0.3.0 */ .domainGetSchedulerParameters = remoteDomainGetSchedulerParameters, /* 0.3.0 */ + .domainGetSchedulerParametersFlags = remoteDomainGetSchedulerParametersFlags, /* 0.9.2 */ .domainSetSchedulerParameters = remoteDomainSetSchedulerParameters, /* 0.3.0 */ + .domainSetSchedulerParametersFlags = remoteDomainSetSchedulerParametersFlags, /* 0.9.2 */ .domainMigratePrepare = remoteDomainMigratePrepare, /* 0.3.2 */ .domainMigratePerform = remoteDomainMigratePerform, /* 0.3.2 */ .domainMigrateFinish = remoteDomainMigrateFinish, /* 0.3.2 */ @@ -6478,7 +6519,6 @@ static virDriver remote_driver = { .domainMigratePerform3 = remoteDomainMigratePerform3, /* 0.9.2 */ .domainMigrateFinish3 = remoteDomainMigrateFinish3, /* 0.9.2 */ .domainMigrateConfirm3 = remoteDomainMigrateConfirm3, /* 0.9.2 */ - .domainSetSchedulerParametersFlags = remoteDomainSetSchedulerParametersFlags, /* 0.9.2 */ }; static virNetworkDriver network_driver = { diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 70387407f8..89a8cd2e14 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -434,6 +434,16 @@ struct remote_domain_get_scheduler_parameters_ret { remote_typed_param params; }; +struct remote_domain_get_scheduler_parameters_flags_args { + remote_nonnull_domain dom; + int nparams; + unsigned int flags; +}; + +struct remote_domain_get_scheduler_parameters_flags_ret { + remote_typed_param params; +}; + struct remote_domain_set_scheduler_parameters_args { remote_nonnull_domain dom; remote_typed_param params; @@ -2281,7 +2291,8 @@ enum remote_procedure { REMOTE_PROC_INTERFACE_CHANGE_BEGIN = 220, /* autogen autogen */ REMOTE_PROC_INTERFACE_CHANGE_COMMIT = 221, /* autogen autogen */ - REMOTE_PROC_INTERFACE_CHANGE_ROLLBACK = 222 /* autogen autogen */ + REMOTE_PROC_INTERFACE_CHANGE_ROLLBACK = 222, /* autogen autogen */ + REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS_FLAGS = 223 /* skipgen skipgen */ /* * Notice how the entries are grouped in sets of 10 ? * Nice isn't it. Please keep it this way when adding more. diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index 8bff88a195..b428bb207e 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -151,6 +151,17 @@ struct remote_domain_get_scheduler_parameters_ret { remote_typed_param * params_val; } params; }; +struct remote_domain_get_scheduler_parameters_flags_args { + remote_nonnull_domain dom; + int nparams; + u_int flags; +}; +struct remote_domain_get_scheduler_parameters_flags_ret { + struct { + u_int params_len; + remote_typed_param * params_val; + } params; +}; struct remote_domain_set_scheduler_parameters_args { remote_nonnull_domain dom; struct { -- 2.47.2