Features/GuestAgent/Bidirectional
Overview
QEMU Guest Agent currently provides a mechanism for a host to execute commands within a guest. There are a number of use-cases where it would be beneficial to allow a guest to execute functionality in a host, or to at least provide events that a host can may opt to respond to in certain ways.
One such use case is copy/paste functionality. When user copies data into a buffer in a guest, the user will often expect that this copy/paste buffer is sync'd to the desktop environment they're using to control the guest. This is currently not the case, and with the introduction of the new GTK gui upstream, the use case for this kind of integration is even stronger.
Other use-cases include querying for host stats and hypervisor level to better support performance/configuration optimizations for cooperative guests.
Design
The planned approach is to have qemu-ga expose a local socket (unix domain socket ideally, but potentionally a local network socket for w32), which guest-side clients communicate with using the same JSON wire format as host-side clients, but with a different RPC/command set defined by a separate schema.
Guest-side clients should establish persistant connections so that host-driven events, such as host->guest copy/paste buffer sync, can be recieved and reacted to.
Multiple guest-side clients should be supported to allow for multiple system-level/session-level clients to communicate information to the host or recieve events.
Some type of multicast mechanism may be needed to deliver events to multiple clients. Response tagging may be needed to send responses to the correct guest-side clients.
Plans
- April 5: RFC for guest-side RPC server
- April 15: v1 for guest-side RPC server + initial command set (guest buffer copy event)
- ???: integrate qemu-ga commands into QMP so that we can hook in guest->host event handlers within QEMU rather than externally
- ???: implement qemu-ga host->guest command to sync host buffer into guest-side clients (may require multicast)
Owners
- Michael Roth <mdroth at linux-vnet-ibm-com>