提交 6908f8ca 编写于 作者: P Peter Krempa

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.
上级 ddf52d01
...@@ -3132,6 +3132,54 @@ int qemuMonitorAddDevice(qemuMonitorPtr mon, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册