MonitorProtocol: Difference between revisions
No edit summary |
No edit summary |
||
Line 3: | Line 3: | ||
The QEMU Monitor Protocol (QMP) is a [http://www.json.org JSON]-based protocol, which allows applications to communicate with QEMU's Monitor. | The QEMU Monitor Protocol (QMP) is a [http://www.json.org JSON]-based protocol, which allows applications to communicate with QEMU's Monitor. | ||
== General Status == | |||
== Features == | QMP is available in QEMU since version 0.13, although it is still under development and not all QEMU commands are available. | ||
QMP's specification can be found [http://git.savannah.gnu.org/cgit/qemu.git/tree/QMP/qmp-spec.txt here]. | |||
== Main Features == | |||
* Lightweight, text-based, easy to parse data format | * Lightweight, text-based, easy to parse data format | ||
* Asynchronous events support | * Asynchronous events support | ||
== | == Examples == | ||
== TODO == | |||
* Convert all commands | |||
* Asynchronous commands | |||
* Libqmp | |||
== Development == | == Development == |
Revision as of 08:39, 16 December 2009
QEMU Monitor Protocol
The QEMU Monitor Protocol (QMP) is a JSON-based protocol, which allows applications to communicate with QEMU's Monitor.
General Status
QMP is available in QEMU since version 0.13, although it is still under development and not all QEMU commands are available.
QMP's specification can be found here.
Main Features
- Lightweight, text-based, easy to parse data format
- Asynchronous events support
Examples
TODO
- Convert all commands
- Asynchronous commands
- Libqmp
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, its draft specification can be found here.
- conversions-qobject: output in QObject conversions
- conversions-qerror: error handling conversions
Project status (2009-12-07)
All the infrastructure has been merged and the protocol is already functional, but only a few commands will work.
Main building blocks
- QObject Layer (merged)
- QObject Monitor infrastructure (merged)
- JSON encoder/decoder (merged)
- Error framework (merged)
Conversion work
- Input through QDict (merged)
- Output in QObject style (in progress)
- Error handling (in progress)
Conversion work detailed status
Command | Info | |
Handlers | 61 | 35 |
Fully Converted | 7 | 14 |
Percentage | 11% | 40% |
The following tables have a per-function status. There is one table for command handlers and another one for info handlers.
Status can be:
- merged: already merged upstream
- converted: converted but not merged yet
- partial: not fully converted
- never fails: does not need error handling
NOTE: Handlers used by Libvirt are marked with yellow.
Command handlers
Handler name | Output in QObject | Error handling | Comments |
do_acl_add() | |||
do_acl_policy() | |||
do_acl_remove() | |||
do_acl_reset() | |||
do_acl_show() | |||
do_balloon() | merged | never fails | |
do_boot_set() | |||
do_change() | |||
do_closefd() | merged | ||
do_commit() | |||
do_cont() | merged | never fails | TODO: encrypted images |
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 | never fails | |
do_migrate_set_downtime() | |||
do_migrate_set_speed() | merged | never fails | |
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 | never fails | |
do_stop_capture() | |||
do_sum() | |||
do_system_powerdown() | merged | nerver fails | |
do_system_reset() | merged | never fails | |
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() | partial | |
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() | partial | |
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:
- http://www.mail-archive.com/qemu-devel@nongnu.org/msg14593.html
- http://lists.gnu.org/archive/html/qemu-devel/2009-01/msg00655.html
- http://lists.gnu.org/archive/html/qemu-devel/2009-06/msg01584.html
Contact
Primary contact is Luiz Capitulino <lcapitulino at redhat dot com> but most project discussions happen on the QEMU-devel mailing list: