From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=56811 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PwxcT-0008Qt-Hj for qemu-devel@nongnu.org; Tue, 08 Mar 2011 09:10:42 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PwxcS-0008Ml-8P for qemu-devel@nongnu.org; Tue, 08 Mar 2011 09:10:37 -0500 Received: from mail-iw0-f173.google.com ([209.85.214.173]:38963) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PwxcS-0008MW-4x for qemu-devel@nongnu.org; Tue, 08 Mar 2011 09:10:36 -0500 Received: by iwl42 with SMTP id 42so5945797iwl.4 for ; Tue, 08 Mar 2011 06:10:35 -0800 (PST) Message-ID: <4D7638BE.60808@codemonkey.ws> Date: Tue, 08 Mar 2011 08:10:06 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 00/22] QAPI Round 1 References: <1299460984-15849-1-git-send-email-aliguori@us.ibm.com> <4D7500C8.1080101@codemonkey.ws> <4D760F2B.7030004@redhat.com> <4D7630BA.4010609@us.ibm.com> <4D763311.5030905@redhat.com> <4D763525.2030700@codemonkey.ws> <4D763674.8000600@redhat.com> In-Reply-To: <4D763674.8000600@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: Stefan Hajnoczi , Luiz Capitulino , Adam Litke , Markus Armbruster , qemu-devel@nongnu.org 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. Regards, Anthony Liguori > Especially as I expect we don't really want to copy a file to the > host, but instead stream it to some other channel. >