On 03/08/2011 08:17 AM, Avi Kivity wrote:
On 03/08/2011 04:10 PM, Anthony Liguori wrote:
On 03/08/2011 08:00 AM, Avi Kivity wrote:
On 03/08/2011 03:54 PM, Anthony Liguori wrote:
(and gah, do we really need a vfs/rpc in qemu?)
Fun, eh :-) Unfortunately, our friends at VMware provide a
VixVM_CopyFileFromGuestToHost API so there's an expectation that we
provide a similar interface.
Yes, but do we have to terminate it in qemu?
No, I'm in the process of writing up my latest proposal.
The idea is pretty simple. QAPI generates code for libqmp that takes
native arguments for a command and generates a QObject. It also
generates code for QEMU that takes a QObject and generates native
arguments to pass to a function.
For guest commands, we combine the two such that we unmarshal the
incoming QObject to native arguments, then pass it to another
function that marshals the arguments to a QObject. The QObject is
then passed to the guest-agent which uses the same generated code as
QEMU to unmarshal the qobject to native arguments and dispatch to a
function.
That means the only new code we need for the guest agent is the
JSON-over-virtio-serial transport. To implement guest commands, we
just add the command to the schema, implement the native arguments
version in guest-agent, and that's it.
QEMU will buffer all input and output to the guest acting as a first
line of defence from a security PoV. That means that the guest
doesn't get to talk directly to the management tools which removes
that as a direct attack surface.
The nature of QEMU is such that if we do tagging correctly, we can
also support live migration transparently to the guest too.
Okay, do I understand correctly that qemu does not understand each
command individually? It just reads the schema and converts from one
rpc protocol to another (even if they are the same protocol)?
So: mgmt -> json -> qemu -> (qobject -> ) json -> guest (and back again).
Exactly.
If that's the case, I like it.
QEMU will have the ability to execute commands to the guest agent and
that will be used by something like HMP to provide friendly versions of
the interfaces. However, my long term plan is to move HMP out of core
QEMU and the QAPI refactoring is making the HMP code not depend on any
core QEMU functions, only on the QMP interface.
Regards,
Anthony Liguori