From 3b526999deec8623d18c3ea69993408cec5eeb5a Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Fri, 21 Mar 2025 10:39:58 +0100 Subject: [PATCH] override: domain: Implement override for virDomainSetThrottleGroup() The bindings generator can't generate proper bindings for virDomainSetThrottleGroup() (because of typed parameters in the arguments) so implement it manually. Signed-off-by: Michal Privoznik --- generator.py | 1 + libvirt-override-api.xml | 8 ++++++++ libvirt-override.c | 41 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/generator.py b/generator.py index e39d3a8..94b46de 100755 --- a/generator.py +++ b/generator.py @@ -441,6 +441,7 @@ skip_impl = { 'virDomainSaveParams', 'virDomainRestoreParams', 'virDomainGetAutostartOnce', + 'virDomainSetThrottleGroup', 'virDomainLxcOpenNamespace', diff --git a/libvirt-override-api.xml b/libvirt-override-api.xml index ee14d94..84c5426 100644 --- a/libvirt-override-api.xml +++ b/libvirt-override-api.xml @@ -871,5 +871,13 @@ + + Add throttlegroup or change all of the throttlegroup options within specific domain. + + + + + + diff --git a/libvirt-override.c b/libvirt-override.c index 31c2416..923887a 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -10937,6 +10937,46 @@ libvirt_virDomainGetAutostartOnce(PyObject *self ATTRIBUTE_UNUSED, return libvirt_intWrap(autostart); } + +static PyObject * +libvirt_virDomainSetThrottleGroup(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ + virDomainPtr domain; + PyObject *pyobj_domain; + const char *group = NULL; + PyObject *pyobj_dict = NULL; + virTypedParameterPtr params = NULL; + int nparams = 0; + unsigned int flags = 0; + int c_retval; + + if (!PyArg_ParseTuple(args, (char *)"OsO|I:virDomainSetThrottleGroup", + &pyobj_domain, &group, &pyobj_dict, &flags)) + return NULL; + + domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); + + if (PyDict_Check(pyobj_dict)) { + if (virPyDictToTypedParams(pyobj_dict, ¶ms, &nparams, + virPyDomainSetBlockIoTuneParams, + VIR_N_ELEMENTS(virPyDomainSetBlockIoTuneParams)) < 0) { + return NULL; + } + } else { + PyErr_Format(PyExc_TypeError, "Restore params must be a dictionary"); + return NULL; + } + + + LIBVIRT_BEGIN_ALLOW_THREADS; + c_retval = virDomainSetThrottleGroup(domain, group, params, nparams, flags); + LIBVIRT_END_ALLOW_THREADS; + + virTypedParamsFree(params, nparams); + + return libvirt_intWrap(c_retval); +} #endif /* LIBVIR_CHECK_VERSION(11, 2, 0) */ @@ -11226,6 +11266,7 @@ static PyMethodDef libvirtMethods[] = { #endif /* LIBVIR_CHECK_VERSION(9, 0, 0) */ #if LIBVIR_CHECK_VERSION(11, 2, 0) {(char *) "virDomainGetAutostartOnce", libvirt_virDomainGetAutostartOnce, METH_VARARGS, NULL}, + {(char *) "virDomainSetThrottleGroup", libvirt_virDomainSetThrottleGroup, METH_VARARGS, NULL}, #endif /* LIBVIR_CHECK_VERSION(11, 2, 0) */ {NULL, NULL, 0, NULL} };