mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: monitor: Add functions for object hot-add/remove
To allow live modification of device backends in qemu libvirt needs to be able to hot-add/remove "objects". Add monitor backend functions to allow this. This function will be used for hot-add/remove of RNG backends, IOThreads, memory backing objects, etc.
This commit is contained in:
parent
ddf52d01f8
commit
6908f8cab3
@ -3132,6 +3132,54 @@ int qemuMonitorAddDevice(qemuMonitorPtr mon,
|
||||
return qemuMonitorAddDeviceWithFd(mon, devicestr, -1, NULL);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* qemuMonitorAddObject:
|
||||
* @mon: Pointer to monitor object
|
||||
* @type: Type name of object to add
|
||||
* @objalias: Alias of the new object
|
||||
* @props: Optional arguments for the given type. The object is consumed and
|
||||
* should not be referenced by the caller after this function returns.
|
||||
*
|
||||
* Returns 0 on success -1 on error.
|
||||
*/
|
||||
int
|
||||
qemuMonitorAddObject(qemuMonitorPtr mon,
|
||||
const char *type,
|
||||
const char *objalias,
|
||||
virJSONValuePtr props)
|
||||
{
|
||||
VIR_DEBUG("mon=%p type=%s objalias=%s props=%p",
|
||||
mon, type, objalias, props);
|
||||
int ret = -1;
|
||||
|
||||
if (mon->json)
|
||||
ret = qemuMonitorJSONAddObject(mon, type, objalias, props);
|
||||
else
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("object adding requires JSON monitor"));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
qemuMonitorDelObject(qemuMonitorPtr mon,
|
||||
const char *objalias)
|
||||
{
|
||||
VIR_DEBUG("mon=%p objalias=%s", mon, objalias);
|
||||
int ret = -1;
|
||||
|
||||
if (mon->json)
|
||||
ret = qemuMonitorJSONDelObject(mon, objalias);
|
||||
else
|
||||
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
|
||||
_("object deletion requires JSON monitor"));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int qemuMonitorAddDrive(qemuMonitorPtr mon,
|
||||
const char *drivestr)
|
||||
{
|
||||
|
@ -672,6 +672,14 @@ int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
|
||||
int qemuMonitorDelDevice(qemuMonitorPtr mon,
|
||||
const char *devalias);
|
||||
|
||||
int qemuMonitorAddObject(qemuMonitorPtr mon,
|
||||
const char *type,
|
||||
const char *objalias,
|
||||
virJSONValuePtr props);
|
||||
|
||||
int qemuMonitorDelObject(qemuMonitorPtr mon,
|
||||
const char *objalias);
|
||||
|
||||
int qemuMonitorAddDrive(qemuMonitorPtr mon,
|
||||
const char *drivestr);
|
||||
|
||||
|
@ -3561,6 +3561,63 @@ int qemuMonitorJSONAddDevice(qemuMonitorPtr mon,
|
||||
}
|
||||
|
||||
|
||||
int qemuMonitorJSONAddObject(qemuMonitorPtr mon,
|
||||
const char *type,
|
||||
const char *objalias,
|
||||
virJSONValuePtr props)
|
||||
{
|
||||
int ret = -1;
|
||||
virJSONValuePtr cmd;
|
||||
virJSONValuePtr reply = NULL;
|
||||
|
||||
cmd = qemuMonitorJSONMakeCommand("object-add",
|
||||
"s:qom-type", type,
|
||||
"s:id", objalias,
|
||||
"A:props", props,
|
||||
NULL);
|
||||
if (!cmd)
|
||||
goto cleanup;
|
||||
|
||||
/* @props is part of @cmd now. Avoid double free */
|
||||
props = NULL;
|
||||
|
||||
ret = qemuMonitorJSONCommand(mon, cmd, &reply);
|
||||
|
||||
if (ret == 0)
|
||||
ret = qemuMonitorJSONCheckError(cmd, reply);
|
||||
|
||||
cleanup:
|
||||
virJSONValueFree(cmd);
|
||||
virJSONValueFree(reply);
|
||||
virJSONValueFree(props);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int qemuMonitorJSONDelObject(qemuMonitorPtr mon,
|
||||
const char *objalias)
|
||||
{
|
||||
int ret;
|
||||
virJSONValuePtr cmd;
|
||||
virJSONValuePtr reply = NULL;
|
||||
|
||||
cmd = qemuMonitorJSONMakeCommand("object-del",
|
||||
"s:id", objalias,
|
||||
NULL);
|
||||
if (!cmd)
|
||||
return -1;
|
||||
|
||||
ret = qemuMonitorJSONCommand(mon, cmd, &reply);
|
||||
|
||||
if (ret == 0)
|
||||
ret = qemuMonitorJSONCheckError(cmd, reply);
|
||||
|
||||
virJSONValueFree(cmd);
|
||||
virJSONValueFree(reply);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int qemuMonitorJSONAddDrive(qemuMonitorPtr mon,
|
||||
const char *drivestr)
|
||||
{
|
||||
|
@ -229,6 +229,14 @@ int qemuMonitorJSONAddDevice(qemuMonitorPtr mon,
|
||||
int qemuMonitorJSONDelDevice(qemuMonitorPtr mon,
|
||||
const char *devalias);
|
||||
|
||||
int qemuMonitorJSONAddObject(qemuMonitorPtr mon,
|
||||
const char *type,
|
||||
const char *objalias,
|
||||
virJSONValuePtr props);
|
||||
|
||||
int qemuMonitorJSONDelObject(qemuMonitorPtr mon,
|
||||
const char *objalias);
|
||||
|
||||
int qemuMonitorJSONAddDrive(qemuMonitorPtr mon,
|
||||
const char *drivestr);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user