Re: [Qemu-devel] Re: [RFC][PATCH v1 00/11] QEMU Guest Agent: QMP-based host/guest communication (virtagent)
On 03/25/2011 05:36 PM, Michael Roth wrote: Basically just need a way to pull whatever is stored in the response qdict's return field out without specifying the QTYPE in advance... which exists in qdict.c:qdict_get_obj(), it's just not currently exposed to outside callers. Just use qdict_get()--but I still don't understand what the problem is. Argh! So that solves the problem completely. Thanks :) Yeah, the asymmetry is confusing. qdict_put() takes anything but a QObject yet qdict_get() returns a QObject. qdict_put_obj() takes a QObject and qdict_get_obj() is static. Regards, Anthony Liguori Regards, Anthony Liguori
[Qemu-devel] Re: [RFC][PATCH v1 00/11] QEMU Guest Agent: QMP-based host/guest communication (virtagent)
On 03/25/2011 02:47 PM, Michael Roth wrote: These apply on top of Anthony's glib tree, commit 03d5927deb5e6baebaade1b4c8ff2428a85e125c currently, and can also be obtained from: git://repo.or.cz/qemu/mdroth.git qga_v1 The QGA-specific patches are in pretty rough shape, and there are some outstanding issues that I'll note below. I just wanted to put the general approach out there for consideration. Patch-level comments/review are still much-appreciated though. However, patches 1-5 are general json/QAPI-related fixes. Anthony, please consider pulling these into your glib tree. The json fix-ups may need further evaluation, but I'm confident they're at least an improvement. The QAPI ones are trivial fix-ups. ISSUES/TODOS: - QMP's async callbacks expect the command results to be de-marshalled beforehand. This is completely infeasible to attempt outside of the code generator, so this is a big area that needs to be addressed. So for now, only the 'guest-ping' command works, since it has no return value. The dummy guest-view-file command will cause an error to be reported to the client. Well, not completely de-marshalled. Basically just need a way to pull whatever is stored in the response qdict's return field out without specifying the QTYPE in advance... which exists in qdict.c:qdict_get_obj(), it's just not currently exposed to outside callers. Alternatively, the callback function can take in the entire response's qdict and pull the value out using knowledge from the schema. Will look into this more, but not nearly involved as I first thought. - qemu-ga guest daemon is currently not working over virtio-serial or isa-serial. This is probably an issue with how I'm using glib's io channel interfaces, still investigating. This means the only way to currently test is by invocing qemu-ga with -c unix-listen -psockpath, then doing something like `socat /dev/ttyS0,raw,echo=0 unix-connect:sockpath`. - guest-view-file is a stub, and will be broken out into an open/read/close set of RPCs, possibly with a high-level interface built around those.
Re: [Qemu-devel] Re: [RFC][PATCH v1 00/11] QEMU Guest Agent: QMP-based host/guest communication (virtagent)
On 03/25/2011 03:42 PM, Michael Roth wrote: On 03/25/2011 02:47 PM, Michael Roth wrote: These apply on top of Anthony's glib tree, commit 03d5927deb5e6baebaade1b4c8ff2428a85e125c currently, and can also be obtained from: git://repo.or.cz/qemu/mdroth.git qga_v1 The QGA-specific patches are in pretty rough shape, and there are some outstanding issues that I'll note below. I just wanted to put the general approach out there for consideration. Patch-level comments/review are still much-appreciated though. However, patches 1-5 are general json/QAPI-related fixes. Anthony, please consider pulling these into your glib tree. The json fix-ups may need further evaluation, but I'm confident they're at least an improvement. The QAPI ones are trivial fix-ups. ISSUES/TODOS: - QMP's async callbacks expect the command results to be de-marshalled beforehand. This is completely infeasible to attempt outside of the code generator, so this is a big area that needs to be addressed. So for now, only the 'guest-ping' command works, since it has no return value. The dummy guest-view-file command will cause an error to be reported to the client. Well, not completely de-marshalled. I don't follow. Are you talking about async callbacks within QEMU? Because that should be totally transparent to you. You'll receive a qobject and you can do whatever you need with it. Basically just need a way to pull whatever is stored in the response qdict's return field out without specifying the QTYPE in advance... which exists in qdict.c:qdict_get_obj(), it's just not currently exposed to outside callers. Just use qdict_get()--but I still don't understand what the problem is. Regards, Anthony Liguori Alternatively, the callback function can take in the entire response's qdict and pull the value out using knowledge from the schema. Will look into this more, but not nearly involved as I first thought. - qemu-ga guest daemon is currently not working over virtio-serial or isa-serial. This is probably an issue with how I'm using glib's io channel interfaces, still investigating. This means the only way to currently test is by invocing qemu-ga with -c unix-listen -psockpath, then doing something like `socat /dev/ttyS0,raw,echo=0 unix-connect:sockpath`. - guest-view-file is a stub, and will be broken out into an open/read/close set of RPCs, possibly with a high-level interface built around those.
Re: [Qemu-devel] Re: [RFC][PATCH v1 00/11] QEMU Guest Agent: QMP-based host/guest communication (virtagent)
On 03/25/2011 05:03 PM, Anthony Liguori wrote: On 03/25/2011 03:42 PM, Michael Roth wrote: On 03/25/2011 02:47 PM, Michael Roth wrote: These apply on top of Anthony's glib tree, commit 03d5927deb5e6baebaade1b4c8ff2428a85e125c currently, and can also be obtained from: git://repo.or.cz/qemu/mdroth.git qga_v1 The QGA-specific patches are in pretty rough shape, and there are some outstanding issues that I'll note below. I just wanted to put the general approach out there for consideration. Patch-level comments/review are still much-appreciated though. However, patches 1-5 are general json/QAPI-related fixes. Anthony, please consider pulling these into your glib tree. The json fix-ups may need further evaluation, but I'm confident they're at least an improvement. The QAPI ones are trivial fix-ups. ISSUES/TODOS: - QMP's async callbacks expect the command results to be de-marshalled beforehand. This is completely infeasible to attempt outside of the code generator, so this is a big area that needs to be addressed. So for now, only the 'guest-ping' command works, since it has no return value. The dummy guest-view-file command will cause an error to be reported to the client. Well, not completely de-marshalled. I don't follow. Are you talking about async callbacks within QEMU? Because that should be totally transparent to you. You'll receive a qobject and you can do whatever you need with it. Heh, I was terribly confused when I initially noted that issue...must've been looking at a function further up the return chain and convinced myself something outside qmp was expected to de-marshal, but that was handled elsewhere in qmp-marshal.c The follow-up was with regard to the much-lesser issue of dealing with something like: static void qmp_guest_view_file_cb(void *qmp__opaque, QObject *qmp__retval, Error *qmp__err) The generated code expects that to be a QObject of a certain type. On the QmpProxy side, we have a response from the guest in the form of a qdict, with the retval stored with the return key: { return: json/qobject of some type } So you need to pull object of some type out to pass to the callback. I was under the impression that there was no generic qdict_get(), and that you were expected to know the type in advance. But... Basically just need a way to pull whatever is stored in the response qdict's return field out without specifying the QTYPE in advance... which exists in qdict.c:qdict_get_obj(), it's just not currently exposed to outside callers. Just use qdict_get()--but I still don't understand what the problem is. Argh! So that solves the problem completely. Thanks :) Regards, Anthony Liguori