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);
|
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,
|
int qemuMonitorAddDrive(qemuMonitorPtr mon,
|
||||||
const char *drivestr)
|
const char *drivestr)
|
||||||
{
|
{
|
||||||
|
@ -672,6 +672,14 @@ int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
|
|||||||
int qemuMonitorDelDevice(qemuMonitorPtr mon,
|
int qemuMonitorDelDevice(qemuMonitorPtr mon,
|
||||||
const char *devalias);
|
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,
|
int qemuMonitorAddDrive(qemuMonitorPtr mon,
|
||||||
const char *drivestr);
|
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,
|
int qemuMonitorJSONAddDrive(qemuMonitorPtr mon,
|
||||||
const char *drivestr)
|
const char *drivestr)
|
||||||
{
|
{
|
||||||
|
@ -229,6 +229,14 @@ int qemuMonitorJSONAddDevice(qemuMonitorPtr mon,
|
|||||||
int qemuMonitorJSONDelDevice(qemuMonitorPtr mon,
|
int qemuMonitorJSONDelDevice(qemuMonitorPtr mon,
|
||||||
const char *devalias);
|
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,
|
int qemuMonitorJSONAddDrive(qemuMonitorPtr mon,
|
||||||
const char *drivestr);
|
const char *drivestr);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user