MonitorProtocol: Difference between revisions
No edit summary |
No edit summary |
||
Line 47: | Line 47: | ||
* '''conversions-qjson''': handler conversions which depend on the JSON decoder, therefore the latest version of Anthony's QJSon series is included | * '''conversions-qjson''': handler conversions which depend on the JSON decoder, therefore the latest version of Anthony's QJSon series is included | ||
== Project status (2009-11-10) == | |||
Most of the infrastructure has been merged, the fundamental missing parts are a JSON encoder/decoder and an error framework. | Most of the infrastructure has been merged, the fundamental missing parts are a JSON encoder/decoder and an error framework. | ||
Line 55: | Line 55: | ||
Additionally, all command handlers need to be converted to use ''QObjects''. This work is in progress, but most handlers depend on the JSON decoder to be merged. | Additionally, all command handlers need to be converted to use ''QObjects''. This work is in progress, but most handlers depend on the JSON decoder to be merged. | ||
=== Main building blocks === | |||
* QObject Layer ('''merged''') | * QObject Layer ('''merged''') | ||
Line 63: | Line 63: | ||
* Error framework ('''under review''') | * Error framework ('''under review''') | ||
=== Command handlers conversion work === | |||
* Input through QDict ('''merged''') | * Input through QDict ('''merged''') | ||
Line 80: | Line 80: | ||
Most ''command'' handlers depend on the error framework (QError) to be converted. | Most ''command'' handlers depend on the error framework (QError) to be converted. | ||
=== Command handlers === | ==== Command handlers ==== | ||
{| border="1" | {| border="1" | ||
Line 333: | Line 333: | ||
|} | |} | ||
=== Info handlers === | ==== Info handlers ==== | ||
{| border="1" | {| border="1" |
Revision as of 08:03, 10 November 2009
Monitor Protocol
The QEMU Monitor Protocol (QMP) project goal is to implement a JSON based protocol for QEMU.
Problem
QEMU does not provide a way for applications to control it at the "machine level", that is, the current existing interface (called Monitor) was designed for human interaction only.
This is very problematic for applications, for the following reasons:
- It is needed to parse output meant to be read by humans
- It is not reliable, because it is not always possible to know whether a command has been successfully executed or not
- It lacks support for asynchronous events
Solution
Improve QEMU's Monitor to support a machine protocol with the following features:
- Use a lightweight, text-based, easy to parse data format (JSON has been chosen)
- Protocol stability should be guaranteed
- Asynchronous events support
- Parallel execution of commands
- A standard way to query protocol capabilities
A draft specification already exists and can be found here.
Libqmp
Although this is still under discussion, we are also going to provide a C library with a stable ABI.
The short-term plan is to have a simple API to send commands and receive responses, this way C clients do not need to have their own JSON implementation.
The long-term plan is to provide a full management API for QEMU.
Development
The development takes place in the QMP unstable tree:
http://repo.or.cz/w/qemu/qmp-unstable.git
NOTE: all branches in this repository are constantly rebased.
Important branches:
- master: contains a functional QMP implementation for emission only (includes asynchronous messages). Protocol documentation can be found in the QMP directory
- conversions-simple: simple handler conversions that do not depend on the JSON decoder
- conversions-qjson: handler conversions which depend on the JSON decoder, therefore the latest version of Anthony's QJSon series is included
Project status (2009-11-10)
Most of the infrastructure has been merged, the fundamental missing parts are a JSON encoder/decoder and an error framework.
Patches exist for a JSON encoder (QJSON) and an error framework (QError), but they have not been merged yet.
Additionally, all command handlers need to be converted to use QObjects. This work is in progress, but most handlers depend on the JSON decoder to be merged.
Main building blocks
- QObject Layer (merged)
- QObject Monitor infrastructure (merged)
- JSON decoder (in progress)
- JSON encoder (not started)
- Error framework (under review)
Command handlers conversion work
- Input through QDict (merged)
- Output in QObject style (in progress)
- Error handling (not started)
Handlers conversion detailed status
There are two tables, one for command handlers and another one for info handlers.
Status can be:
- merged: already merged upstream
- converted: handler is converted (in either branch conversions-simple or conversions-qjson) but not submitted yet
Most command handlers depend on the error framework (QError) to be converted.
Command handlers
Handler name | Status | Comments |
do_acl_add() | ||
do_acl_policy() | ||
do_acl_remove() | ||
do_acl_reset() | ||
do_acl_show() | ||
do_balloon() | merged | |
do_boot_set() | ||
do_change() | ||
do_closefd() | merged | |
do_commit() | ||
do_cont() | merged | |
do_cpu_set() | ||
do_delvm() | ||
do_device_add() | ||
do_device_del() | ||
do_eject() | merged | |
do_gdbserver() | ||
do_getfd() | merged | |
do_help_cmd() | ||
do_info() | merged | |
do_inject_mce() | ||
do_inject_nmi() | ||
do_ioport_read() | ||
do_ioport_write() | ||
do_loadvm() | ||
do_log() | ||
do_logfile() | ||
do_memory_dump() | ||
do_memory_save() | merged | |
do_migrate() | merged | |
do_migrate_cancel() | merged | |
do_migrate_set_downtime() | ||
do_migrate_set_speed() | merged | |
do_mouse_button() | ||
do_mouse_move() | ||
do_mouse_set() | ||
do_pci_device_hot_remove() | merged | |
do_physical_memory_dump() | ||
do_physical_memory_save() | merged | |
do_print() | ||
do_quit() | merged | |
do_savevm() | ||
do_screen_dump() | ||
do_sendkey() | ||
do_set_link() | ||
do_singlestep() | ||
do_stop() | merged | |
do_stop_capture() | ||
do_sum() | ||
do_system_powerdown() | merged | |
do_system_reset() | merged | |
do_usb_add() | ||
do_usb_del() | ||
do_watchdog_action() | ||
do_wav_capture() | ||
drive_hot_add() | ||
net_host_device_add() | ||
net_host_device_remove() | ||
net_slirp_hostfwd_add() | ||
net_slirp_hostfwd_remove() | ||
pci_device_hot_add() | converted |
Info handlers
Handler name | Status | Comments |
bdrv_info() | converted | |
bdrv_info_stats() | converted | |
do_info_balloon() | merged | |
do_info_capture() | ||
do_info_cpus() | merged | |
do_info_cpu_stats() | ||
do_info_history() | ||
do_info_hpet() | converted | |
do_info_jit() | ||
do_info_kvm() | converted | |
do_info_mice() | converted | |
do_info_migrate() | converted | |
do_info_name() | converted | |
do_info_network() | converted | |
do_info_numa() | ||
do_info_profile() | ||
do_info_qdm() | ||
do_info_qtree() | ||
do_info_registers() | ||
do_info_roms() | ||
do_info_snapshots() | ||
do_info_status() | converted | |
do_info_usernet() | ||
do_info_uuid() | converted | |
do_info_version() | merged | |
do_info_vnc() | converted | |
irq_info() | ||
mem_info() | ||
pci_info() | ||
pcmcia_info() | ||
pic_info() | ||
qemu_chr_info() | converted | |
tlb_info() | ||
usb_host_info() | ||
usb_info() |
History
This is the fourth proposal for a machine protocol, past discussions can be found in the following links: