MonitorProtocol: Difference between revisions

From KVM
No edit summary
No edit summary
Line 42: Line 42:
http://repo.or.cz/w/qemu/qmp-unstable.git
http://repo.or.cz/w/qemu/qmp-unstable.git


'''NOTE''': all branches in this repository are constantly ''rebased''.
'''NOTE''': all branches in this repository are constantly ''rebased'' (master inclusive).


== TODO ==
== TODO ==
Line 50: Line 50:
* Asynchronous commands support
* Asynchronous commands support
* Better QObjects and QMP debug support
* Better QObjects and QMP debug support
* Array-based Monitor's command table
* Libqmp
* Libqmp



Revision as of 15:06, 28 December 2009

QEMU Monitor Protocol

The QEMU Monitor Protocol (QMP) allows applications to communicate with QEMU's Monitor.

QMP is JSON-based, its main features are:

  • Lightweight, text-based, easy to parse data format
  • Asynchronous events support

The README file explains how to use it and its full specification can be found here.

General Status

A preview version of QMP is available in QEMU version 0.12.

However, QMP is still under development being considered unstable and incomplete. For more information about converted handlers, please check #Conversion Status.

Examples

In the following examples, 'C' stands for 'Client' and 'S' stands for 'Server'.

Server Greeting

S: {"QMP": {"capabilities": []}}

Query version

C: { "execute": "query-version" }
S: {"return": {"qemu": "0.11.50", "package": ""}}

Eject a device

C: { "execute": "eject", "arguments": { "device": "ide1-cd0" } }
S: {"return": "OK"}

Development

Primary contact is Luiz Capitulino, but all QMP-related discussions happen on the qemu-devel mailing list.

Next features, hot fixes and other patches are stored in the QMP unstable repository:

http://repo.or.cz/w/qemu/qmp-unstable.git

NOTE: all branches in this repository are constantly rebased (master inclusive).

TODO

  • Convert all remaining commands
  • High-level documentation
  • Asynchronous commands support
  • Better QObjects and QMP debug support
  • Array-based Monitor's command table
  • Libqmp

Conversion Status

UPDATED: 2009-12-16

Command Info
Handlers 62 36
Converted 19 15
Percentage 30% 41%

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: merged, but error handling is incomplete

NOTE: Handlers used by Libvirt are marked with yellow.

Command handlers

Handler name Status Version Comments
do_acl_add()
do_acl_policy()
do_acl_remove()
do_acl_reset()
do_acl_show()
do_balloon() merged 0.12
do_boot_set()
do_change() merged 0.12
do_closefd() merged 0.12
do_commit()
do_cont() merged 0.12
do_cpu_set()
do_delvm()
do_device_add()
do_device_del()
do_eject() merged 0.12
do_gdbserver()
do_getfd() merged 0.12
do_help_cmd()
do_info() merged 0.12 as 'query-' commands
do_inject_mce()
do_inject_nmi()
do_ioport_read()
do_ioport_write()
do_loadvm()
do_log()
do_logfile()
do_memory_dump()
do_memory_save() partial 0.12
do_migrate() partial 0.12
do_migrate_cancel() merged 0.12
do_migrate_set_downtime()
do_migrate_set_speed() merged 0.12
do_mouse_button()
do_mouse_move()
do_mouse_set()
do_pci_device_hot_remove() partial 0.12
do_physical_memory_dump()
do_physical_memory_save() partial 0.12
do_print()
do_quit() merged 0.12
do_savevm()
do_screen_dump()
do_sendkey()
do_set_link()
do_singlestep()
do_stop() merged 0.12
do_stop_capture()
do_sum()
do_system_powerdown() merged 0.12
do_system_reset() merged 0.12
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() partial 0.12

Info handlers

Handler name Status Version Comments
bdrv_info() merged 0.12
bdrv_info_stats() merged 0.12
do_info_balloon() merged 0.12
do_info_capture()
do_info_cpus() merged 0.12
do_info_cpu_stats()
do_info_history()
do_info_hpet() merged 0.12
do_info_jit()
do_info_kvm() merged 0.12
do_info_mice() merged 0.12
do_info_migrate() merged 0.12
do_info_name() merged 0.12
do_info_network()
do_info_numa()
do_info_profile()
do_info_qdm()
do_info_qtree()
do_info_registers()
do_info_roms()
do_info_snapshots()
do_info_status() merged 0.12
do_info_usernet()
do_info_uuid() merged 0.12
do_info_version() merged 0.12
do_info_vnc() merged 0.12
irq_info()
mem_info()
pci_info()
pcmcia_info()
pic_info()
qemu_chr_info() merged 0.12
tlb_info()
usb_host_info()
usb_info()

History

This was the fourth proposal for a Monitor protocol, past discussions can be found in the following links: