On Tue, 2015-01-13 at 12:05 +0800, lhuang wrote:
On 01/13/2015 10:35 AM, Zhu Guihua wrote:
> Hi Luyao,
Hi Guihua,
> On Mon, 2015-01-12 at 09:38 +0800, lhuang wrote:
>> On 01/10/2015 11:29 AM, Luyao Huang wrote:
>>> We need a new function to build a RNG device object.
>>>
>>> Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
>>> ---
>>> src/qemu/qemu_monitor_json.c | 46
++++++++++++++++++++++++++++++++++++++++++++
>>> src/qemu/qemu_monitor_json.h | 5 +++++
>>> 2 files changed, 51 insertions(+)
>>>
>>> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
>>> index e567aa7..598b15d 100644
>>> --- a/src/qemu/qemu_monitor_json.c
>>> +++ b/src/qemu/qemu_monitor_json.c
>>> @@ -6166,6 +6166,52 @@ qemuMonitorJSONDetachCharDev(qemuMonitorPtr mon,
>>> return ret;
>>> }
>>>
>>> +int
>>> +qemuMonitorJSONAttachRNGDev(qemuMonitorPtr mon,
>>> + const char *chrID,
>>> + const char *objID,
>>> + virDomainRNGDefPtr rng)
>>> +{
>>> + const char *type = NULL;
>>> + virJSONValuePtr props = NULL;
>>> +
>>> + switch ((virDomainRNGBackend) rng->backend) {
>>> + case VIR_DOMAIN_RNG_BACKEND_RANDOM:
>>> + type = "rng-random";
>>> + if (!(props = virJSONValueObjectCreate("s:filename",
rng->source.file, NULL)))
>>> + goto cleanup;
>>> + break;
>>> +
>>> + case VIR_DOMAIN_RNG_BACKEND_EGD:
>>> + if (!chrID) {
>>> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>>> + _("miss chardev id"));
>>> + goto cleanup;
>>> + }
>>> + /*chrID + 4 and objID + 3 pointing to the basic alias name of
chrID.*/
>>> + if (!objID || STRNEQ(chrID + 4, objID + 3)) {
>>> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>>> + _("chardev id '%s' basic alias name
is different from '%s'",
>>> + chrID, objID));
>>> + goto cleanup;
>>> + }
>> I made a big mistake here, I found a better way :
>>
>> + case VIR_DOMAIN_RNG_BACKEND_EGD:
>> + if (STRNEQ_NULLABLE(strstr(chrID, "rng"), strstr(objID,
"rng"))) {
>> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> + _("chardev id '%s' basic alias name is
>> different from '%s'",
>> + chrID, objID));
>> + goto cleanup;
>> + }
>> + type = "rng-egd";
>> + if (!(props = virJSONValueObjectCreate("s:chardev", chrID,
NULL)))
> Are you sure the above line could pass the compilation?
> The first parameter of virJSONValueObjectCreate() should be
> 'struct virJSONValue **'.
>
> Regards,
> Zhu
Oh, my god! thanks your pointing out :)
Maybe this will work? I cannot test it now ,i will double check these
code this night
yeah, it looks ok now.
And I think you'd better test the code in the latest version again.
Regards,
Zhu
+ const char *type = NULL;
+ virJSONValuePtr props;
+
+ if (!(props = virJSONValueNewObject()))
+ goto cleanup;
+
+ switch ((virDomainRNGBackend) rng->backend) {
+ case VIR_DOMAIN_RNG_BACKEND_RANDOM:
+ type = "rng-random";
+ if ((virJSONValueObjectCreate(&props, "s:filename",
rng->source.file, NULL)) < 0)
+ goto cleanup;
+ break;
+
+ case VIR_DOMAIN_RNG_BACKEND_EGD:
+ if (STRNEQ_NULLABLE(strstr(chrID, "rng"), strstr(objID,
"rng"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("chardev id '%s' basic alias name is
different from '%s'",
+ chrID, objID));
+ goto cleanup;
+ }
+ type = "rng-egd";
+ if ((virJSONValueObjectCreate(&props, "s:chardev", chrID,
NULL)) < 0)
+ goto cleanup;
+ break;
>> + goto cleanup;
>> + break;
>> +
>>
>> i remove the check of chrID, because this should be done in the function
>> which call qemuMonitorJSONAttachRNGDev.
>>> + type = "rng-egd";
>>> + if (!(props = virJSONValueObjectCreate("s:chardev",
chrID, NULL)))
>>> + goto cleanup;
>>> + break;
>>> +
>>> + case VIR_DOMAIN_RNG_BACKEND_LAST:
>>> + /*shouldn't happen*/
>>> + goto cleanup;
>>> + }
>>> +
>>> + return qemuMonitorJSONAddObject(mon, type, objID, props);
>>> +
>>> + cleanup:
>>> + virJSONValueFree(props);
>>> + return -1;
>>> +}
>>> +
>>>
>>> int
>>> qemuMonitorJSONGetDeviceAliases(qemuMonitorPtr mon,
>>> diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
>>> index 222f11e..66c519d 100644
>>> --- a/src/qemu/qemu_monitor_json.h
>>> +++ b/src/qemu/qemu_monitor_json.h
>>> @@ -459,6 +459,11 @@ int qemuMonitorJSONAttachCharDev(qemuMonitorPtr mon,
>>> virDomainChrSourceDefPtr chr);
>>> int qemuMonitorJSONDetachCharDev(qemuMonitorPtr mon,
>>> const char *chrID);
>>> +int qemuMonitorJSONAttachRNGDev(qemuMonitorPtr mon,
>>> + const char *chrID,
>>> + const char *objID,
>>> + virDomainRNGDefPtr rng);
>>> +
>>>
>>> int qemuMonitorJSONGetDeviceAliases(qemuMonitorPtr mon,
>>> char ***aliases);
>> Luyao
>>
>> --
>> libvir-list mailing list
>> libvir-list(a)redhat.com
>>
https://www.redhat.com/mailman/listinfo/libvir-list
Thanks,
Luyao
>